なるべくIAMユーザーを使わずに設定したいというのが最近の流れ。
というのは、単純にユーザーを使うとアクセスキーを管理しなければならず、これがなくなっちゃうと大変だからね。という風潮です。
GithubActionsでは、Opoen ID Connect認証がサポートされているので、IAMユーザーを使わない設定ができます。
まず、IDプロバイダーを作ります。
以下を指定して、サムプリントの取得をクリックします。
プロバイダのタイプ:OIDC
プロバイダのURL: https://token.actions.githubusercontent.com
対象者:sts.amazonaws.com

作成完了するとこんな感じになります。

続いて、AssumeRole先のRoleを作ります。
信頼されたエンティティには以下のように定義します。
{
"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。
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
