OIDCを利用してGitHub ActionsからAWSを操作する
OIDCを利用してGitHub ActionsからAWSを操作する
GitHub Actions 内で AWS へアクセスするために、アクセスキーID とシークレットアクセスキーを利用する方法が一般的です。
この方法は簡単ですが、静的な認証情報である分、セキュリティ上のリスクがあります。
この問題を解決するために、OIDC(OpenID Connect)を利用して GitHub Actions から AWS へアクセスする方法を紹介します。
OIDC(OpenID Connect)を利用することで、GitHub Actions から AWS へアクセスする際に、一時的な認証情報を取得できます。
開発者は、AWS の認証情報を直接管理する必要がなくなり、セキュリティリスクを軽減できます。
手順
ここでは、GUI を利用して OIDC を利用して GitHub Actions から AWS へアクセスする方法を紹介します。
コード(CloudFormation)での設定方法については、以下のリンクを参照してください。
1. IDプロバイダーの作成
「IAM」ページの「ID プロバイダ」メニューから、「プロバイダを追加」をクリックします。
「プロバイダのタイプ」で「OpenID Connect」を選択します。
その他の項目は以下の通りです。
項目 | 値 |
---|---|
プロバイダのURL | https://token.actions.githubusercontent.com |
対象者 | sts.amazonaws.com |
その他の項目はデフォルトのままで OK です。
そのまま作成します。
一覧画面に戻ると、作成した ID プロバイダーが表示されていることが確認できます。
2. ロールの作成
「IAM」ページの「ロール」メニューから、「ロールを作成」をクリックします。
「信頼されたエンティティタイプ」で「ウェブアイデンティティ」を選択します。
ウェブアイデンティティの詳細設計は以下の通りに設定します。
項目 | 値 |
---|---|
アイデンティティプロバイダー | tokens.actions.githubusercontent.com |
Audience | sts.amazonaws.com |
GitHub 組織 | GitHubのユーザー名または組織名 |
GitHub リポジトリ | GitHubのリポジトリ名 |
GitHub ブランチ | GitHubのブランチ名 |
次に、このロールに割り当てるポリシーを設定します。
最後に名前を設定して、ロールを作成します。
その他のステップ項目はすでに設定されているので、そのままで OK です。
一覧画面に戻ると、作成したロールが表示されていることが確認できます。
3. GitHub Actionsの設定
GitHub Actions の設定します。
name: sample
on:
workflow_dispatch:
push:
tags: [ 'v-*']
permissions:
id-token: write
contents: read
jobs:
sample:
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
- name: Sample command
run: aws s3 ls
大切なのは、以下の部分です。
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
role-to-assume
には、作成したロールの ARN を設定します。
これで、アクセスキーID とシークレットアクセスキーを利用せずに、OIDC を利用して AWS へアクセスできます。
Discussion