【问题标题】:Create secrets in AWS Secrets Manager在 AWS Secrets Manager 中创建密钥
【发布时间】:2026-01-09 07:20:02
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: amazon-web-services aws-cdk aws-secrets-manager


    【解决方案1】:

    如何以编程方式而不是手动创建这些机密?

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

    Secret 构造不允许指定 AWS::SecretsManager::Secret 资源的 SecretString 属性(因为这几乎总是会导致秘密以纯文本形式出现并可能提交给您的源代码控制)。

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

    如果您需要使用预先存在的密钥,推荐的方法是在 AWS SecretsManager 中手动预置密钥并使用 Secret.fromSecretArn 或 Secret.fromSecretAttributes 方法使其在您的CDK申请:

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

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

    但如果你的秘密不是那个秘密,那么也许使用 SSM Parameter Store 会是更好的选择。存储的值可以通过 CDK 轻松控制。

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

    【讨论】: