在 AWS Secrets Manager 中创建密钥

Create secrets in AWS Secrets Manager

我想使用 AWS 机密管理器来管理我的 CDK 堆栈的所有机密。因为我要管理数百个机密,所以我想创建一个 CDK 堆栈,允许我在不同的环境中创建这些机密(并管理它们)。

一些秘密值需要是一组无法自动生成的特定值。

据我了解,我无法使用 CDK 创建具有预定值的机密。所以我的问题是:如何以编程方式而不是手动创建这些秘密?在不同环境中手动创建同一组秘密而不搞砸的负担太大了。

编辑:明确地说,我理解 CDK 不允许指定 SecretStringAWS::SecretsManager::Secret 背后的原因,因为它可能会暴露秘密。我确实考虑过用随机生成的值创建秘密,然后手动替换这些值,但对于像我这样有多个环境和数百个秘密要管理的人来说,即使那样也可能会很费力。必须有更好的方法来做到这一点。

How do I create these secrets programmatically and not manually?

正如您正确指出的那样,您不能在 CDK 中执行此操作。这是design的,理由如下:

The Secret construct does not allow specifying the SecretString property of the AWS::SecretsManager::Secret resource (as this will almost always lead to the secret being surfaced in plain text and possibly committed to your source control).

同一文档还提供了解决方法:

If you need to use a pre-existing secret, the recommended way is to manually provision the secret in AWS SecretsManager and use the Secret.fromSecretArn or Secret.fromSecretAttributes method to make it available in your CDK Application:

当然,手动进入控制台不是很愉快,因此您可以在 AWS CLI 或 SDK 中预先创建这些机密。您可以在 CDK 旁边有一个 配套脚本 ,它将使用 AWS CLI 或 AWS SDK 中的某些脚本创建机密。这些预先创建的秘密可以在 CDK 中使用,如文档中所示。

显然,这会带来 CDK 试图消除的相同问题,即您可以在源代码的 纯文本机密 中提交或公开脚本。

但如果您的秘密不是那么秘密,那么使用 SSM Parameter Store 可能是更好的选择。可以从 CDK 轻松控制存储的值。

作为替代方案,如果可能,您也可以直接使用普通 CloudFormation 的 AWS::SecretsManager::Secret。 CFN中的Secret不限制你,你可以为secret设置明文值。