起きたこと
- CodeBuildプロジェクトをCloudFormationで作るためにyamlテンプレートを作成し
AWS::CodeBuild::Project
を追加した。
- またプロジェクトにアタッチするロールとポリシーを一緒に作りたかったので、同じテンプレートに
AWS::IAM::Role
とAWS::IAM::Policy
を追加した。
- 作成したテンプレートをもとにスタックを実行すると
Not authorized to perform DescribeSecurityGroups
というエラーメッセージが表示され作成に失敗した。
原因
1. 必要なec2:DescribeSecurityGroups
の権限が不足している。(エラー文そのまま)
- VPC内にCodeBuildを作成する場合に必要な権限となる。
- 他にも必要な
ec2:
のポリシーがあるが、基本的には公式が載せているこのポリシーをアタッチすればOK
- (上記の公式ポリシーの
StringEquals
の部分をyamlで上手く指定できず困ったのだが、こちらの記事を参考に!Sub |
を使ってみたところ無事指定できた。)
2. ポリシーの作成が完了する前にCodeBuildの作成が完了してしまい、権限が無いものとして扱われた。
- 自分の場合はこちらだった。
- ポリシー→CodeBuildの順で確実に作成されるよう、以下のように
DependsOn属性
をCodeBuildに追加したところ、無事にCodeBuildを作成できた。
CodeBuildProject:
DependsOn:
- CodeBuildIamPolicy
Type: AWS::CodeBuild::Project
- ポリシー用テンプレートを作成しスタック実行した後に、CodeBuild用テンプレートを実行するやり方でもいい。
参考: Receive "Not authorized to perform DescribeSecurityGroups" when creating new Project in AWS CodeBuild