👨💻
【GitHub Actions】OpenID Connectを使用してAWSの認証を行う
はじめに
過去にGitHub ActionsのワークフローからOpenID Connectを使用してAWSの参照・操作を行いました。
思い出しがてら記事にしたいと思います。
ワークフローからs3のバケットを一覧取得するまでを目標とします。
この構成のメリット
アクセスキーなどを用意することなく AWS認証を行うことが可能です。
漏洩の可能性が減るため、セキュリティの向上が見込めます。
ざっくりとした流れ
- AWSにてGitHub ActionsのOIDCプロバイダー、ロールを設定
- GitHub Actionsのワークフローが開始される。ワークフローはOIDCプロバイダーにリクエストを送り、トークンを取得する
- トークンを使用して、GitHub ActionsはAWSにリクエストを送る
- AWSは受け取ったトークンをOIDCプロバイダーで確認し、有効の場合アクセス用のトークンを提供する
より
検証
ドキュメントがあるため、こちらを参照しながら検証します。
IDプロバイダ設定
ここを参考にします。
設定する値は以下です。
- プロバイダタイプ:OpenID Connect
- プロバイダURL:token.actions.githubusercontent.com
- Audience:sts.amazonaws.com
IAMロール作成
信頼ポリシーを以下のように設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<AccountID>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringLike": {
"token.actions.githubusercontent.com:sub": "repo:<GitHubアカウント名>/<GitHubリポジトリ名>:*"
}
}
}
]
}
Condition
でのアクセス許可は以下を参照します
ポリシーはワークフローが操作するリソースにあったものをつけましょう。
workflow作成
s3バケットを一覧表示するワークフローです。
リポジトリにpushしたら実行されます。
name: test
on:
push:
env:
AWS_ROLE_ARN: ${{ secrets.AWS_OIDC_ROLE_ARN }}
permissions:
id-token: write
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: configure aws credential
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: ${{ env.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
- name: OIDC test
run: aws s3 ls
ポイント
- IAMロールのArnが必要となるため、控えてワークフローから参照出来るようにする
- 今回は
secrets
を使用しました。
- 今回は
-
permissions.id-token
をwrite
とすることでOIDCプロバイダからトークンを取得できる
permissions:
id-token: write
動作確認
pushしてworkflowが正常に動けばOKです。
s3バケットが一覧表示されます。
参考
手順全体
OIDCについて
Discussion