San*_*chi 11 amazon-web-services aws-cloudformation aws-secrets-manager
反正我们可以通过动态引用来揭秘经理到AWS启动配置用户数据?
这是我尝试过的代码片段:
"SampleLaunchConfig": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"AWSRegionArch2AMI",
{
"Ref": "AWS::Region"
},
"AMI"
]
},
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash -xe\n",
"yum update -y\n",
"useradd -p <<pwd>>{{resolve:secretsmanager:Credentials:SecretString:userName}}\n",
"\n"
]
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
获取 useradd 时出现错误:无效的用户名 '{{resolve:secretsmanager:Credentials:SecretString:userName}}'
如何将 Secret Manager 秘密值传递给 cloudformation 用户数据?
dir*_*vus 15
似乎{{resolve:...}}动态引用仅在模板内的某些上下文中扩展。
AWS 文档中没有关于您可以在模板中的确切位置使用这些参考的准确信息。目前关于的措辞是{{resolve:secretsmanager:...}}:
“secretsmanager 动态引用可用于所有资源属性”
但是,这与您的示例相矛盾,我还观察到动态引用无法在 CloudFormation::Init 数据内部解析。
我有一个与 AWS 相关的有效支持案例,他们同意动态引用的行为记录不充分。随着我了解更多,我会更新这个答案。
我不确定为什么这没有为您正确扩展。但是,您可能不希望 CFN 在用户数据中扩展您的机密,因为密码将嵌入在 EC2 控制台中可见的 base64 编码用户数据脚本中。
相反,您应该利用这样一个事实,即您有一个在主机上执行的脚本并在脚本执行时调用机密管理器(警告未经测试):
"SampleLaunchConfig": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"AWSRegionArch2AMI",
{
"Ref": "AWS::Region"
},
"AMI"
]
},
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash -xe\n",
"yum update -y\n",
"yum install -y jq\n",
!Sub "useradd -p `aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id Credentials --query SecretString --output text | jq -r .passwordKey` `aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id Credentials --query SecretString --output text | jq -r .userName`\n",
"\n"
]
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这并不理想,因为它会在命令行上扩展密码。通过首先将密码放在文件中并从那里读取它然后粉碎文件可能会更安全。
| 归档时间: |
|
| 查看次数: |
12858 次 |
| 最近记录: |