詳細設定 - AWS CodeBuild

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

詳細設定

コンソールを使用した開始方法」の手順に従って初めて AWS CodeBuild にアクセスする場合、このトピックの情報は必要ないと考えられます。ただし、CodeBuild を引き続き使用する場合、組織内の IAM グループやユーザーに CodeBuild へのアクセスを付与したり、CodeBuild にアクセスするために IAM の既存のサービスロールや AWS KMS keys を変更したり、CodeBuild にアクセスするために組織のワークステーション全体で AWS CLI をセットアップしたりすることがあります。このトピックでは、関連するセットアップ手順の実行方法について説明します。

AWS アカウントは既にあるものとします。ただし、まだアカウントがない場合は、http://aws.amazon.com に移動し、[Sign In to the Console] を選択してオンラインの指示に従ってください。

IAM グループまたはユーザーに CodeBuild アクセス許可を追加する

AWS CodeBuild にアクセスするには、IAM グループまたはユーザーにアクセス許可を追加する必要があります。このセクションでは、IAM コンソールまたは AWS CLI でこれを行う方法について説明します。

AWS ルートアカウント (非推奨) を使用するか、AWS アカウントの管理者ユーザーを使用して CodeBuild にアクセスする場合、以下の手順に従う必要はありません。

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

IAM グループまたはユーザーに CodeBuild アクセス許可を追加するには (コンソール)
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

    次のいずれかを使用して、AWS Management Console に既にサインインしている必要があります。

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

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

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

      iam:AttachGroupPolicy iam:AttachUserPolicy iam:CreatePolicy iam:ListAttachedGroupPolicies iam:ListAttachedUserPolicies iam:ListGroups iam:ListPolicies iam:ListUsers

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

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

  3. カスタムセットの AWS CodeBuild アクセス許可を IAM グループまたは IAM ユーザーに追加するには、この手順のステップ 4 に進んでください。

    IAM グループや IAM ユーザーにデフォルトの CodeBuild アクセス許可セットを追加するには、[Policy Type]、[AWS Managed] の順に選択し、以下の操作を行います。

    • CodeBuild へのフルアクセス許可を追加するには、[AWSCodeBuildAdminAccess] という名前のボックスを選択し、[ポリシーアクション][アタッチ] の順に選択します。対象の IAM グループやユーザーの横にあるボックスを選択し、[Attach Policy] (ポリシーのアタッチ) を選択します。AmazonS3ReadOnlyAccess ポリシーおよび IAMFullAccess ポリシーに対して、この操作を繰り返します。

    • ビルドプロジェクトの管理を除くすべてについて CodeBuild へのアクセス許可に追加するには、[AWSCodeBuildDeveloperAccess] という名前のボックスを選択し、[Policy Actions] (ポリシーアクション)、[Attach] (アタッチ) の順に選択します。対象の IAM グループやユーザーの横にあるボックスを選択し、[Attach Policy] (ポリシーのアタッチ) を選択します。AmazonS3ReadOnlyAccess ポリシーに対して、この操作を繰り返します。

    • CodeBuild への読み取り専用アクセス許可を追加するには、[AWSCodeBuildReadOnlyAccess] という名前のボックスを選択します。対象の IAM グループやユーザーの横にあるボックスを選択し、[Attach Policy] (ポリシーのアタッチ) を選択します。AmazonS3ReadOnlyAccess ポリシーに対して、この操作を繰り返します。

    これで、IAM グループまたはユーザーに CodeBuild へのデフォルトのアクセス許可セットが追加されました。この手順の残りの手順をスキップします。

  4. [Create Policy] (ポリシーの作成) を選択します。

  5. [Create Policy] ページで、[Create Your Own Policy] の横にある [Select] を選択します。

  6. [ポリシーの確認] ページの [ポリシー名] に、ポリシーの名前 (CodeBuildAccessPolicy など) を入力します。別の名前を使用する場合は、この手順全体でそれを使用してください。

  7. [ポリシードキュメント] に、次のように入力し、[ポリシーの作成] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-ID:role/role-name" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注記

    このポリシーにより、すべての CodeBuild アクションへのアクセスが許可され、多数の AWS リソースへのアクセスが許可される可能性があります。アクセス許可を特定の CodeBuild アクションに限定するには、CodeBuild ポリシーステートメントの codebuild:* の値を変更します。詳細については、「ID およびアクセス管理」を参照してください。特定の AWS リソースへのアクセスを制限するには、Resource オブジェクトの値を変更します。詳細については、「ID およびアクセス管理」を参照してください。

    CodeBuildRolePolicy ステートメントは、ビルドプロジェクトの作成または変更を許可するために必要です。

  8. ナビゲーションペインで、[Groups] または [Users] を選択します。

  9. グループまたはユーザーのリストで、CodeBuild アクセス許可を追加する IAM グループまたは IAM ユーザーの名前を選択します。

  10. グループの場合は、グループ設定ページの [アクセス許可] タブで [管理ポリシー] を展開し、[ポリシーのアタッチ] を選択します。

    ユーザーの場合は、ユーザー設定ページの [Permissions] タブで、[Add permissions] を選択します。

  11. グループの場合は、[Attach Policy] (ポリシーのアタッチ) ページで [CodeBuildAccessPolicy][Attach Policy] (ポリシーのアタッチ) の順に選択します。

    ユーザーの場合は、[Add permissions] (アクセス許可の付与) ページで [Attach existing policies directly] (既存のポリシーを直接アタッチ) を選択します。[CodeBuildAccessPolicy] を選択し、[Next: Reivew] (次のステップ: 確認)、[Add permissions] (アクセス権限の追加) の順にクリックします。

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

  2. AWS CodeBuild へのアクセス許可のカスタムセットを IAM グループまたは IAM ユーザーに追加するには、この手順のステップ 3 に進んでください。

    IAM グループまたは IAM ユーザーに、CodeBuild アクセス許可のデフォルトセットを追加するには以下を実行します。

    IAM グループまたはユーザーのどちらにアクセス許可を追加するかに応じて、以下のいずれかのコマンドを実行します。

    aws iam attach-group-policy --group-name group-name --policy-arn policy-arn aws iam attach-user-policy --user-name user-name --policy-arn policy-arn

    コマンドは 3 回実行する必要があります。group-name または user-name は IAM グループ名またはユーザー名に置き換え、policy-arn は 1 回ごとに以下の各ポリシー Amazon リソースネーム (ARN) に置き換えてください。

    • CodeBuild にフルアクセス許可を追加するには、以下のポリシー ARN を使用します。

      • arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

      • arn:aws:iam::aws:policy/IAMFullAccess

    • ビルドプロジェクトの管理以外のすべてに対して CodeBuild にアクセス許可を追加するには、次のポリシー ARN を使用します。

      • arn:aws:iam::aws:policy/AWSCodeBuildDeveloperAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

    • CodeBuild に読み取り専用アクセス許可を追加するには、以下のポリシー ARN を使用します。

      • arn:aws:iam::aws:policy/AWSCodeBuildReadOnlyAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

    これで、IAM グループまたはユーザーに CodeBuild へのデフォルトのアクセス許可セットが追加されました。この手順の残りの手順をスキップします。

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-ID:role/role-name" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注記

    このポリシーにより、すべての CodeBuild アクションへのアクセスが許可され、多数の AWS リソースへのアクセスが許可される可能性があります。アクセス許可を特定の CodeBuild アクションに限定するには、CodeBuild ポリシーステートメントの codebuild:* の値を変更します。詳細については、「ID およびアクセス管理」を参照してください。特定の AWS リソースへのアクセスを制限するには、関連する Resource オブジェクトの値を変更します。詳細については、「ID およびアクセス管理」または特定の AWS サービスのセキュリティドキュメントを参照してください。

    CodeBuildRolePolicy ステートメントは、ビルドプロジェクトの作成または変更を許可するために必要です。

  4. ファイルを保存したディレクトリに移動し、以下のいずれかのコマンドを実行します。CodeBuildGroupAccessPolicy および CodeBuildUserAccessPolicy に異なる値を使用できます。異なる値を使用する場合は、ここでそれらを使用してください。

    IAM グループの場合:

    aws iam put-group-policy --group-name group-name --policy-name CodeBuildGroupAccessPolicy --policy-document file://put-group-policy.json

    ユーザーの場合:

    aws iam put-user-policy --user-name user-name --policy-name CodeBuildUserAccessPolicy --policy-document file://put-user-policy.json

    前述のコマンドで、group-name または user-name は、対象の IAM グループまたはユーザーの名前に置き換えます。

CodeBuild サービスロールの作成

AWS CodeBuild サービスロールが必要です。これにより、CodeBuild が、ユーザーに代わって依存 AWS サービスとやり取りできるようになります。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. [Create Policy] (ポリシーの作成) を選択します。

  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. ナビゲーションペインで [ロール] を選択します。

  8. [ロールの作成] を選択します。

  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

CodeBuild でカスタマー管理のキーを作成して設定する

AWS CodeBuild がビルド出力アーティファクトを暗号化するには、KMS キーにアクセスする必要があります。デフォルトでは、CodeBuild は AWS アカウントの Amazon S3 用 AWS マネージドキー を使用します。

AWS マネージドキー を使用しない場合は、カスタマー管理のキーを自分で作成して設定する必要があります。このセクションでは、IAM コンソールを使用してこれを行う方法を説明します。

カスタマー管理のキーの詳細については、AWS KMS デベロッパーガイドの「AWS Key Management Service の概念およびキーの作成」を参照してください。

CodeBuild で使用するカスタマー管理のキーを設定するには、AWS KMS 開発者ガイドの「キーポリシーの変更」の手順に従ってください。次に、キーポリシーに以下のステートメント (###BEGIN ADDING STATEMENTS HERE######END ADDING STATEMENTS HERE### の間) を追加します。省略記号 (...) は、簡潔にするために使用され、ステートメントを追加する場所の特定に役立ちます。ステートメントを削除しないでください、また、これらの省略記号をキーポリシーに入力しないでください。

{ "Version": "2012-10-17", "Id": "...", "Statement": [ ### BEGIN ADDING STATEMENTS HERE ### { "Sid": "Allow access through Amazon S3 for all principals in the account that are authorized to use Amazon S3", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "s3.region-ID.amazonaws.com", "kms:CallerAccount": "account-ID" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-ID:role/CodeBuild-service-role" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, ### END ADDING STATEMENTS HERE ### { "Sid": "Enable IAM User Permissions", ... }, { "Sid": "Allow access for Key Administrators", ... }, { "Sid": "Allow use of the key", ... }, { "Sid": "Allow attachment of persistent resources", ... } ] }
  • region-ID は、CodeBuild に関連付けられた Amazon S3 バケットが配置されている AWS リージョンの ID を表します (たとえば、us-east-1)。

  • アカウント IDは、AWSカスタマー管理のキーを所有する アカウントのID を表します。

  • CodeBuild-service-role は、このトピックの前半で作成または識別した CodeBuild サービスロールの名前を表します。

注記

IAM コンソールでカスタマー管理のキーを作成または設定するには、まず次のいずれかを使用して AWS Management Console にサインインする必要があります。

AWS CLI のインストールと設定

AWS CodeBuild にアクセスするには、AWS CLI または代わりに CodeBuild コンソール、CodePipeline コンソール、AWS SDKを使用できます。AWS CLI をインストールして設定するには、AWS Command Line Interface ユーザーガイド「AWS Command Line Interface のセットアップ」を参照してください。

  1. 次のコマンドを実行して、AWS CLI のインストールが CodeBuild をサポートしているかどうかを確認します。

    aws codebuild list-builds

    成功すると、次のような情報が出力に表示されます。

    { "ids": [] }

    空の角括弧は、まだビルドを実行していないことを示しています。

  2. エラーが出力された場合は、現在のバージョンの AWS CLI をアンインストールしてから、最新バージョンをインストールする必要があります。詳細については、AWS CLI ユーザーガイドの「AWS Command Line Interface のアンインストール」および「AWS Command Line Interface のインストール」を参照してください。