AWS::SecretsManager::Secret - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::SecretsManager::Secret

AWS::SecretsManager::Secret 资源创建一个密钥并将它存储在 Secrets Manager 中。有关更多信息,请参阅 AWS Secrets Manager 用户指南 中的密钥AWS Secrets Manager API 参考 中的 CreateSecret API

要为密钥指定 SecretString 加密值,请在该资源中指定 SecretStringGenerateSecretString 属性。您必须指定其中的一个属性,但不能同时指定两者。请参阅本主题后面的前两个示例

注意

您无法使用 AWS CloudFormation 生成具有 SecretBinary 密钥值的密钥。您只能创建基于文本的 SecretString 密钥值。

注意

不要将反斜杠 (\) 作为最终值以创建动态引用。AWS CloudFormation 无法解析这些引用,这会导致资源失败。

在创建基本密钥后,您可以执行任何以下操作:

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::SecretsManager::Secret", "Properties" : { "Description" : String, "GenerateSecretString" : GenerateSecretString, "KmsKeyId" : String, "Name" : String, "SecretString" : String, "Tags" : [ Tag, ... ] } }

YAML

Type: AWS::SecretsManager::Secret Properties: Description: String GenerateSecretString: GenerateSecretString KmsKeyId: String Name: String SecretString: String Tags: - Tag

属性

Description

(可选)指定用户提供的密钥描述。

必需:否

类型:字符串

最高2048

Update requires: No interruption

GenerateSecretString

指定使用 GetRandomPassword API 功能生成随密钥码的结构。您可以直接返回该字符串以用作密钥值,也可以同时指定 SecretStringTemplateGenerateSecretKey 参数。Secrets Manager 使用 GenerateSecretKey 参数中的值。Secrets Manager 使用 GenerateSecretKey 中的值作为密钥名称并将它与随机生成的密码结合使用来生成 JSON 键/值对。然后,Secrets Manager 将该对插入到 SecretStringTemplate 参数中指定的 JSON 结构中。Secrets Manager 将完成的字符串存储为初始密钥版本中的密钥值。有关如何使用该属性的更多信息,请参阅 Secrets Manager Secret GenerateSecretString 和以下“示例”部分中的第一个示例

SecretStringGenerateSecretString 必须具有一个值,但不能同时具有值。它们不能同时为空。

必需:否

类型GenerateSecretString

最低0

最高65536

Update requires: No interruption

KmsKeyId

(可选)指定用于加密该密钥的版本的 SecretStringSecretBinary 值的 AWS KMS 客户主密钥 (CMK) 的 ARN、密钥 ID 或别名。如果您未指定该值,则 Secrets Manager 默认使用 AWS 账户 CMK aws/secretsmanager。如果具有该名称的 AWS KMS CMK 不存在,则 Secrets Manager 在首次加密版本 SecretStringSecretBinary 字段时自动为您创建 CMK。

重要

只有在您使用拥有密钥的同一账户中的凭证调用该操作时,您才能使用账户默认 CMK 进行加密和解密。如果您使用来自其他账户的密钥,则您必须创建自定义 CMK 并在此字段中指定 ARN。

必需:否

类型:字符串

最低0

最高2048

Update requires: No interruption

Name

密钥的友好名称。您可以在名称中使用正斜杠来表示路径层次结构。例如,/prod/databases/dbserver1 可以表示 databases 文件夹(位于 prod文件夹中)中名为 dbserver1 的服务器的密钥。

必需:否

类型:字符串

最低1

最高256

Update requires: Replacement

SecretString

(可选)指定要使用此新版本密钥加密和存储的文本数据。

SecretStringSecretBinary(而非两者)必须具有值。它们不能同时为空。

如果您使用 Secrets Manager 控制台创建密钥,则 Secrets Manager 仅将受保护的密钥文本放在 SecretString 参数中。Secrets Manager 控制台将信息存储为 Lambda 轮换函数知道如何解析的 JSON 结构的键/值对。

为了存储多个值,我们建议您使用 JSON 文本字符串参数并指定键/值对。有关如何为各种命令行工具环境格式化 JSON 参数的信息,请参阅 AWS CLI 用户指南 中的将 JSON 用于参数。例如:

{"username":"bob","password":"abc123xyz456"}

如果您的命令行工具或开发工具包需要用引号括起参数,则应使用单引号,以避免与 JSON 文本中所需的双引号混淆。

必需:否

类型:字符串

最低0

最高65536

Update requires: No interruption

Tags

与密钥关联的用户定义的标签的列表。使用标签管理您的 AWS 资源。有关标签的其他信息,请参阅 TagResource

必需:否

类型Tag 的列表

Update requires: No interruption

返回值

Ref

在将 AWS::SecretsManager::Secret 资源的逻辑 ID 传递给内部 Ref 函数时,该函数返回配置的密钥的 ARN,例如:

arn:aws:secretsmanager:us-west-2:123456789012:secret:my-path/my-secret-name-1a2b3c

如果您知道密钥的 ARN,则可从堆栈模板中的另一个资源的定义中引用您在同一模板的某个部分中创建的密钥。您通常将 Ref 函数与 AWS::SecretsManager::SecretTargetAttachment 资源类型一起使用,以获取对密钥及其关联数据库的引用。

有关使用 Ref 函数的更多信息,请参阅 Ref

示例

使用动态生成的密码创建密钥

以下示例创建一个密钥,它将字符串模板与动态生成的随机密码合并在一起以构造密钥值。该示例的结果是一个类似于以下内容的 SecretString 值:

{"username": "test-user", "password": "rzDtILsQNfmmHwkJBPsTVhkRvWRtSn" )

JSON

{ "MySecretA": { "Type": "AWS::SecretsManager::Secret", "Properties": { "Name": "MySecretForAppA", "Description": "This secret has a dynamically generated secret password.", "GenerateSecretString": { "SecretStringTemplate": "{\"username\":\"test-user\"}", "GenerateStringKey": "password", "PasswordLength": 30, "ExcludeCharacters": "\"@/\\" }, "Tags": [ { "Key": "AppName", "Value": "AppA" } ] } } }

YAML

#This is a Secret resource with a randomly generated password in its SecretString JSON. MySecretA: Type: 'AWS::SecretsManager::Secret' Properties: Name: MySecretForAppA Description: "This secret has a dynamically generated secret password." GenerateSecretString: SecretStringTemplate: '{"username": "test-user"}' GenerateStringKey: "password" PasswordLength: 30 ExcludeCharacters: '"@/\' Tags: - Key: AppName Value: AppA

使用硬编码的密码创建密钥

以下示例创建一个密钥,并提供密钥值以作为密钥中存储的文本字符串。我们建议您不要以这种方式对密码进行硬编码。而是使用 SecretsManager Secret GenerateSecretString 属性。请参阅上一示例以了解建议的选项。

JSON

{ "MySecretB": { "Type": "AWS::SecretsManager::Secret", "Properties": { "Name": "MySecretForAppB", "Description": "This secret has a hardcoded password in SecretString (use GenerateSecretString instead)", "SecretString": "{\"username\":\"MasterUsername\",\"password\":\"secret-password\"}", "Tags": [ { "Key": "AppName", "Value": "AppB" } ] } } }

YAML

# This is another secret that has its password hardcoded into the template (NOT RECOMMENDED) MySecretB: Type: 'AWS::SecretsManager::Secret' Properties: Name: MySecretForAppB Description: This secret has a hardcoded password in SecretString (use GenerateSecretString instead) SecretString: '{"username":"MasterUsername","password":"secret-password"}' Tags: - Key: AppName Value: AppB

另请参阅