如何使用Amazon AWS CDK为密钥对添加描述?
解决AWS CDK中密钥对无描述字段导致参数存储条目描述为空的问题
AWS CDK的ec2.KeyPair构造确实没有内置的描述属性,创建密钥对后,自动生成的SSM参数(路径格式为/ec2/keypair/{密钥对名称})会默认显示空描述。要解决这个问题,你可以通过自定义资源调用SSM API来更新参数描述,具体实现如下:
实现步骤(TypeScript示例)
- 先创建EC2密钥对资源;
- 用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
相关产品推荐
相关产品推荐

