概要
Github とAWSを使用してCI/CD パイプライン構築をしたり、ちょっとした S3 へのコンテンツのアップロードの自動化などをすることがあります。Blog などを見ているとアクセスキーをシークレットに登録しGithub Acctionsなどを実行する方法や最悪の場合はベタ打ちしているコードがありました。
AWS としてもアクセスキーの利用はセキュリティの観点から推奨しておらず、代わりにロールを使用した、一時認証を与えてアクションを実行させる方法が推奨されています。
本記事ではIAMロールを使用してGithubに一時認証を与える方法を解説します。
手順
1. AWS IAM の設定(ID プロバイダ)
それではマネージメントコンソールにログインしIAMロールを開きます。
ID プロバイダー欄を選択し、プロバイダを追加を選択します。
IAMコンソールのIDプロバイダ
から、GitHubが提供するOIDCプロバイダを追加していきます。
- プロバイダのタイプ: OpenID Connect
- プロバイダの URL: https://token.actions.githubusercontent.com
- 対象者: sts.amazonaws.com
IAM の設定(ロールの作成)
ロールを選択しロールの作成を選択します。
使用するサービスを選択し信頼されたエンティティ選択からウェブアイデンティティを選択します。
- Audience : sts.amazonaws.com
- Github 組織:Githubのアカウント名
作成後のエンティティは下記のようになります。
作成後、作成したロール名を検索しARNを取得します。
AWS での設定は以上です。作成をしたロールを使用してGithub Acctionsなどで自動化を行ってみましょう。
下記は一例ですが私のGithub Acctionsの例です。Github にプッシュし、ワークフローを起動するとS3に一部のデータがアップロードされるようになっています。
下記は一例ですが私のGithub Acctionsの例です。Github にプッシュし、ワークフローを起動するとS3に一部のデータがアップロードされるようになっています。
Role ARN やバケットの情報はシークレットに保存しています。
別の記事にてこちらの詳細も解説します。ご愛読ありがとうございました!
name: "Deploy document files to S3"
on:
workflow_dispatch:
inputs:
confirm:
required: true
description: Please type "deploy-docs".
env:
AWS_REGION : "ap-northeast-1"
ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }}
S3_BUCKET: ${{ secrets.S3_BUCKET }}
permissions:
id-token: write
contents: read
jobs:
deploy:
if: github.event.inputs.confirm == 'deploy-docs'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:- name: Checkout
uses: actions/checkout@v3
- name: Configure aws credentials
uses: aws-actions/configure-aws-credentials@v1
with:
role-to-assume: ${{ env.ROLE_ARN }}
role-session-name: actions-role-session
aws-region: ${{ env.AWS_REGION }}
- name: Setup Python
uses: actions/setup-python@v3
with:
python-version: "3.10"
architecture: x64
- name: Install sphinx
run: |
pip install -U sphinx
- name: Install nbsphinx
run: |
pip install nbsphinx
- name: Install sphinx_rtd_theme
run: |
pip install sphinx_rtd_theme
- name: Build html
run: |
make html
- name: Sync html to s3
run: |
aws s3 sync _build/html s3://${{ env.S3_BUCKET }}/ --delete --quiet
補足資料:IAMロール