

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

# CodeBuild が他の AWS サービスとやり取りすることを許可する
<a name="setting-up-service-role"></a>

 AWS CodeBuild 「」の手順に従って [コンソールを使用した開始方法](getting-started-overview.md#getting-started)に初めてアクセスする場合、ほとんどの場合、このトピックの情報は必要ありません。ただし、CodeBuild を引き続き使用すると、CodeBuild が他の AWS サービスとやり取りすることを許可するなどの操作が必要になる場合があります。

CodeBuild がユーザーに代わって依存 AWS サービスとやり取りできるようにするには、 AWS CodeBuild サービスロールが必要です。CodeBuild または AWS CodePipeline コンソールを使用して、CodeBuild サービスロールを作成できます。詳細については、以下を参照してください。
+ [ビルドプロジェクトの作成 (コンソール)](create-project.md#create-project-console)
+ [CodeBuild を使用するパイプラインを作成する (CodePipeline コンソール)](how-to-create-pipeline-console.md)
+ [CodeBuild ビルドアクションをパイプラインに追加する (CodePipeline コンソール)](how-to-create-pipeline-add.md)
+ [ビルドプロジェクトの設定の変更 (コンソール)](change-project.md#change-project-console)

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

**重要**  
CodeBuild は、ユーザーのために実行されるすべての操作でサービスロールを使用します。ユーザーが持つべきではないアクセス許可がロールに含まれる場合、ユーザーのアクセス許可を非意図的にエスカレーションできてしまいます。ロールが [最小特権](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) を付与することを確認します。  
このページで説明されているサービスロールには、CodeBuild を使用するのに必要な最小権限を付与するポリシーが含まれています。ユースケースに応じて、さらに許可を追加する必要がある場合があります。<a name="setting-up-service-role-console"></a>

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

1. IAM コンソール ([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)) を開きます。

   次のいずれかを使用して、コンソールに既にサインインしている必要があります。
   +  AWS ルートアカウント。これは推奨されません。詳細については、*ユーザーガイド*の「[AWS アカウント ルートユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html)」を参照してください。
   +  AWS アカウントの管理者ユーザー。詳細については、 *ユーザーガイド*の[「最初の AWS アカウント ルートユーザーとグループの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)」を参照してください。
   + 以下の最小アクションセットを実行するアクセス許可を持つ 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 ポリシーの概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)」を参照してください。

1. ナビゲーションペインで、**ポリシー** を選択してください。

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

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

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

------
#### [ 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 リソースへのアクセス AWS CodeBuild を制限するには、 `Resource` 配列の値を変更します。詳細については、 AWS サービスのセキュリティドキュメントを参照してください。

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

1. ナビゲーションペインで **Roles (ロール) ** を選択してください。

1. [**ロールの作成**] を選択してください。

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

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

1. [**Create role and review (ロールの作成と確認)**] ページで、[**ロール名**] にロールの名前 (**CodeBuildServiceRole** など) を入力し、[**ロールの作成**] を選択します。<a name="setting-up-service-role-cli"></a>

**CodeBuild サービスロールの作成 (AWS CLI)**

1. 前の手順で説明したように、IAM エンティティの 1 つに対応する AWS アクセスキーと AWS シークレットアクセスキー AWS CLI で が設定されていることを確認します。詳細については、[AWS Command Line Interfaceユーザーガイド](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)の「*AWS Command Line Interface のセットアップ*」を参照してください。

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

   `create-role.json`:

------
#### [ JSON ]

****  

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

------
**注記**  
[「混乱した代理」問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)に対して自分を守るために `aws:SourceAccount` および `aws:SourceArn` 条件キーを使用することをお勧めします。例えば、前述の信頼ポリシーを次の条件ブロックで編集できます。`aws:SourceAccount` は CodeBuild プロジェクトの所有者で、`aws:SourceArn` は CodeBuild プロジェクトの ARN です。

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

------
#### [ JSON ]

****  

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

------

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

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "codebuild.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject"
                   }
               }
           }
       ]
   }
   ```

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

   `put-role-policy.json`:

------
#### [ 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 リソースへのアクセス AWS CodeBuild を制限するには、 `Resource` 配列の値を変更します。詳細については、 AWS サービスのセキュリティドキュメントを参照してください。

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

   ```
   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
   ```