🏢

AWS CodeBuild用サービスロールの権限は、ミニマムだと権限ゼロで行ける

2024/07/24に公開

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での類似例:

CloudWatch Logsへログを転送しない場合、その権限すらなしで動かすことが可能なようです。

公式ドキュメントのミスリーディングな記述に惑わされて、不要に広い権限を付けないようにしましょう。

株式会社エス・エム・エス

Discussion