【问题标题】:Cloudformation: Passing parameters from a file and on the command lineCloudformation:从文件和命令行传递参数
【发布时间】:2017-12-18 00:59:30
【问题描述】:

我有一个关于在 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

有人有什么建议吗?

非常感谢

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案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 oath 参数定义为秘密(隐藏在 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]*'
    

    【讨论】:

      【解决方案2】:

      对于任何类型的令牌/秘密类型的交互,我实际上会推荐使用Systems Manager Parameter Store。优点是它集中了您的凭证存储,因此如果您出于任何原因需要轮换凭证,它只是一个可以更改的地方。您还可以对凭据进行加密以提高安全性。

      由于这是一项 AWS 服务,您可以使用 SDK/CLI 提取值。这可以是具有 IAM 角色的用户数据脚本,允许系统管理员访问(以及所有其他访问)提取参数并将其放置在相应的文件中。另一种选择是利用 SDK 按需提取凭证,尽管这需要您的 CI 代码支持才能完成。

      对此需要注意的是,您需要在启动 Auto Scaling 组之前提前设置参数,这会使将参数作为 CF 模板的一部分包含在内有点困难。

      【讨论】:

        猜你喜欢
        • 2016-03-25
        • 2011-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        相关资源
        最近更新 更多