CodeBuild が他の AWS のサービスとやり取りすることを許可 - AWS CodeBuild

CodeBuild が他の AWS のサービスとやり取りすることを許可

コンソールを使用した開始方法」の手順に従って初めて AWS CodeBuild にアクセスする場合、このトピックの情報は必要ないと考えられます。ただし、CodeBuild を引き続き使用すると、CodeBuild に他の AWS のサービスとのやり取りを許可するなどの必要が出てくるかもしれません。

CodeBuild がユーザーに代わって依存 AWS のサービスとやり取りするように許可するには、AWS CodeBuild サービスロールが必要です。CodeBuild または AWS CodePipeline コンソールを使用して、CodeBuild サービスロールを作成できます。詳細については、以下を参照してください。

これらのコンソールを使用する予定がない場合のために、このセクションでは、IAM コンソールまたは AWS CLI を使用して CodeBuild サービスロールを作成する方法について説明します。

重要

CodeBuild は、ユーザーのために実行されるすべての操作でサービスロールを使用します。ユーザーが持つべきではないアクセス権限がロールに含まれる場合、ユーザーのアクセス権限を非意図的にエスカレーションできてしまいます。ロールが最小特権を付与することを確認します。

このページで説明されているサービスロールには、CodeBuild を使用するのに必要な最小権限を付与するポリシーが含まれています。ユースケースに応じて、さらに許可を追加する必要がある場合があります。

CodeBuild サービスロールを作成するには (コンソール)
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

    次のいずれかを使用して、コンソールに既にサインインしている必要があります。

    • AWS ルートアカウント。これは推奨されません。詳細については、ユーザーガイドの「AWS アカウントルートユーザー」を参照してください。

    • AWS アカウントの管理者ユーザー。詳細については、ユーザーガイドの「最初の AWS アカウントルートユーザーおよびグループの作成」を参照してください。

    • 以下の最小限のアクションを実行するアクセス許可を持つ AWS アカウントのユーザー。

      iam:AddRoleToInstanceProfile iam:AttachRolePolicy iam:CreateInstanceProfile iam:CreatePolicy iam:CreateRole iam:GetRole iam:ListAttachedRolePolicies iam:ListPolicies iam:ListRoles iam:PassRole iam:PutRolePolicy iam:UpdateAssumeRolePolicy

      詳細については、ユーザーガイドの「IAM ポリシーの概要」を参照してください。

  2. ナビゲーションペインで、ポリシー を選択します。

  3. [ポリシーの作成] を選択します。

  4. [Create Policy] ページで、[JSON] を選択します。

  5. [JSON ポリシー] に、次のように入力し、[ポリシーの確認] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "ECRPullPolicy", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" }, { "Sid": "ECRAuthPolicy", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注記

    このポリシーに含まれているステートメントでは、多数の AWS リソースへのアクセスが許可される可能性があります。AWS CodeBuild に特定の AWS リソースへのアクセスを制限するには、Resource 配列の値を変更します。詳細については、AWS サービスのセキュリティドキュメントを参照してください。

  6. [ポリシーの確認] ページで、[ポリシー名] にポリシー名 (CodeBuildServiceRolePolicy など) を入力し、[ポリシーの作成] を選択します。

    注記

    別の名前を使用する場合は、この手順全体でそれを使用してください。

  7. ナビゲーションペインで [Roles (ロール) ] を選択します。

  8. [Create role] を選択します。

  9. [ロールの作成] ページで、[AWS のサービス] が選択された状態で、[CodeBuild]、[次の手順: アクセス許可] の順に選択します。

  10. [Attach permissions policies (アクセス権限ポリシーをアタッチする)] ページで、[CodeBuildServiceRolePolicy]、[Next: Review (次へ: 確認)] の順に選択します。

  11. [Create role and review (ロールの作成と確認)] ページで、[ロール名] にロールの名前 (CodeBuildServiceRole など) を入力し、[ロールの作成] を選択します。

CodeBuild サービスロールの作成 (AWS CLI)
  1. 前の手順で説明しているように、IAM エンティティのいずれかに対応する AWS アクセスキーと AWS シークレットアクセスキーを使用して AWS CLI が設定されていることを確認します。詳細については、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interface のセットアップ」を参照してください。

  2. AWS CLI がインストールされているローカルワークステーションまたはインスタンスの空のディレクトリに、create-role.json および put-role-policy.json という名前の 2 つのファイルを作成します。別のファイル名を選択した場合は、この手順全体でそれを使用してください。

    create-role.json:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    注記

    「混乱した代理」問題に対して自分を守るために aws:SourceAccount および aws:SourceArn 条件キーを使用することをお勧めします。例えば、前述の信頼ポリシーを次の条件ブロックで編集できます。aws:SourceAccount は CodeBuild プロジェクトの所有者で、aws:SourceArn は CodeBuild プロジェクトの ARN です。

    サービスロールを AWS アカウントに制限する場合、create-role.json は次のようになります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": [ "account-ID" ] } } } ] }

    サービスロールを特定の CodeBuild プロジェクトに制限する場合、create-role.json は次のようになります。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:codebuild:region-ID:account-ID:project/project-name" } } } ] }
    注記

    CodeBuild プロジェクトの名前が不明である、または名前を決定しておらず、特定の ARN パターンに信頼ポリシーの制限が必要な場合は、ARN の該当部分をワイルドカード (*) に置き換えることができます。プロジェクトを作成した後は、信頼ポリシーを更新できます。

    put-role-policy.json:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注記

    このポリシーに含まれているステートメントでは、多数の AWS リソースへのアクセスが許可される可能性があります。AWS CodeBuild に特定の AWS リソースへのアクセスを制限するには、Resource 配列の値を変更します。詳細については、AWS サービスのセキュリティドキュメントを参照してください。

  3. 上記のファイルを保存したディレクトリに移動し、以下の 2 つのコマンドをこの順番で 1 つずつ実行します。CodeBuildServiceRoleCodeBuildServiceRolePolicy には異なる値を使用する場合は、ここでそれらを使用してください。

    aws iam create-role --role-name CodeBuildServiceRole --assume-role-policy-document file://create-role.json
    aws iam put-role-policy --role-name CodeBuildServiceRole --policy-name CodeBuildServiceRolePolicy --policy-document file://put-role-policy.json