[アップデート] AWS CodeBuild 向けに様々な IAM 条件コンテキストキーが追加され、IAM ポリシーを使った細かい権限制御ができるようになりました

[アップデート] AWS CodeBuild 向けに様々な IAM 条件コンテキストキーが追加され、IAM ポリシーを使った細かい権限制御ができるようになりました

Clock Icon2025.05.20

いわさです。

AWS では IAM 条件コンテキストキーを使うことで、AWS サービスを操作する際の様々な条件でアクションの許可や拒否を行うことができます。
これまで AWS CodeBuild では以下のようなビルドやプロジェクトの ARN 程度しか条件コンテキストキーにサポートされておらず、細かい許可/拒否設定を IAM を使って行うことが難しい状況でした。

  • aws:RequestTag/${TagKey}
  • aws:ResourceTag/${TagKey}
  • aws:TagKeys
  • codebuild:buildArn
  • codebuild:projectArn

これが今朝のアップデートで CodeBuild 専用の大量のコンテキストキーがサポートされ、かなり細かい権限制御をできるようになりました。

https://aws.amazon.com/about-aws/whats-new/2025/05/aws-codebuild-iam-condition-keys/

今回追加されたのは以下の 104 個のキーです。CodeBuild プロジェクトのほとんどのプロパティがサポートされていることがわかると思います。

  • codebuild:artifacts
  • codebuild:artifacts.bucketOwnerAccess
  • codebuild:artifacts.encryptionDisabled
  • codebuild:artifacts.location
  • codebuild:authType
  • codebuild:autoRetryLimit
  • codebuild:buildBatchConfig
  • codebuild:buildBatchConfig.restrictions.computeTypesAllowed
  • codebuild:buildBatchConfig.restrictions.fleetsAllowed
  • codebuild:buildBatchConfig.serviceRole
  • codebuild:buildType
  • codebuild:cache
  • codebuild:cache.location
  • codebuild:cache.modes
  • codebuild:cache.type
  • codebuild:computeConfiguration
  • codebuild:computeConfiguration.disk
  • codebuild:computeConfiguration.instanceType
  • codebuild:computeConfiguration.machineType
  • codebuild:computeConfiguration.memory
  • codebuild:computeConfiguration.vCpu
  • codebuild:computeType
  • codebuild:concurrentBuildLimit
  • codebuild:encryptionKey
  • codebuild:environment
  • codebuild:environment.certificate
  • codebuild:environment.computeConfiguration
  • codebuild:environment.computeConfiguration.disk
  • codebuild:environment.computeConfiguration.instanceType
  • codebuild:environment.computeConfiguration.machineType
  • codebuild:environment.computeConfiguration.memory
  • codebuild:environment.computeConfiguration.vCpu
  • codebuild:environment.computeType
  • codebuild:environment.environmentVariables
  • codebuild:environment.environmentVariables.name
  • codebuild:environment.environmentVariables.value
  • codebuild:environment.environmentVariables/${name}.value
  • codebuild:environment.fleet.fleetArn
  • codebuild:environment.image
  • codebuild:environment.imagePullCredentialsType
  • codebuild:environment.privilegedMode
  • codebuild:environment.registryCredential
  • codebuild:environment.registryCredential.credential
  • codebuild:environment.registryCredential.credentialProvider
  • codebuild:environment.type
  • codebuild:environmentType
  • codebuild:exportConfig.s3Destination.bucket
  • codebuild:exportConfig.s3Destination.bucketOwner
  • codebuild:exportConfig.s3Destination.encryptionDisabled
  • codebuild:exportConfig.s3Destination.encryptionKey
  • codebuild:exportConfig.s3Destination.path
  • codebuild:fileSystemLocations.identifier
  • codebuild:fileSystemLocations.location
  • codebuild:fileSystemLocations.type
  • codebuild:fileSystemLocations/${identifier}.location
  • codebuild:fileSystemLocations/${identifier}.type
  • codebuild:fleetServiceRole
  • codebuild:imageId
  • codebuild:logsConfig
  • codebuild:logsConfig.s3Logs
  • codebuild:logsConfig.s3Logs.bucketOwnerAccess
  • codebuild:logsConfig.s3Logs.encryptionDisabled
  • codebuild:logsConfig.s3Logs.location
  • codebuild:logsConfig.s3Logs.status
  • codebuild:manualCreation
  • codebuild:projectVisibility
  • codebuild:scopeConfiguration.domain
  • codebuild:scopeConfiguration.name
  • codebuild:scopeConfiguration.scope
  • codebuild:secondaryArtifacts
  • codebuild:secondaryArtifacts.artifactIdentifier
  • codebuild:secondaryArtifacts.bucketOwnerAccess
  • codebuild:secondaryArtifacts.encryptionDisabled
  • codebuild:secondaryArtifacts.location
  • codebuild:secondaryArtifacts/${artifactIdentifier}.bucketOwnerAccess
  • codebuild:secondaryArtifacts/${artifactIdentifier}.encryptionDisabled
  • codebuild:secondaryArtifacts/${artifactIdentifier}.location
  • codebuild:secondarySources
  • codebuild:secondarySources.auth.resource
  • codebuild:secondarySources.auth.type
  • codebuild:secondarySources.buildStatusConfig.context
  • codebuild:secondarySources.buildStatusConfig.targetUrl
  • codebuild:secondarySources.buildspec
  • codebuild:secondarySources.insecureSsl
  • codebuild:secondarySources.location
  • codebuild:secondarySources.sourceIdentifier
  • codebuild:secondarySources/${sourceIdentifier}.auth.resource
  • codebuild:secondarySources/${sourceIdentifier}.auth.type
  • codebuild:secondarySources/${sourceIdentifier}.buildStatusConfig.context
  • codebuild:secondarySources/${sourceIdentifier}.buildStatusConfig.targetUrl
  • codebuild:secondarySources/${sourceIdentifier}.buildspec
  • codebuild:secondarySources/${sourceIdentifier}.insecureSsl
  • codebuild:secondarySources/${sourceIdentifier}.location
  • codebuild:serverType
  • codebuild:serviceRole
  • codebuild:shouldOverwrite
  • codebuild:source
  • codebuild:source.auth.resource
  • codebuild:source.auth.type
  • codebuild:source.buildStatusConfig.context
  • codebuild:source.buildStatusConfig.targetUrl
  • codebuild:source.buildspec
  • codebuild:source.insecureSsl
  • codebuild:source.location
  • codebuild:token
  • codebuild:username
  • codebuild:vpcConfig
  • codebuild:vpcConfig.securityGroupIds
  • codebuild:vpcConfig.subnets
  • codebuild:vpcConfig.vpcId

公式ドキュメントはこちらになります。

https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscodebuild.html#awscodebuild-policy-keys

これを使うことで、例えば特定のインスタンスサイズのみ許可するとか、特定の VPC へのみ接続を許可するとか、BuildSpec のオーバーライドを禁止するとか、様々な権限制御のユースケースに対応できるようになります。

特定 VPC 以外に接続する CodeBuild プロジェクトの作成を拒否してみた

今回こちらを使って、特定 VPC 以外を利用するプロジェクトの作成を禁止してみました。
IAM コンソールのサービスレベルの条件キーを確認してみると、codebuildプレフィックスで様々なキーが選択できるようになっていることが確認できると思います。

D3C41B27-E620-452F-924E-E249BAFB3827.png

今回私は次のように VPC ID を固定で指定した拒否ポリシーを作成してみました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "codebuild:CreateProject",
                "codebuild:CreateFleet"
            ],
            "Resource": "*",
            "Condition": {
                "ForAllValues:StringNotEquals": {
                    "codebuild:vpcConfig.vpcId": [
                        "vpc-3b4cab5d"
                    ]
                }
            }
        }
    ]
}

A6403FE9-C10A-4064-BBE6-C34B9EE03B5D.png

許可される VPC

まずは、条件キーで指定した VPC ID を指定して CodeBuild プロジェクトを作成してみます。

544C7476-9222-402C-A6BF-22F246ED62FE.png

この場合は次のようにプロジェクトを作成することが出来ました。

7AC8D934-2E04-4226-8389-79D946716C83.png

拒否される VPC

続いて上記以外のプロジェクトを指定してみます。

2E24CDA4-E574-4202-8D77-F7C3D0369E77.png

今度は拒否されましたね。

AEBE4623-36AE-4604-BE66-00C48DB7F5F6.png

セキュリティ上の理由で専用 VPC 以外の利用は許可したくない時などに使うことができると思います。

さいごに

本日は AWS CodeBuild 向けに様々な IAM 条件コンテキストキーが追加され、IAM ポリシーを使った細かい権限制御ができるようになったので使ってみました。

AWS CodeBuild を使わせつつ、特定条件の操作を禁止したい時 SCP などで使えそうです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.