我有一个关于在Cloudformation中使用参数的问题,以及更常见的关于在Clouformation中使用秘密的最佳实践。
我有一个模板,用于在自动缩放组中定义CI服务器。理论上我们可以站出很多这些堆栈。模板与parameters.json文件一起存储在源控件中,用于指定堆栈的细节(例如实例类型,自动缩放条件等)。其中一个参数是允许CI服务器与我们的CI提供程序交互的令牌,我不想将令牌存储在源代码管理中。我希望有人被提示,或者在创建或更新堆栈时被迫传递它。
理想情况下,我想象的是这样的,但显然这是无效的
aws cloudformation create-stack --stack-name <name> --template-body file://<template> --parameters file://<parameters-file.json> TokenParameter=xxxyyyzzz
有人有任何建议吗?
非常感谢
答案 0 :(得分:1)
希望这可以在2年后帮助某人...
我解决了这个问题,jq
会有所帮助。我在Mac上,所以这很简单brew install jq
我的目标是使用默认的参数文件,但想将此一次传递给我的github oauth作为秘密。到上面在其他/更好的地方存储秘密的程度,这是理想的选择,但我认为在所有情况下都可能会过分杀人。例如,我的只是基于实验室的工作。
aws cloudformation create-stack --stack-name "codepipeline-test"
--template-body file://codepipeline-test.yml
--parameters $(cat codepipeline-test-params.json | jq -r '.[]
| "ParameterKey=" + .ParameterKey + ",ParameterValue=" + .ParameterValue')
ParameterKey="GitHubOAuthToken",
ParameterValue="1234567890826xxxxxxxxxx753dde68858ac2169"
--tags '[{"Key": "Name","Value": "codedepipeline-test"},
{"Key": "Owner","Value": "username"}]' --capabilities CAPABILITY_NAMED_IAM
在CF模板中仅供参考,我将github誓言参数定义为秘密(隐藏在GUI中),如下所示:
GitHubOAuthToken:
Description: A valid access token for GitHub that has admin access to the GitHub Repo you specify
Type: String
NoEcho: true
MinLength: 40
MaxLength: 40
AllowedPattern: '[a-z0-9]*'
答案 1 :(得分:0)
对于任何类型的令牌/秘密类型交互,我实际上会建议使用Systems Manager Parameter Store。优点是它集中了您的凭证存储,因此如果您因任何原因需要轮换凭据,那么它只需要更改一个地方。您还可以加密信用卡以获得额外的安全性。
由于这是AWS服务,您可以使用SDK / CLI来提取值。这可以是具有IAM角色的用户数据脚本,该角色允许系统管理员访问(以及所有其他访问)以拉取参数并将其放置在相应的文件中。另一种选择是利用SDK按需下载凭证,但这需要CI代码中的支持来实现。
有一点需要注意的是,在启动自动缩放组之前,您需要提前设置参数,这会使参数作为CF模板的一部分包含起来有点困难。