如何在 AWS CDK 中创建没有值的参数存储条目?

Mal*_*ous 7 aws-ssm aws-cdk

在 AWS CDK 中,您可以创建参数存储条目来存储密码等机密。

但是,您不能将该值留空,也不应该将密钥放入 CDK git 存储库中,那么如何创建该条目呢?

我目前正在做这样的事情:

const paramKey = new cdkSSM.StringParameter(this, 'example-key', {
    description: 'Example SSH private key parameter',
    parameterName: 'example-key',
    stringValue: `???`, /// What goes here?
    allowedPattern: '^-----BEGIN RSA PRIVATE KEY-----[^-]*-----END RSA PRIVATE KEY-----$',
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我不能保留空白stringValue,否则会收到错误,因为 Parameter Store 不允许空白值。根据要求,它接受的唯一值是 RSA 私钥allowedPattern(这是一种安全措施,旨在防止有人通过 AWS CLI 意外输入无效值)。但我不想将我的私钥放入,因为它不应该是 CDK git 存储库的一部分。我不想使用虚拟密钥,因为这样有人可能会认为已经输入了正确的密钥。

如何在拥有allowedPattern现有参数存储值的情况下部署空白参数存储值?

我想出的唯一解决方法是破解该值以允许另一个令牌,如下所示:

const paramKey = new cdkSSM.StringParameter(this, 'example-key', {
    description: 'Example SSH private key parameter',
    parameterName: 'example-key',
    stringValue: `TODO`,
    allowedPattern: '^TODO$|^-----BEGIN RSA PRIVATE KEY-----[^-]*-----END RSA PRIVATE KEY-----$',
});
Run Code Online (Sandbox Code Playgroud)

这意味着参数存储条目将接受 RSA 密钥或值TODO。但这看起来很老套,所以我想知道是否有适当的解决方案?

ake*_*rra 0

根据文档

SecureString 类型的参数不能直接从 CDK 应用程序创建;如果您想自动配置密钥,请使用 Secrets Manager Secrets(请参阅 @aws-cdk/aws-secretsmanager 包)。

话虽如此,Secrets Manager 本身并不支持生成 RSA 密钥对。

我通常手动创建此类资源,然后当我需要在 CDK 中引用它们时,使用 ARN。

另一个可能适合您的选择是使用EC2CfnKeyPair构造。该构造的文档指出:

当您创建新密钥对时,私钥将使用具有以下名称的参数保存到 AWS Systems Manager Parameter Store: /ec2/keypair/{key_pair_id} 。