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

これにより、CodeBuild サービスがビルドを実行するのに必要な最小限の権限を含む AWSProtonCodeBuildProvisioningBasicAccess も一緒にアタッチされます。

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

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

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

管理者アクセス権

AdministratorAccess ポリシーを CodeBuild プロビジョニングロールにアタッチすると、権限不足による障害が IaaC テンプレートに発生しなくなります。また、環境テンプレートまたはサービステンプレートを作成できるユーザーは、そのユーザーが管理者でなくても、管理者レベルのアクションを実行できます。CodeBuild プロビジョニングロールAdministatorAccessで AWS Proton を使用することはお勧めしません。CodeBuild プロビジョニングロールと一緒に AdministratorAccess を使用する場合は、サンドボックス環境で使用してください。

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

CodeBuild をカスタム VPC で実行する場合は、あなたの 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