获取 Systems Manager Parameter Store 中的安全字符串值 - AWS CloudFormation

获取 Systems Manager Parameter Store 中的安全字符串值

在 CloudFormation 中,您可以将密码和许可证密钥等敏感数据作为“安全字符串”存储在 AWS Systems Manager Parameter Store 中,从而在不直接在模板中直接公开的情况下使用这些数据。有关 Parameter Store 的介绍,请参阅《AWS Systems Manager 用户指南》中的 AWS Systems Manager Parameter Store

要在模板中使用 Parameter Store 安全字符串,请使用 ssm-secure 动态引用。CloudFormation 永远不会存储实际的安全字符串值,而是仅存储包含安全字符串的纯文本参数名称的明文动态引用。

在创建或更新堆栈期间,CloudFormation 会根据需要访问安全字符串值,而不会暴露实际值。安全字符串只能用于支持 ssm-secure 动态引用模式的资源属性。有关更多信息,请参阅 对安全字符串支持动态参数模式的资源

CloudFormation 不会在任何 API 调用中返回安全字符串的实际参数值,而是仅返回明文动态引用。在使用更改集比较更改时,CloudFormation 仅会比较明文动态引用字符串,而不会解析并比较实际的安全字符串值。

使用 ssm-secure 动态引用时,需要注意几个重要的事项:

  • CloudFormation 无法访问来自其他 AWS 账户的 Parameter Store 值。

  • CloudFormation 不支持在动态引用中使用 Systems Manager 参数标签或公有参数。

  • cn-north-1cn-northwest-1 区域,Systems Manager 不支持安全字符串。

  • 自定义资源中目前不支持对安全值的动态引用,例如 ssm-secure

  • 如果 CloudFormation 需要回滚堆栈更新,同时先前指定的安全字符串参数版本不再可用,则回滚操作将会失败。在这种情况下,您有两个选择:

    • 使用 CONTINUE_UPDATE_ROLLBACK 跳过资源。

    • 在 Systems Manager Parameter Store 中重新创建安全字符串参数,并更新它,直到参数版本达到模板中使用的版本。然后使用 CONTINUE_UPDATE_ROLLBACK 而不跳过该资源。

对安全字符串支持动态参数模式的资源

支持 ssm-secure 动态引用模式的资源包括:

引用模式

要在 CloudFormation 模板中引用 Systems Manager 参数存储中的安全字符串值,请使用以下 ssm-secure 引用模式。

{{resolve:ssm-secure:parameter-name:version}}

您的引用必须遵循以下参数名称和版本的正则表达式模式:

{{resolve:ssm-secure:[a-zA-Z0-9_.\-/]+(:\d+)?}}
parameter-name

Parameter Store 中的参数的名称。参数名称区分大小写。

必需。

version

一个整数,指定要使用的参数的版本。如果您没有指定确切的版本,CloudFormation 将在创建或更新堆栈时使用参数的最新版本。有关更多信息,请参阅《AWS Systems Manager 用户指南》中的使用参数版本

可选。

示例

以下示例使用 ssm-secure 动态引用将 IAM 用户的密码设置为存储在 Parameter Store 中的安全字符串。如指定的那样,CloudFormation 将使用 IAMUserPassword 参数的版本 10 进行堆栈和更改集操作。

JSON

"MyIAMUser": { "Type": "AWS::IAM::User", "Properties": { "UserName": "MyUserName", "LoginProfile": { "Password": "{{resolve:ssm-secure:IAMUserPassword:10}}" } } }

YAML

MyIAMUser: Type: AWS::IAM::User Properties: UserName: 'MyUserName' LoginProfile: Password: '{{resolve:ssm-secure:IAMUserPassword:10}}'