起きたこと
- 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