You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Amazon AWS CDK为密钥对添加描述?

解决AWS CDK中密钥对无描述字段导致参数存储条目描述为空的问题

AWS CDK的ec2.KeyPair构造确实没有内置的描述属性,创建密钥对后,自动生成的SSM参数(路径格式为/ec2/keypair/{密钥对名称})会默认显示空描述。要解决这个问题,你可以通过自定义资源调用SSM API来更新参数描述,具体实现如下:

实现步骤(TypeScript示例)

  1. 先创建EC2密钥对资源;
  2. 用AWS自定义资源(Custom Resource)调用SSM的PutParameter接口,覆盖原有参数并添加描述。
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as customResources from 'aws-cdk-lib/custom-resources';
import { Construct } from 'constructs';

export class KeyPairDescStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 1. 创建EC2密钥对
    const myKeyPair = new ec2.KeyPair(this, 'ProdWebKeyPair', {
      keyPairName: 'prod-web-server-keypair',
      type: ec2.KeyPairType.RSA,
    });

    // 2. 自定义资源更新SSM参数描述
    new customResources.AwsCustomResource(this, 'UpdateKeyPairParamDesc', {
      onCreate: {
        service: 'SSM',
        action: 'putParameter',
        parameters: {
          // 匹配密钥对自动生成的SSM参数路径
          Name: myKeyPair.keyPairName.apply(name => `/ec2/keypair/${name}`),
          Type: 'String',
          Value: myKeyPair.publicKey, // 保留原有公钥值
          Description: '生产环境Web服务器登录密钥对,仅运维团队可访问',
          Overwrite: true, // 允许覆盖现有参数
        },
        physicalResourceId: customResources.PhysicalResourceId.of(`keypair-desc-${myKeyPair.keyPairName}`),
      },
      // 授予自定义资源SSM参数修改权限
      policy: customResources.AwsCustomResourcePolicy.fromSdkCalls({
        resources: customResources.AwsCustomResourcePolicy.ANY_RESOURCE,
      }),
    });
  }
}

关键说明

  • 密钥对对应的SSM参数路径固定为/ec2/keypair/{密钥对名称},必须严格匹配才能更新描述;
  • Overwrite: true是必须的,因为参数已由密钥对构造自动创建,需要覆盖原有配置;
  • 自定义资源会在栈创建时触发一次PutParameter调用,确保描述被设置;
  • 若使用Python/Java等其他CDK语言,逻辑完全一致,仅语法需对应调整。

内容的提问来源于stack exchange,提问作者Tolu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:11:32