

# 使用动态引用获取存储在其他服务中的值
<a name="dynamic-references"></a>

动态引用是一种十分便捷的方法，让您可以轻松指定在其他服务中存储和管理的外部值，并将敏感信息与基础设施即代码模板分离。在堆栈和更改集操作期间，CloudFormation 会在必要时检索指定引用的值。

借助动态引用，您可以：
+ **使用安全字符串** – 对于敏感数据，始终应使用 AWS Systems Manager Parameter Store 中的安全字符串参数或 AWS Secrets Manager 中的密钥来保证数据的静态加密。
+ **限制访问权限** – 仅允许获得授权的主体和角色访问 Parameter Store 参数或 Secrets Manager 密钥。
+ **轮换凭证** – 定期轮换存储在 Parameter Store 或 Secrets Manager 中的敏感数据，以确保高度的安全性。
+ **自动轮换** – 利用 Secrets Manager 的自动轮换功能定期更新和分配各种应用程序和环境中的敏感数据。

## 一般注意事项
<a name="dynamic-references-considerations"></a>

以下是在 CloudFormation 模板中指定动态引用之前的一般注意事项：
+ 不要在资源主标识符所包含资源属性中包含动态引用或任何敏感数据。CloudFormation 可能会在主资源标识符中使用实际的纯文本值，这可能存在安全风险。此资源 ID 可能出现在任何派生输出或目标中。

  要确定哪些资源属性构成了资源类型的主标识符，请参阅 [AWS 资源和属性类型参考](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)中该资源的资源参考文档。在 **Return values**（返回值）部分，`Ref` 函数返回值，表示构成资源类型主标识符的资源属性。
+ 您最多可以在堆栈模板中包含 60 个动态引用。
+ 如果您使用的是转换（如 `AWS::Include` 或 `AWS::Serverless`），则 CloudFormation 在应用转换之前不会解析动态引用，而是将动态引用的明文字符串传递给转换，并在使用模板执行更改集时解析引用。
+ 动态引用不能用于自定义资源中的安全值（例如存储在 Parameter Store 或 Secrets Manager 中的值）。
+ `AWS::CloudFormation::Init` 元数据和 Amazon EC2 `UserData` 属性也不支持动态引用。
+ 不要创建以反斜杠（\$1）结尾的动态引用。CloudFormation 无法解析此类引用，这将导致堆栈操作失败。

以下主题提供了有关使用动态引用的信息和其他注意事项。

**Topics**
+ [一般注意事项](#dynamic-references-considerations)
+ [获取 Systems Manager Parameter Store 中的纯文本值](dynamic-references-ssm.md)
+ [获取 Systems Manager Parameter Store 中的安全字符串值](dynamic-references-ssm-secure-strings.md)
+ [获取 Secrets Manager 中的密钥或密钥值](dynamic-references-secretsmanager.md)