CodeBuild プロビジョニングロールの作成 - AWS Proton

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CodeBuild プロビジョニングロールの作成

AWS CloudFormation や Terraform などの Infrastructure as a Code (IaaC) ツールには、さまざまなタイプの AWS リソースに対するアクセス許可が必要です。例えば、IaaC テンプレートで Amazon S3 バケットを宣言する場合、Amazon S3 バケットを作成、読み取り、更新、削除する権限が必要になります。ロールを必要最小限の権限に制限することが、セキュリティのベストプラクティスだと思われます。 AWS リソースの幅を考えると、特にそれらのテンプレートによって管理されているリソースが後で変更される可能性がある場合、IaaC テンプレートの最小特権ポリシーを作成することは困難です。例えば、 によって管理されているテンプレートに対する最新の編集では AWS Proton、RDSデータベースリソースを追加します。

適切なアクセス許可を設定すると、IaC のデプロイをスムーズに行うことができます。 AWS Proton CodeBuild プロビジョニングは、お客様のアカウントにある CodeBuild プロジェクトで、お客様が指定した任意のCLIコマンドを実行します。通常、これらのコマンドは、 AWS CDKなどのコードとしてのインフラストラクチャ (IaaC) ツールを使用してインフラストラクチャの作成と削除を行います。テンプレートが CodeBuild プロビジョニングを使用する AWS リソースがデプロイされると、 AWS は によって管理される CodeBuild プロジェクトでビルドを開始します AWS。ロールは に渡され CodeBuild、 がコマンドを実行することを CodeBuild 前提としています。このロールはプロビジョニング CodeBuild ロールと呼ばれ、お客様が提供し、インフラストラクチャのプロビジョニングに必要なアクセス許可が含まれています。これは のみが引き受けることを目的としており CodeBuild 、 AWS Proton は引き受けることができません。

ロールの作成

CodeBuild プロビジョニングロールは、IAMコンソールまたは で作成できます AWS CLI。 AWS CLIで作成する:

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AWSProtonCodeBuildProvisioningBasicAccess

これによりAWSProtonCodeBuildProvisioningBasicAccess、ビルドを実行するために CodeBuild サービスが必要とする最小限のアクセス許可を含む もアタッチされます。

コンソールを使用する場合は、ロールの作成時に以下の点を確認してください。

  1. 信頼されたエンティティの場合は、 AWS サービスを選択し、 を選択します CodeBuild。

  2. 「権限の追加」ステップで、AWSProtonCodeBuildProvisioningBasicAccess を選択しアタッチしたいその他のポリシーを選択します。

管理者アクセス権

AdministratorAccess ポリシーを CodeBuild プロビジョニングロールにアタッチすると、アクセス許可がないために IaaC テンプレートが失敗しないことが保証されます。また、環境テンプレートまたはサービステンプレートを作成できるユーザーは、そのユーザーが管理者でなくても、管理者レベルのアクションを実行できます。 CodeBuild プロビジョニングロールAdministatorAccessで AWS Proton を使用することはお勧めしません。プロビジョニングロールAdministratorAccessで CodeBuild を使用する場合は、サンドボックス環境で使用します。

IAM コンソールAdministratorAccessで、または次のコマンドを実行して、 でロールを作成できます。

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
最小スコープのロールの作成

最小限の権限でロールを作成したい場合は、複数の方法があります。

  • 管理者権限でデプロイし、ロールの範囲を絞り込みます。IAM Access Analyzer を使用することをお勧めします。

  • 管理ポリシーを使用して、使用する予定のサービスへのアクセスを許可します。

AWS CDK

AWS CDK で を使用していて AWS Proton、各環境アカウント/リージョンcdk bootstrapで を実行している場合、 のロールが既に存在しますcdk deploy。この場合、プロビジョニングロールに次のポリシー CodeBuild をアタッチします。

{ "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::account-id:role/cdk-*-deploy-role-*", "arn:aws:iam::account-id:role/cdk-*-file-publishing-role-*" ], "Effect": "Allow" }
カスタム VPC

カスタム VPC CodeBuild で を実行する場合は、 CodeBuild ロールに次のアクセス許可が必要です。

{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:security-group/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:*/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterfacePermission" ], "Resource": "arn:aws:ec2:region:account-id:network-interface/*", "Condition": { "StringEquals": { "ec2:AuthorizedService": "codebuild.amazonaws.com" } } }

AmazonEC2FullAccess 管理ポリシーを使用することもできますが、管理ポリシーには必要のない権限が含まれる場合があります。を使用して 管理ポリシーをアタッチするにはCLI:

aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess