なるべくIAMユーザーを使わずに設定したいというのが最近の流れ。
というのは、単純にユーザーを使うとアクセスキーを管理しなければならず、これがなくなっちゃうと大変だからね。という風潮です。
GithubActionsでは、Opoen ID Connect認証がサポートされているので、IAMユーザーを使わない設定ができます。
まず、IDプロバイダーを作ります。
以下を指定して、サムプリントの取得をクリックします。
プロバイダのタイプ:OIDC
プロバイダのURL: https://token.actions.githubusercontent.com
対象者:sts.amazonaws.com
作成完了するとこんな感じになります。
続いて、AssumeRole先のRoleを作ります。
信頼されたエンティティには以下のように定義します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::000000000000:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "token.actions.githubusercontent.com:sub": "repo:<Githubユーザー名>/<Githubリポジトリ名>:*" } } } ] } |
ロールができたら、必要なポリシーをアタッチします。
とりあえず動作チェックなのでAdministratorAccessを割り当てます。
完成したロールはこのような感じです。
GithubActionsで動作チェックをしたいので、こんな感じのワークフローを作って実行してみます。
成功すればOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
name: awss3ls on: workflow_dispatch: env: AWS_ROLE_ARN: arn:aws:iam::xxxxxxxxxxx:role/GithubActions-OIDC-Role # permissions.id-token: writeがないとコケる permissions: id-token: write contents: read jobs: aws-deploy: runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout uses: actions/checkout@v3 - name: setup aws uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: ${{ env.AWS_ROLE_ARN }} aws-region: ap-northeast-1 - name: s3 ls run: | aws s3 ls |