【发布时间】:2022-01-25 23:27:31
【问题描述】:
我正在尝试使用 Cloudformation 启动 EC2 Windows 实例,其中使用 PowerShell 格式的 EC2 UserData 我需要将服务用户帐户添加到本地管理员,然后安装一些应用程序。我想在 EC2 用户数据中使用 AWS Parameter Store 参数来传递凭证。
我将参数存储值定义为 CFT 参数:
Parameters:
ServiceUserEmail:
Type: String
Default: '{{resolve:ssm-secure:serviceuser-email:1}}'
Description: Service User Email
并尝试调用如下参数:
UserData:
Fn::Base64: !Sub |
<powershell>
# Add Sevice account as Administrator
Add-LocalGroupMember -Group "Administrators" -Member "${ServiceUserEmail}"
</powershell>
<persist>true</persist>
由于某种原因,占位符 ${ServiceUserEmail} 被替换为实际字符串“{{resolve:ssm-secure:serviceuser-email:1}}”,而不是参数存储中它背后的值。
我也试过没有占位符的命令没有成功:
Add-LocalGroupMember -Group "Administrators" -Member "'{{resolve:ssm-secure:serviceuser-email:1}}'"
命令传参后需要如下:
Add-LocalGroupMember -Group "Administrators" -Member "serviceuseremail@domain.com"
请给个建议好吗?
【问题讨论】:
-
进展如何?仍然不清楚为什么你不能这样做?
-
嘿,谢谢你的回答。不幸的是,它仍然不适合我。占位符被参数替换,但参数仍未解析为其值:2022/01/24 13:27:57Z:消息:来自用户脚本的错误:Add-LocalGroupMember:Principal {{resolve:ssm:serviceuser -email:1}} 未找到。在 C:\Windows\TEMP\UserScript.ps1:8 char:1 + Add-LocalGroupMember -Group "Administrators" -Member "{{resolve:ssm:s ... + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ ssm 和 ssm-secure 参数我都试过了
-
好的,解决了。定义参数时,类型必须是 AWS::SSM::Parameter::Value
而不仅仅是“字符串”。谢谢
标签: amazon-web-services parameter-passing amazon-cloudformation