このドキュメントでは、GitHub ActionsでAWS CloudFormationにデプロイするために必要なGitHub SecretsとIAMロールの設定手順を説明します。
- 説明: 開発環境(deployブランチ)で使用するIAMロールのARN
- 例:
arn:aws:iam::123456789012:role/LambdaFramework-github-actions-role
- 説明: 本番環境(mainブランチ)で使用するIAMロールのARN
- 例:
arn:aws:iam::123456789012:role/LambdaFramework-github-actions-role
# OIDCプロバイダーの作成
aws iam create-open-id-connect-provider \
--url https://token.actions.githubusercontent.com \
--client-id-list sts.amazonaws.com \
--thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
# 作成されたOIDCプロバイダーのARNを確認
aws iam list-open-id-connect-providers# OIDCプロバイダーの作成
aws iam create-open-id-connect-provider \
--url https://token.actions.githubusercontent.com \
--client-id-list sts.amazonaws.com \
--thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
# 作成されたOIDCプロバイダーのARNを確認
aws iam list-open-id-connect-providers{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::YOUR_DEV_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
"token.actions.githubusercontent.com:sub": "repo:cloudnative-co/python-lambda-frame:ref:refs/heads/deploy"
}
}
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::YOUR_PROD_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
"token.actions.githubusercontent.com:sub": "repo:cloudnative-co/python-lambda-frame:ref:refs/heads/main"
}
}
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:*",
"s3:*",
"lambda:*",
"iam:*",
"logs:*"
],
"Resource": "*"
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudformation:*",
"s3:*",
"lambda:*",
"iam:*",
"logs:*"
],
"Resource": "*"
}
]
}# OIDCプロバイダーが存在するか確認
aws iam list-open-id-connect-providers
# 特定のOIDCプロバイダーの詳細を確認
aws iam get-open-id-connect-provider --open-id-connect-provider-arn arn:aws:iam::YOUR_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com# IAMロールの詳細を確認
aws iam get-role --role-name LambdaFramework-github-actions-role
# 信頼関係(Trust Policy)を確認
aws iam get-role-policy --role-name LambdaFramework-github-actions-role --policy-name trust-policy# 利用可能なIAMロールを一覧表示
aws iam list-roles --query 'Roles[?contains(RoleName, `LambdaFramework`)].RoleName' --output table# OIDCプロバイダーを作成
aws iam create-open-id-connect-provider \
--url https://token.actions.githubusercontent.com \
--client-id-list sts.amazonaws.com \
--thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1- IAMロールの信頼関係で、正しいOIDCプロバイダーARNを指定
- 正しいリポジトリ名とブランチ名を指定
- GitHubリポジトリのSettings → Secrets and variables → Actions
AWS_ROLE_ARN_DEVとAWS_ROLE_ARN_PRODを設定
# 開発環境用
aws iam create-open-id-connect-provider \
--url https://token.actions.githubusercontent.com \
--client-id-list sts.amazonaws.com \
--thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
# 本番環境用
aws iam create-open-id-connect-provider \
--url https://token.actions.githubusercontent.com \
--client-id-list sts.amazonaws.com \
--thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1# 開発環境用ロール
aws iam create-role --role-name LambdaFramework-github-actions-role --assume-role-policy-document file://trust-policy-dev.json
# 本番環境用ロール
aws iam create-role --role-name LambdaFramework-github-actions-role --assume-role-policy-document file://trust-policy-prod.json# 開発環境用ポリシー
aws iam put-role-policy --role-name LambdaFramework-github-actions-role --policy-name LambdaFramework-github-actions-policy --policy-document file://policy-dev.json
# 本番環境用ポリシー
aws iam put-role-policy --role-name LambdaFramework-github-actions-role --policy-name LambdaFramework-github-actions-policy --policy-document file://policy-prod.json- GitHubリポジトリにアクセス
- Settings → Secrets and variables → Actions
- New repository secretをクリック
AWS_ROLE_ARN_DEVとAWS_ROLE_ARN_PRODを設定
| ブランチ | 環境 | AWSロール | GitHub Secret |
|---|---|---|---|
| main | production | LambdaFramework-github-actions-role | AWS_ROLE_ARN_PROD |
| deploy | development | LambdaFramework-github-actions-role | AWS_ROLE_ARN_DEV |
./deploy-env.sh development./deploy-env.sh production.\deploy-env.ps1 development
.\deploy-env.ps1 production