Skip to content

AWS長期アクセスキーをOIDCロール引受方式に移行する(ステージング・本番デプロイワークフロー) #1498

Description

@coderabbitai

概要

ステージング環境および本番環境へのECSデプロイワークフロー(.github/workflows/deploy_ecs_staging_stationapi.yml / .github/workflows/deploy_ecs_production_stationapi.yml)において、現在は長期アクセスキー(AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY)を使用しているが、漏洩リスクの観点から aws-actions/configure-aws-credentials のOIDC方式(role-to-assume)への移行が推奨される。

対応内容

  • configure-aws-credentials ステップを role-to-assume を用いたOIDC方式に切り替える(ステージング・本番両ワークフロー)
  • secrets.AWS_ACCESS_KEY_ID / secrets.AWS_SECRET_ACCESS_KEY の参照を削除し、secrets.AWS_ROLE_TO_ASSUME を追加する
  • ジョブに最小権限の permissions ブロックを明示する
    • id-token: write:OIDC JWTトークンの取得に必須
    • contents: readactions/checkout の実行に必須
  • AWS IAMロールの信頼ポリシーに token.actions.githubusercontent.com を Federated Principal として設定する

差分案

ステージング(deploy_ecs_staging_stationapi.yml

 jobs:
   deploy:
     name: Deploy StationAPI Staging
     runs-on: self-hosted
     environment: staging
+    permissions:
+      id-token: write
+      contents: read

     steps:
       - name: Checkout
         uses: actions/checkout@v4
         with:
           submodules: recursive

       - name: Configure AWS credentials
         uses: aws-actions/configure-aws-credentials@v4
         with:
-          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
-          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
+          role-session-name: gha-staging-deploy
           aws-region: ${{ env.AWS_REGION }}

本番(deploy_ecs_production_stationapi.yml

 jobs:
   deploy:
     name: Deploy StationAPI Production
     runs-on: self-hosted
     environment: production
+    permissions:
+      id-token: write
+      contents: read

     steps:
       - name: Checkout
         uses: actions/checkout@v4
         with:
           submodules: recursive

       - name: Configure AWS credentials
         uses: aws-actions/configure-aws-credentials@v4
         with:
-          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
-          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
+          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
+          role-session-name: gha-production-deploy
           aws-region: ${{ env.AWS_REGION }}

参考

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions