获取 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-1
和cn-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
}}'