【问题标题】:Github actions - pass secret variables to render ECS task definition actionGithub 操作 - 传递秘密变量以呈现 ECS 任务定义操作
【发布时间】:2020-04-08 05:20:40
【问题描述】:

为了使用amazon-ecs-render-task-definition GitHub 操作将新任务部署到 ECS im。 此操作接收 task-definition.json 作为参数。这个 JSON 包含我不想推送的秘密,有没有办法向这个 JSON 注入一些参数?也许来自 aws Secrets Manager?

例如 - task-definition.json

{
 "containerDefinitions": [
  {
   "name": "wordpress",
   "links": [
     "mysql"
   ],
  "image": "wordpress",
  "essential": true,
  "portMappings": [
    {
      "containerPort": 80,
      "hostPort": 80
    }
  ],
  "memory": 500,
  "cpu": 10
},
{
  "environment": [
    {
      "name": "MYSQL_ROOT_PASSWORD",
      "value": ****"password"**** // ITS A SECRET!
    }
  ],
  "name": "mysql",
  "image": "mysql",
  "cpu": 10,
  "memory": 500,
  "essential": true
}], 
 "family": "hello_world" }

【问题讨论】:

    标签: amazon-web-services amazon-ecs github-actions


    【解决方案1】:

    显然有一个使用 aws-scrent-manager 机密的内置解决方案:

    "secrets": [
        {
          "name": "DATABASE_PASSWORD",
          "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter"
        }
      ]
    

    https://aws.amazon.com/premiumsupport/knowledge-center/ecs-data-security-container-task/

    【讨论】:

      【解决方案2】:

      另一种解决方案是使用sed 插入您的秘密

      所以你的工作流程变成了 -

      jobs:
        build:
          runs-on: ubuntu-latest
          steps:
            - uses: actions/checkout@v2
            - name: Add secrets to Task Definition
              run: |
                sed -i "s/<jwt_secret>/$JWT_SECRET/g" task.json 
                sed -i "s/<mongo_password>/$MONGO_PASSWORD/g" task.json 
              env:
                JWT_SECRET: ${{secrets.JWT_SECRET}}
                MONGO_PASSWORD: ${{secrets.MONGO_PASSWORD}}
      

      然后您编辑您的 to task.json 以包含 sed 将用于替换的占位符

      {
        "ipcMode": null,
        "executionRoleArn": null,
        "containerDefinitions": [
          {
            ...
            "environment": [
              {
                "name": "JWT_SECRET",
                "value": "<jwt_secret>"
              },
              {
                "name": "MONGO_PASSWORD",
                "value": "<mongo_password>"
              },
            ]
            ...
         }
        ]
      }
      

      【讨论】:

      • 它适用于我的 json 文件 @ali_wetrill。我在多个构建中使用这个过程。我喜欢它,因为我发现 GitHub 机密比 AWS 更精简 - 不那么繁琐(恕我直言)。
      • 嗯,在运行部分下的第一行,我得到了 'sed: -e expression #1, char 64: unknown option to 's'。知道为什么吗?它的格式完全相同
      • @ali_wetrill 当环境变量值中有“/”时,会出现错误“'sed: -e expression #1, char 64: unknown option to `s'”,因为 sed 表达式将不解决。例如 S3_FILENAME=testbucket123/.env 然后 sed 命令: sed -i "s//$S3_FILENAME/g" task.json 变为 sed -i "s//testbucket123/.env/g" 任务。 json 未解析。
      【解决方案3】:

      所有存储库都有一个存储秘密的地方,请参阅creating and using encrypted secrets。至于编辑 .json,预装的 jq 在这里看起来是一个明显的选择,或者如果你更熟悉的话,可能是 powershell(请记住调整 -Depth)。

      【讨论】:

      • 感谢您的回答。显然有一个使用 aws-secret-manager 的内置解决方案。
      猜你喜欢
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2020-09-19
      • 2021-02-16
      • 2022-06-16
      • 2021-10-03
      • 2021-10-22
      • 2021-06-25
      相关资源
      最近更新 更多