🏢
AWS CodeBuild用サービスロールの権限は、ミニマムだと権限ゼロで行ける
tl;dr
AWSの公式ドキュメントを見ると、CodeBuildのサービスロールにはCloudWatch LogsやS3などの権限が必要なように読めます。
が、これはミスリードで、実際にはまったくの権限なしでも動かすことはできます。
最小権限の原則に従い、余計なS3・CodeCommitなどの権限は付けないようにしましょう。
長い説明
AWSの権限は必要な最小を設定するのが良いとされているため(最小権限の原則)、CodeBuildのサービスロールで必要な最小の権限を調べます。
そうすると、詳細設定 - AWS CodeBuildのページで以下のような記述を見つけます。
The service role described on this page contains a policy that grants the minimum permissions required to use CodeBuild.
このページで説明されているサービスロールには、CodeBuild を使用するのに必要な最小権限を付与するポリシーが含まれています。
それに続いて、サービスロール用のIAMポリシーとして次が書かれています:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudWatchLogsPolicy",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
// CodeCommit, S3, ECRなどのリソースを限定しない権限が続く
]
}
これを読むと、CodeBuildのサービスロールにはS3, ECRなどの権限が最小でも必要に読めます。
ですが、実際にはそれらの権限は不要です。
私の手元で試しましたが、CloudWatch Logsの権限のみでOKです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudWatchLogsPolicy",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
Stack Overflowでの類似例:
- amazon web services - Pipleline wont build and shows access_denied error even after changing policies - Stack Overflow
- amazon web services - CodeBuild unable to create Logs - Stack Overflow
CloudWatch Logsへログを転送しない場合、その権限すらなしで動かすことが可能なようです。
公式ドキュメントのミスリーディングな記述に惑わされて、不要に広い権限を付けないようにしましょう。
Discussion