AWS CodeBuild
ユーザーガイド (API バージョン 2016-10-06)

高度な設定

AWS CodeBuild に初めてアクセスするための「ご利用開始にあたって」の手順を実行する場合、このトピックの情報を参照する必要はほとんどありません。ただし、引き続き CodeBuild を使用する場合は、組織の IAM グループやユーザーに CodeBuild へのアクセスを付与したり、CodeBuild にアクセスするため IAM の既存のサービスロールや AWS KMS のカスタマーマスターキーを変更したり、CodeBuild にアクセスするため組織のワークステーション全体で AWS CLI をセットアップしたりする場合があります。このトピックでは、関連するセットアップ手順の実行方法について説明します。

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

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

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

AWS ルートアカウント (非推奨) または AWS アカウントの管理者 IAM ユーザーで CodeBuild にアクセスする場合は、これらの手順に従う必要はありません。

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

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

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

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

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

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

    • 次の最小限のアクションを実行する権限がある AWS アカウントの IAM ユーザー。

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

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

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

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

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

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

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

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

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

  4. [Create Policy] を選択します。

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

  6. [Review Policy (ポリシーの確認)] ページの [Policy Name (ポリシー名)] に、ポリシーの新しい名前 (例: CodeBuildAccessPolicy) を入力します。別の名前を使用する場合は、この手順全体でそれを置き換えてください。

  7. [Policy Document] に、以下のように入力し、[Create Policy] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildDefaultPolicy", "Effect": "Allow", "Action": [ "codebuild:*", "iam:PassRole" ], "Resource": "*" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" } ] }

    注記

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

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

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

  10. グループの場合は、グループ設定ページの [Permissions] タブで [Managed Policies] を展開し、[Attach Policy] を選択します。

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

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

    ユーザーの場合は、[Add permissions] ページで [Attach existing policies directly] を選択します。[CodeBuild AccessPolicy] を選択し、[Next: Reivew (次へ: 確認)]、[Add permissions (アクセス権限の追加)] の順に選択します。

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

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

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

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

    IAM グループまたは 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

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

    • 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 グループまたは IAM ユーザーへの CodeBuild のアクセス許可のデフォルトセットが追加されました。この手順の残りの手順をスキップします。

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*", "iam:PassRole" ], "Resource": "*" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" } ] }

    注記

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

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

    IAM グループの場合:

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

    IAM ユーザーの場合:

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

    前述のコマンドでは、group-name または user-name をターゲット IAM グループまたは IAM ユーザーの名前と置き換えます。

CodeBuild サービスロールを作成する

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

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

注記

このページで説明されているサービスロールには、CodeBuild を使用するのに必要な最小権限を付与するポリシーが含まれています。ユースケースに応じて、さらにアクセス許可を追加する必要がある場合があります。たとえば、Amazon Virtual Private Cloud で CodeBuild を使用するには、作成するサービスロールに、次のポリシーのアクセス権限が必要です。CodeBuild サービスロールを作成する。

CodeBuild サービスロールを作成するには (コンソール)

  1. Open the IAM console at https://console.aws.amazon.com/iam/.

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

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

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

    • 次の最小限のアクションを実行する権限がある AWS アカウントの IAM ユーザー。

      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 ユーザーガイド』の「IAM ポリシーの概要」を参照してください。

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

  3. [Create Policy] を選択します。

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

  5. [JSON Policy] に以下の内容を入力し、[Review Policy] を選択します。

    { "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": [ "*" ] } ] }

    注記

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

  6. [Review Policy (ポリシーの確認)] ページで、[Policy Name (ポリシー名)] にポリシー名 (例: CodeBuildServiceRolePolicy) を入力して、[Create policy (ポリシーの作成)] を選択します。

    注記

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

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

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

  9. [Create role (ロールの作成)] ページで [AWS サービス] が選択済みの状態で、このロールを使用するサービスとして [CodeBuild] を選択し、次に [Next:Permissions (次へ: アクセス許可)] を選択します。

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

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

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" } ] }

    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": [ "*" ] } ] }

    注記

    このポリシーに含まれているステートメントでは、多数の 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 KMS CMK の作成と設定

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

この CMK を使用しない場合は、お客様が管理する CMK を自分で作成して設定する必要があります。このセクションでは、IAM コンソールを使用してこれを行う方法を説明します。

CMK の詳細については、『AWS KMS 開発者ガイド』の「AWS Key Management Service の概念」と「キーの作成」を参照してください。

CodeBuild で使用する CMK を設定するには、『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)。

  • account-ID は、CMK を所有する AWS アカウントの ID を表します。

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

注記

IAM コンソールで CMK を作成または設定するには、まず次のいずれかを使用して 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 Command Line Interface ユーザーガイド』の「AWS CLI のアンインストール」および「AWS Command Line Interface のインストール」を参照してください。