🐡

OIDCを利用してGitHub ActionsからAWSを操作する

2024/12/22に公開

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 プロバイダ」メニューから、「プロバイダを追加」をクリックします。

IDプロバイダー一覧

「プロバイダのタイプ」で「OpenID Connect」を選択します。
その他の項目は以下の通りです。

項目
プロバイダのURL https://token.actions.githubusercontent.com
対象者 sts.amazonaws.com

IDプロバイダーの作成

その他の項目はデフォルトのままで OK です。
そのまま作成します。

一覧画面に戻ると、作成した ID プロバイダーが表示されていることが確認できます。

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