OIDC Provier認証とAssumeRole権限移譲によるGitHubActionのCI


概要

  • GitHub ActionsでAWS ACEESKEYをGitHub側(GitHubSecrets)に保存したくない
  • OpenID Connect経由の各種Cloud Providerの認証がとれる
  • 認証をパスする事が目的なのでポリシーなど細かい要素は後回しにしてシンプルにトライ
  • とりあえず習うより慣れろで

前提

  • OpenID Connect Provider認証の仕組みについて理解している
  • IAMのAssumeRoleの仕組みについて理解している
  • GitHubSecretsの利便性とリスクについて理解している

詳細

OpenIDプロバイダを作成

  • AWSのIAMからIDプロバイダを作成する

ロールの割当

  • "ロールの割当"→"新しいロールを作成"

テスト用ロールの作成

  • ウェブアイデンティティで作成
    • Audienceは"sts.amazonaws.com "

GitHub側準備

  • テスト用リポジトリを用意する
  • workflowのフォルダとファイルを作成
$ git clone https://github.com/menergia/test-oidc
$ mkdir -p test-oidc/.github/workflows
$ echo "### oidc test workflow ###" > test-oidc/.github/workflows/test-oidc-ci.yml
$ cd test-oidc
$ git add .
$ git commit -m "add blank workflow"
$ git push origin main

GitHubActions用workflowファイルを作成

  • アカウントIDをメモ・控えておく

test-oidc-ci.yml

### oidc test workflow ###

name: OIDC test
on:
  push:

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:

      - name: Set up environment
        run: |
          export AWS_ROLE_ARN=arn:aws:iam::39********81:role/Role-GithubActions-OpenIDConnect-Test
          export AWS_WEB_IDENTITY_TOKEN_FILE=/tmp/aws-credential
          export AWS_DEFAULT_REGION=ap-northeast-1

          echo AWS_WEB_IDENTITY_TOKEN_FILE=$AWS_WEB_IDENTITY_TOKEN_FILE >> $GITHUB_ENV
          echo AWS_ROLE_ARN=$AWS_ROLE_ARN >> $GITHUB_ENV
          echo AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION >> $GITHUB_ENV

          curl -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=sts.amazonaws.com" | jq -r '.value' > $AWS_WEB_IDENTITY_TOKEN_FILE

      - run: aws sts get-caller-identity
  • commit/push後actionsタブを確認
    • CI上でOpenIDConnectが成功している

残課題

  • このあとは必要なポリシー・ロールを正しく設定してトライして見る

関連