

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 CloudFormation 资源中获取 AWS Secrets Manager 秘密
<a name="cfn-example_reference-secret"></a>

使用 CloudFormation，您可以检索密钥以在其他 CloudFormation 资源中使用。常见场景是首先使用 Secret Manager 生成的密码创建密钥，然后从该密钥中检索用户名和密码，以用作新数据库的凭证。有关使用创建密钥的信息 CloudFormation，请参阅[在中创建 AWS Secrets Manager 密钥 AWS CloudFormation](cloudformation.md)。

要检索 CloudFormation 模板中的密钥，请使用*动态引用*。创建堆栈时，动态引用会将密钥值提取到 CloudFormation 资源中，因此您不必对机密信息进行硬编码。相反，您可以通过名称或 ARN 来引用密钥。您可以在任何资源属性中使用对密钥的动态引用。您不能在资源元数据（例如 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html)）中使用对密钥的动态引用，因为那样会使密钥值在控制台中可见。

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

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

**secret-id**  
密钥的名称或 ARN。要访问您 AWS 账户中的密钥，您可以使用该密钥名称。要访问其他 AWS 账户中的密钥，请使用该密钥的 ARN。

**json-key**（可选）  
要检索其值的键值对的键名称。如果未指定`json-key`，则 CloudFormation 检索整个机密文本。此分段不得包含冒号字符 ( `:` )。

**version-stage**（可选）  
要使用的密钥的[版本](whats-in-a-secret.md#term_version)。Secrets Manager 在轮换过程中使用暂存标注来跟踪不同的版本。如果您使用 `version-stage`，则不要指定 `version-id`。如果您既未指定 `version-stage`，也未指定 `version-id`，则原定设置将为 `AWSCURRENT` 版本。此分段不得包含冒号字符 ( `:` )。

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

有关更多信息，请参阅[使用动态引用指定 Secrets Manager 秘密](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager)。

**注意**  
不要使用反斜杠`(\)`作为最终值来创建动态引用。 CloudFormation 无法解析这些引用，这会导致资源故障。