1- # GitHub Secrets設定ガイド
1+ # GitHub Secrets Setup Guide
2+
3+ ## 概要
4+ このドキュメントでは、GitHub ActionsでAWS CloudFormationにデプロイするために必要なGitHub SecretsとIAMロールの設定手順を説明します。
25
36## 必要なGitHub Secrets
47
5- ### 開発環境用
6- - ** ` AWS_ROLE_ARN_DEV ` ** : 開発環境用のIAMロールARN
7- - 例 : ` arn:aws:iam::123456789012:role/LambdaFramework-github-actions-role-dev `
8+ ### 1. AWS_ROLE_ARN_DEV ( 開発環境用)
9+ - ** 説明 ** : 開発環境(deployブランチ)で使用するIAMロールのARN
10+ - ** 例 ** : ` arn:aws:iam::123456789012:role/LambdaFramework-github-actions-role `
811
9- ### 本番環境用
10- - ** ` AWS_ROLE_ARN_PROD ` ** : 本番環境用のIAMロールARN
11- - 例 : ` arn:aws:iam::987654321098 :role/LambdaFramework-github-actions-role-prod `
12+ ### 2. AWS_ROLE_ARN_PROD ( 本番環境用)
13+ - ** 説明 ** : 本番環境(mainブランチ)で使用するIAMロールのARN
14+ - ** 例 ** : ` arn:aws:iam::123456789012 :role/LambdaFramework-github-actions-role `
1215
13- ## 設定手順
16+ ## IAMロールとOIDCプロバイダーの設定
1417
15- ### 1. GitHub Secretsの設定
18+ ### 1. OIDCプロバイダーの作成
1619
17- 1 . GitHubリポジトリの ** Settings** → ** Secrets and variables** → ** Actions** に移動
18- 2 . ** New repository secret** をクリック
19- 3 . 以下のSecretsを追加:
20+ #### 開発環境用AWSアカウント
21+ ``` bash
22+ # OIDCプロバイダーの作成
23+ aws iam create-open-id-connect-provider \
24+ --url https://token.actions.githubusercontent.com \
25+ --client-id-list sts.amazonaws.com \
26+ --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
2027
28+ # 作成されたOIDCプロバイダーのARNを確認
29+ aws iam list-open-id-connect-providers
2130```
22- Name: AWS_ROLE_ARN_DEV
23- Value: arn:aws:iam::<DEV_ACCOUNT_ID>:role/<DEV_ROLE_NAME>
2431
25- Name: AWS_ROLE_ARN_PROD
26- Value: arn:aws:iam::<PROD_ACCOUNT_ID>:role/<PROD_ROLE_NAME>
32+ #### 本番環境用AWSアカウント
33+ ``` bash
34+ # OIDCプロバイダーの作成
35+ aws iam create-open-id-connect-provider \
36+ --url https://token.actions.githubusercontent.com \
37+ --client-id-list sts.amazonaws.com \
38+ --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
39+
40+ # 作成されたOIDCプロバイダーのARNを確認
41+ aws iam list-open-id-connect-providers
2742```
2843
2944### 2. IAMロールの作成
3045
31- 各AWSアカウントで以下のIAMロールを作成:
32-
3346#### 開発環境用IAMロール
3447``` json
48+ {
49+ "Version" : " 2012-10-17" ,
50+ "Statement" : [
51+ {
52+ "Effect" : " Allow" ,
53+ "Principal" : {
54+ "Federated" : " arn:aws:iam::YOUR_DEV_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"
55+ },
56+ "Action" : " sts:AssumeRoleWithWebIdentity" ,
57+ "Condition" : {
58+ "StringEquals" : {
59+ "token.actions.githubusercontent.com:aud" : " sts.amazonaws.com" ,
60+ "token.actions.githubusercontent.com:sub" : " repo:cloudnative-co/python-lambda-frame:ref:refs/heads/deploy"
61+ }
62+ }
63+ }
64+ ]
65+ }
66+ ```
67+
68+ #### 本番環境用IAMロール
69+ ``` json
70+ {
71+ "Version" : " 2012-10-17" ,
72+ "Statement" : [
73+ {
74+ "Effect" : " Allow" ,
75+ "Principal" : {
76+ "Federated" : " arn:aws:iam::YOUR_PROD_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"
77+ },
78+ "Action" : " sts:AssumeRoleWithWebIdentity" ,
79+ "Condition" : {
80+ "StringEquals" : {
81+ "token.actions.githubusercontent.com:aud" : " sts.amazonaws.com" ,
82+ "token.actions.githubusercontent.com:sub" : " repo:cloudnative-co/python-lambda-frame:ref:refs/heads/main"
83+ }
84+ }
85+ }
86+ ]
87+ }
88+ ```
89+
90+ ### 3. IAMポリシーの作成
91+
92+ #### 開発環境用IAMポリシー
93+ ``` json
3594{
3695 "Version" : " 2012-10-17" ,
3796 "Statement" : [
3897 {
3998 "Effect" : " Allow" ,
4099 "Action" : [
41100 " cloudformation:*" ,
42- " lambda:*" ,
43101 " s3:*" ,
102+ " lambda:*" ,
44103 " iam:*" ,
45104 " logs:*"
46105 ],
@@ -50,7 +109,7 @@ Value: arn:aws:iam::<PROD_ACCOUNT_ID>:role/<PROD_ROLE_NAME>
50109}
51110```
52111
53- #### 本番環境用IAMロール
112+ #### 本番環境用IAMポリシー
54113``` json
55114{
56115 "Version" : " 2012-10-17" ,
@@ -59,8 +118,8 @@ Value: arn:aws:iam::<PROD_ACCOUNT_ID>:role/<PROD_ROLE_NAME>
59118 "Effect" : " Allow" ,
60119 "Action" : [
61120 " cloudformation:*" ,
62- " lambda:*" ,
63121 " s3:*" ,
122+ " lambda:*" ,
64123 " iam:*" ,
65124 " logs:*"
66125 ],
@@ -70,53 +129,115 @@ Value: arn:aws:iam::<PROD_ACCOUNT_ID>:role/<PROD_ROLE_NAME>
70129}
71130```
72131
73- ### 3. OIDCプロバイダーの設定
132+ ## トラブルシューティング
133+
134+ ### 1. "Request ARN is invalid" エラーの解決
135+
136+ #### A. OIDCプロバイダーの確認
137+ ``` bash
138+ # OIDCプロバイダーが存在するか確認
139+ aws iam list-open-id-connect-providers
140+
141+ # 特定のOIDCプロバイダーの詳細を確認
142+ aws iam get-open-id-connect-provider --open-id-connect-provider-arn arn:aws:iam::YOUR_ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com
143+ ```
144+
145+ #### B. IAMロールの信頼関係の確認
146+ ``` bash
147+ # IAMロールの詳細を確認
148+ aws iam get-role --role-name LambdaFramework-github-actions-role
149+
150+ # 信頼関係(Trust Policy)を確認
151+ aws iam get-role-policy --role-name LambdaFramework-github-actions-role --policy-name trust-policy
152+ ```
153+
154+ #### C. 正しいロールARNの確認
155+ ``` bash
156+ # 利用可能なIAMロールを一覧表示
157+ aws iam list-roles --query ' Roles[?contains(RoleName, `LambdaFramework`)].RoleName' --output table
158+ ```
159+
160+ ### 2. よくある問題と解決方法
161+
162+ #### A. OIDCプロバイダーが存在しない
163+ ``` bash
164+ # OIDCプロバイダーを作成
165+ aws iam create-open-id-connect-provider \
166+ --url https://token.actions.githubusercontent.com \
167+ --client-id-list sts.amazonaws.com \
168+ --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
169+ ```
170+
171+ #### B. 信頼関係が正しくない
172+ - IAMロールの信頼関係で、正しいOIDCプロバイダーARNを指定
173+ - 正しいリポジトリ名とブランチ名を指定
174+
175+ #### C. GitHub Secretsが設定されていない
176+ - GitHubリポジトリのSettings → Secrets and variables → Actions
177+ - ` AWS_ROLE_ARN_DEV ` と` AWS_ROLE_ARN_PROD ` を設定
74178
75- 各AWSアカウントでGitHub Actions用のOIDCプロバイダーを設定:
179+ ## 設定手順
76180
181+ ### 1. AWS CLIでOIDCプロバイダーを作成
77182``` bash
78- # 開発環境
183+ # 開発環境用
79184aws iam create-open-id-connect-provider \
80185 --url https://token.actions.githubusercontent.com \
81186 --client-id-list sts.amazonaws.com \
82187 --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
83188
84- # 本番環境
189+ # 本番環境用
85190aws iam create-open-id-connect-provider \
86191 --url https://token.actions.githubusercontent.com \
87192 --client-id-list sts.amazonaws.com \
88193 --thumbprint-list 6938fd4d98bab03faadb97b34396831e3780aea1
89194```
90195
91- ## デプロイ先の確認
196+ ### 2. IAMロールを作成
197+ ``` bash
198+ # 開発環境用ロール
199+ aws iam create-role --role-name LambdaFramework-github-actions-role --assume-role-policy-document file://trust-policy-dev.json
200+
201+ # 本番環境用ロール
202+ aws iam create-role --role-name LambdaFramework-github-actions-role --assume-role-policy-document file://trust-policy-prod.json
203+ ```
204+
205+ ### 3. IAMポリシーをアタッチ
206+ ``` bash
207+ # 開発環境用ポリシー
208+ aws iam put-role-policy --role-name LambdaFramework-github-actions-role --policy-name LambdaFramework-github-actions-policy --policy-document file://policy-dev.json
209+
210+ # 本番環境用ポリシー
211+ aws iam put-role-policy --role-name LambdaFramework-github-actions-role --policy-name LambdaFramework-github-actions-policy --policy-document file://policy-prod.json
212+ ```
213+
214+ ### 4. GitHub Secretsを設定
215+ 1 . GitHubリポジトリにアクセス
216+ 2 . Settings → Secrets and variables → Actions
217+ 3 . New repository secretをクリック
218+ 4 . ` AWS_ROLE_ARN_DEV ` と` AWS_ROLE_ARN_PROD ` を設定
219+
220+ ## デプロイ環境マッピング
92221
93- | ブランチ | AWSアカウント | スタック名 | 環境 |
94- | ---------| -------------| -----------| ------|
95- | ` main ` | 本番アカウント | ` lambda-framework-prod ` | production |
96- | ` deploy ` | 開発アカウント | ` lambda-framework-dev ` | development |
222+ | ブランチ | 環境 | AWSロール | GitHub Secret |
223+ | ---------| ------| -----------| --------- ------|
224+ | main | production | LambdaFramework-github-actions-role | AWS_ROLE_ARN_PROD |
225+ | deploy | development | LambdaFramework-github-actions-role | AWS_ROLE_ARN_DEV |
97226
98- ## ローカルデプロイ
227+ ## ローカルデプロイコマンド
99228
100- ### Bash版
229+ ### 開発環境
101230``` bash
102- # 開発環境(デフォルトAWS Profile)
103231./deploy-env.sh development
232+ ```
104233
105- # 開発環境(指定AWS Profile)
106- ./deploy-env.sh development dev-profile
107-
108- # 本番環境(指定AWS Profile)
109- ./deploy-env.sh production prod-profile
234+ ### 本番環境
235+ ``` bash
236+ ./deploy-env.sh production
110237```
111238
112239### PowerShell版
113240``` powershell
114- # 開発環境(デフォルトAWS Profile)
115241.\deploy-env.ps1 development
116-
117- # 開発環境(指定AWS Profile)
118- .\deploy-env.ps1 development dev-profile
119-
120- # 本番環境(指定AWS Profile)
121- .\deploy-env.ps1 production prod-profile
242+ .\deploy-env.ps1 production
122243```
0 commit comments