1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub Actions - OIDC 認証を使った AWS 連携

Posted at

はじめに

GitHub Actions を使って terraform による AWS 環境構築を行いました。
その際に OIDC 認証を行ったのでその部分についてまとめておきたいと思います。

環境

今回は以下が準備されている想定で行います。

  • AWS アカウント
  • GitHub リポジトリ

設定

設定は以下の流れで行います。
AWS (ID プロバイダ設定IAM ロールの作成) → GitHub (Secrets の登録Workflow の作成)

OIDC 認証の作成 (AWS)

AWS マネジメントコンソールにログインします。

ID プロバイダ

「IAM > ID プロバイダ」 から [プロバイダを追加] をクリックします。

aws-oidc001.png

ID プロバイダの設定

[プロバイダを追加] をクリックします。

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

aws-oidc002.png

以上で ID プロバイダの追加は完了です。

IAM ロールの作成 (AWS)

「IAM > ロール」 から [ロールを作成] をクリックします。

aws-oidc004.png

信頼されたエンティティを選択

信頼されたエンティティタイプの ウェブアイデンティティ を選択。

aws-oidc005.png

ウェブアイデンティティ

以下を入力し [次へ] をクリックします。

アイデンティティプロバイダー:token.actions.githubusercontent.com
Audience:sts.amazonaws.com
GitHub 組織:[GitHub Actions を利用するリポジトリが所属する Orgainzation の名前]
GitHub リポジトリ:[GitHub Actions を利用するリポジトリ名] ※オプション
GitHub ブランチ:[GitHub Actions を利用するリポジトリのブランチ] ※オプション

今回はオプションの2つも指定しています。
指定することで IAM ロールへのアクセス範囲をリポジトリ、ブランチ単位まで限定することができるため、よりセキュアになります。
状況に応じて調整して下さい。

aws-oidc006.png

上記画像では ga-test というリポジトリの main ブランチからのアクセス(アクション)を許可する設定となります。

許可を追加

許可ポリシー を追加します。
今回は AWS との連携が確認できれば良いため ReadOnlyAccess を付与しています。
実際に導入する際は利用する AWS サービスに応じてアクセス権限を調整してください。
追加したら [次へ] をクリックします。

aws-oidc007.png

名前、確認、および作成

ロールの詳細 で ロール名 を入力します。ここでは仮に GitHubActions としておきます。
あとはそのままで [ロールを作成] をクリックします。

また、ステップ2 の内容は ウェブアイデンティティ で指定した内容を JSON 形式で表しています。
赤ラインの部分が先ほど入力した内容を反映した部分です。

aws-oidc008.png
aws-oidc009.png
aws-oidc010.png

ロールの確認

作成が完了すると以下のようにロールが確認できます。

aws-oidc011.png
aws-oidc012.png

GitHubActions (GitHub)

GitHubにログインし対象のリポジトリを選択します。

Secrets の登録

Settings タブから Secrets and variables > Actions をクリックし、表示された画面で Secrets タブの [New repository secret] をクリックします。

github-actions001.png

NameAWS_ROLE_ARN を入力し、SecretAWS で作成した IAM ロール ARN を入力します。

github-actions002.png

以下のように Secrets タブに登録されていればOKです。

github-actions003.png

Workflowの設定

Actions タブをクリックし Simple workflow[Configure] をクリックします。

github-actions004.png

編集画面になるので以下の内容をコピペして [Commit changes...] をクリックします

blank.yml
name: AWS OIDC

on:
  push:
    branches:
      - 'main'

permissions:
  id-token: write
  contents: read

jobs:
  aws-oidc:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set environment variables based on branch
        id: set-vars
        run: echo "ASSUME_ROLE=${{ secrets.AWS_ROLE_ARN }}" >> $GITHUB_ENV

      - name: Debug Variables
        run: echo "ASSUME_ROLE=${{ env.ASSUME_ROLE }}"

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-1
          role-to-assume: ${{ env.ASSUME_ROLE }}

      - name: Print Hello World plan
        run: echo "Hello, Plan"

github-actions1002.png

ポップアップが表示されるので [Commit changes] をクリックします。

github-actions1003.png

すると Workflow が実行されるため [Create blank.yml] をクリックします。

github-actions1004.png

[aws-oidc] というのをクリックします。

github-actions1005.png

Configure AWS Credentials という部分をクリックすると実行ログが確認できます。

github-actions1006.png

AWS 側で作成した GiHubActions のロールが assumedRoleId として確認できます。

github-actions1007.png

次に以下の部分を修正します。

修正前
      - name: Print Hello World plan
        run: echo "Hello, Plan"
修正後
      - name: AWS CLI
        run: aws s3 ls

先ほどは AWS 認証が完了した後に Hello, Plan と表示させるだけの内容でしたが、今度は Amazon S3 のバケット一覧を取得するためのコマンドになります。

先ほどの手順を参考に改めて実行ログを確認します。
今度は AWS CLI という履歴があるためそこをクリックしログを確認します。

github-actions1008.png

S3 バケット一覧が出力され、先ほど OIDC 認証した権限で AWS 環境へアクセスできていることが確認できます。

おわりに

今回は AWS への OIDC 認証にスポットを当てた内容でしたが、terraform の利用や yml の説明といった GitHub Actions を活用した内容について書いtければと思います。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?