Closed11

【GitHub Actions】OpenID Connectを使用してAWSの認証を行う

not75743not75743

検証の方針

  • IDプロバイダ(OpenID Connect)を追加
  • IAMロール作成
    • GHAの操作出来るリソースを指定
  • workflow作成
not75743not75743

ざっくりとした流れ

こんな感じ?

  1. AWSにてGitHub ActionsのOIDCプロバイダー、ロールを設定
  2. GitHub Actionsのワークフローが開始される。ワークフローはOIDCプロバイダーにリクエストを送り、トークンを取得する
  3. トークンを使用して、GitHub ActionsはAWSにリクエストを送る
  4. AWSは受け取ったトークンをOIDCプロバイダーで確認し、有効の場合アクセス用のトークンを提供する

https://docs.github.com/ja/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect
より

not75743not75743

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でのアクセス許可は以下を参照します

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html

not75743not75743

workflow作成

s3バケットを一覧表示するワークフローです

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
not75743not75743

動作確認

pushしてworkflowが正常に動けばOKです。
s3バケットが一覧表示されます

not75743not75743

この構成のメリット

アクセスキーなどを用意することなく AWS 認証を行うことが可能。
セキュリティの向上が見込める

このスクラップは2023/06/30にクローズされました