前提
前の記事にはこちらテーマも説明しました。但し、「Secret access key」をダウンロードして、GitHubに保存することから、漏れる懸念があります。
概要
本記事では、「Secret access key」の代わりにOIDC方法をつじてGitHubActionはAWSリソースをアクセスできるということを説明させて頂きます。法方のメリットは、秘密なキーなどがなくてAWSコンソール上でリポジ名のみで利用しますから漏れる可能性がありません。
1. S3バケット設定
前記事のように進めます。
今回のバケット名:demo-oidc-ci-cd-react
2. OIDC設定
IAMサービス画面に入ります
2.0 ポリシー作成
最小権限規則で S3アクセスのみポリシを作成しております。
簡単なデモをしたい場合は、後で貴方はロールにS3アドミン権を付与しますから、こちらステップを飛ばしてもいいです。
JSONを選択して以下を貼ってください。
但し、本記事の対象S3バケット名はdemo-oidc-ci-cd-react
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "githutaction",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::<対象S3バケット名>",
"arn:aws:s3:::<対象S3バケット名>/*"
]
}
]
}
ポリシー名を登録しておきます。下ステップ2.2で利用されます
ポリシー名:github-action-oicd
2.1 アイデンティティプロバイダー作成
- プロバイダURLは
https://token.actions.githubusercontent.com
- 対象者は
sts.amazonaws.com
2.2 ロールを作成してアイデンティティプロバイダーにをアサイン
以下のカスタムポリシーを貼ってください。ただし、いくつかのところは修正が必要
-
Federated はアイデンティティプロバイダーのARN
-
< githubユーザー名 > /<対象リポジ名>
例:https://github.com/17021084/Github-Action-OIDC-ci-cd
< githubユーザー名 > /<対象リポジ名> = 17021084/Github-Action-OIDC-ci-cd
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Github-action-oidc-demo",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::<アカウントID>:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:sub": [
"repo:<githubユーザー名>/<対象リポジ名>:pull_request",
"repo:<githubユーザー名>/<対象リポジ名>:ref:refs/heads/main"
],
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
}
}
}
]
}
ステップ2.0で作成してポリシーを探して選びます。
もしステップ2.0を飛ばしたら、「AdministratorAccess」を選びます。これはいい方法ではありませんが、簡単なデモとしては大丈夫です。
ロール名を入力します。
本記事のロール名はgithub-action-oicd
3. リポジ設置
React作成についてはこちらを参考
name: AWS OIDC Connect Demo
on:
push:
branches:
- 'main'
env:
AWS_REGION : "ap-northeast-1"
AWS_S3_BUCKET : "demo-oidc-ci-cd-react"
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
jobs:
DemoOIDC:
runs-on: ubuntu-latest
steps:
- name: Git clone the repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 14
- name: Install dependencies
run: npm install
- name: Run unit test without prompt
run: npm test -- --watchAll=false
- name: Build React app
run: npm run build
- name: configure aws credentials
uses: aws-actions/configure-aws-credentials@v3
with:
role-to-assume: arn:aws:iam::656898940349:role/github-action-oicd
role-session-name: samplerolesession
aws-region: ${{ env.AWS_REGION }}
- name: Remove all files
run: aws s3 rm s3://${{env.AWS_S3_BUCKET}} --recursive
- name: Upload build to s3
run: aws s3 cp --recursive ./build s3://${{env.AWS_S3_BUCKET}}
-
AWS_S3_BUCKET
は対象S3のバケット(demo-oidc-ci-cd-react) -
role-to-assume
はステップ2.2で作成したロールのARN
結果
こちらは私のGitHubAction ログ
こちらはデプロイしたサイト
最後
最後まで読んで頂いて有り難うございます。
役に立つを感じしたらハートやコメントやを残ってください
参考