我想使用AWS Secrets Manager来管理CDK堆栈的所有秘密。由于我要管理数百个机密,因此我想创建一个CDK堆栈,该堆栈允许我在不同的环境中创建这些机密(并管理它们)。
一些秘密值需要是一组不能自动生成的特定值。
据我了解,我无法使用CDK创建具有预定值的机密。所以我的问题是:如何以编程方式而不是手动创建这些机密?在不同的环境中手动创建相同的秘密集而不造成混乱的负担太重了。
编辑:为清楚起见,我理解CDK不允许在SecretString
中指定AWS::SecretsManager::Secret
的原因,因为它可能会暴露秘密。我肯定考虑过使用随机生成的值创建机密,然后手动替换这些值,但是对于像我这样具有多个环境和数百个机密要管理的人来说,即使那样也很费力。必须有一种更好的方法。
答案 0 :(得分:0)
如何以编程方式而不是手动方式创建这些机密?
正如您正确指出的那样,您不能在CDK中执行此操作。这是通过design进行的,其基本原理如下:
Secret构造不允许指定AWS :: SecretsManager :: Secret资源的SecretString属性(因为这几乎总是导致秘密以纯文本形式出现,并可能会提交给您源代码控制。)
同一文档还为此提供了一种解决方法:
如果您需要使用预先存在的机密,建议的方法是在AWS SecretsManager中手动设置机密,并使用Secret.fromSecretArn或Secret.fromSecretAttributes方法使其在您的机密中可用CDK应用程序:
当然,手动进入控制台并不是一件令人愉快的事,因此您可以在AWS CLI或SDK中预先创建这些机密。您可能在CDK旁边有一个伴侣脚本,它将使用AWS CLI或AWS开发工具包中的某些脚本来创建机密。这些预先创建的秘密可以在cdk中使用,如文档所示。
显然,这引起了CDK试图消除的相同问题,即,您可以在源代码的纯文本秘密中提交或公开脚本。
但是,如果您的机密不是那个机密,那么也许最好使用 SSM参数存储。可以从CDK轻松控制存储的值。
或者,如果可能的话,您也可以直接使用普通CloudFormation的AWS::SecretsManager::Secret。 CFN中的秘密不限制您,您可以为该秘密设置纯文本值。