繁体   English   中英

AWS CDK - 使用 NoEcho 参数设置 Secret 值

[英]AWS CDK - setting Secret value using NoEcho Parameters

我知道 AWS 建议避免在 CDK 中创建秘密设置秘密值,例如:

const secret = this.createSecret('MySecret', {
  username: new cdk.CfnParameter(this, 'username', { noEcho: true }).valueAsString,
  password: new cdk.CfnParameter(this, 'password', { noEcho: true }).valueAsString
})

但是,只要在部署管道中安全地提供参数,例如在 bitbucket 管道中(使用安全存储库变量):

cdk --parameters username=$USERNAME --parameters password=$PASSWORD

我看不出这怎么会不安全? 实际的用户名和密码值从未出现在 CDK 合成器 output(cdk.out 目录)或任何 CloudFormation 模板中,因此不会意外提交到 Git 或通过 CloudFormation 控制台/cli 可见; 并且指定的参数是“NoEcho”,因此也无法通过 CloudFormation 控制台/cli 看到。

我听到的关于 CDK 的一个常见抱怨是,无法在 CDK 中完全设置和配置 Secret,通常的过程是在 CDK 中创建 Secret,然后手动 go 并配置密钥值,然而,这违背了基础设施的精神,因为代码,当您在许多区域/帐户中部署堆栈时可能会很痛苦。

有人可以帮我理解为什么不推荐这样做以及它可能不安全吗?

使用您提供的方法,其中秘密值在更改集级别作为参数提供,没有任何公开的内容,通常没问题。

但是,通常不赞成使用 CfnParameters,因为这意味着所有信息(输入)在合成时都不知道,这意味着它是不完整的。 如果您要将这些秘密值直接移动到 CDK 代码中,那么它们将以纯文本形式存储在 CloudFormation 模板中,这也很糟糕。

对于非敏感配置值的值(很多秘密就像 api 端点,它们是应用程序配置但不是真正敏感的),您可以使用“不安全”帮助程序( https://docs.aws.amazon.com /cdk/api/v2/docs/aws-cdk-lib.aws_secretsmanager-readme.html#creating-json-secrets )。

如果你有真正敏感的值,那么值的管理通常是在 IaC 之外的首选,因为执行更改集(部署)来更新值通常很麻烦而且很麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM