GiitHub Actions에서 ECS를 개발할 때 task-definition.외부에서 json으로 기밀 정보 주입

개요


GiitHub Actions가 ECS를 설계하려고 할 때 Task-definition 하드코딩 비밀 정보에 난감해 미리 해법을 기록한 것이다.

결론


task-definition.json에 특정한 문자열을 미리 쓰고,sed 명령으로GiitHub에서 관리하는 시크릿으로 대체합니다.

task-definition


샘플인 만큼 AWS 계정은 기밀 정보로 간주하고 이번에는'SED TARGET AWS ACCOUNT ID'다.
※ 필자는 로그를 그라파나의 루키로 전송할 때 기밀 정보를 하드코딩해야 해 곤란합니다.
{
  "executionRoleArn": "arn:aws:iam::SED_TARGET_AWS_ACCOUNT_ID:role/sample-TaskExecution",
  "taskRoleArn": "arn:aws:iam::SED_TARGET_AWS_ACCOUNT_ID:role/sample-TaskExecution",
  "family": "sample-app",

  //   ....
  
  "containerDefinitions": [
    {
      "name": "nginx",
      "image": "SED_TARGET_AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest",
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80,
          "protocol": "tcp"
        },
      ],

      // ....

    }
  ]
}

GiitHub Action의 Workflow


Deploy 처리 전에 sed 명령을 사용하여 기밀 정보를 주입할 수 있습니다.
jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest
    environment: production

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      # ....

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

      # Rewrite task-definition(秘密情報を注入する)
      - name: rewrite task-definition
        run: sed -i -e s/SED_TARGET_AWS_ACCOUNT_ID/${{ secrets.AWS_ACCOUNT_ID }}/g .aws/ecs/task-definition.json

      # ...

      # Deploy
      - name: Render Amazon ECS task definition for first container
        id: render-web-container
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
          task-definition: .aws/ecs/task-definition.json
          container-name: nginx
          image: ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest

주의 사항


용기의 환경 변수에 기밀 정보를 보유하게 하려면 시스템 관리자의 파라미터를 이용하여 저장하는 것이 편리하다.

좋은 웹페이지 즐겨찾기