在 Amazon CloudFormation 资源中检测 Amazon Secrets Manager 密钥 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

在 Amazon CloudFormation 资源中检测 Amazon Secrets Manager 密钥

借助 Amazon CloudFormation,您可以检索某个密钥以用于其他 Amazon CloudFormation 资源。常见场景是首先使用 Secret Manager 生成的密码创建密钥,然后从该密钥中检索用户名和密码,以用作新数据库的凭证。有关使用 Amazon CloudFormation 创建密钥的详细信息,请参阅在 Amazon CloudFormation 中创建 Amazon Secrets Manager 密钥

要检索 Amazon CloudFormation 模板中的密钥,您需要使用动态引用。您可以在任何资源属性中使用对密钥的动态引用。您不能在资源元数据(例如 AWS::CloudFormation::Init)中使用对密钥的动态引用,因为那样会使密钥值在控制台中可见。

密钥的动态引用模式如下:

{{resolve:secretsmanager:secret-id:SecretString:json-key:version-stage:version-id}}
secret-id

密钥的名称或 ARN。要访问您的 Amazon 账户中的密钥,您可以使用密钥名称。要访问其他 Amazon 账户中的密钥,请指定密钥的 ARN。

json-key(可选)

要检索其值的键值对的键名称。如果您不指定 json-key,Amazon CloudFormation 会检索整个密钥文本。此分段不得包含冒号字符 ( : )。

version-stage(可选)

要使用的密钥的版本。Secrets Manager 在轮换过程中使用暂存标注来跟踪不同的版本。如果您使用 version-stage,则不要指定 version-id。如果您既未指定 version-stage,也未指定 version-id,则原定设置将为 AWSCURRENT 版本。此分段不得包含冒号字符 ( : )。

version-id(可选)

要使用的密钥版本的唯一标识符。如果指定 version-id,则不要指定 version-stage。如果您既未指定 version-stage,也未指定 version-id,则原定设置将为 AWSCURRENT 版本。此分段不得包含冒号字符 ( : )。

有关更多信息,请参阅使用动态引用指定 Secrets Manager 秘密

示例:使用密钥来设置数据库密码

此示例将检索存储在 MyRDSSecret 秘密中的 usernamepassword 值,并使用它们作为 Amazon RDS 数据库实例的用户名和密码。

MyRDSSecret 秘密值看起来像这样:

{ "engine": "mysql", "username": "admin", "password": "EXAMPLE-PASSWORD", "host": "my-database-endpoint.us-east-2.rds.amazonaws.com", "dbname": "myDatabase", "port": "3306" }

有关使用 Amazon CloudFormation 创建资源的信息,请参阅《Amazon CloudFormation 用户指南》中的了解模板基础知识

JSON

{ "MyRDSInstance": { "Type": "AWS::RDS::DBInstance", "Properties": { "DBName": "MyRDSInstance", "AllocatedStorage": "20", "DBInstanceClass": "db.t2.micro", "Engine": "mysql", "MasterUsername": "{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}", "MasterUserPassword": "{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}" } } }

YAML

MyRDSInstance: Type: 'AWS::RDS::DBInstance' Properties: DBName: MyRDSInstance AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}'