GitHub Actionsを使用してCI/CDを実現する
公開: 2023/06/12
前提
- 既にAWS上にビルドプロジェクト作成済み
buildspec.yml
作成済み- slimフレームワークのPHPアプリケーション
- CodeBuildではPHPUnitによるテストとPHP_CodeSnifferによる静的解析を行う
以下、今回のbuildspec.yml
version: '0.2'
phases:
install:
runtime-versions:
php: '8.2'
commands:
- composer install
build:
commands:
- composer run phpunit
- composer run phpcs
artifacts:
type: zip
files:
- '**/*'
AWS側でやること
OpenID Connect IDプロバイダの作成
IAMから「IDプロバイダ」の「OpenID Connect」を選択し、プロバイダのURLには https://token.actions.githubusercontent.com
を入力する。対象者の入力欄には、公式のアクションである aws-actions/configure-aws-credentialsを使用するためsts.amazonaws.com
を入力。
- プロバイダURL - https://token.actions.githubusercontent.com
- 対象者 - sts.amazonaws.com
GitHub OIDC IDプロバイダロールの設定
IAMでロールを作成する。信頼されたエンティティでは「ウェブアイデンティティ」を選択し、プロバイダーとaudienceにはそれぞれ以下を選択する。
- プロバイダ - token.actions.githubusercontent.com
- Audience - sts.amazonaws.com
ポリシーは以下のようになった
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::[aws-account-id]:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:sub": "repo:takumi-pro/slim-deployment:ref:refs/heads/main",
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
}
}
}
]
}
GitHub Actions側でやること
permissionsの設定
GitHub OIDCのトークンにアクセスできるように権限を操作する。workflowのjobでpermissions
を指定してid-token: write
とcontents: read
を追加する。
actionsの設定
aws-actions/configure-aws-credentialsをworkflowのactionに追加する。
最終的なworkflowは以下となる。
name: build
on:
pull_request:
push:
jobs:
codebuild:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
role-to-assume: arn:aws:iam::656337613100:role/slim-github-oidcid
role-session-name: slim-session
aws-region: ap-northeast-1