

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 允許 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 主控台或 建立 CodeBuild 服務角色 AWS CLI。

**重要**  
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. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 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 政策，輸入下列內容，然後選擇 **Review 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": "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 服務的安全文件。

1. 在 **Review Policy (檢閱政策)** 頁面上，針對 **Policy Name (政策名稱)**，輸入政策的名稱 (例如，**CodeBuildServiceRolePolicy**)，然後選擇 **Create policy (建立政策)**。
**注意**  
如果您使用不同的名稱，請務必在本程序中一律使用該名稱。

1. 在導覽窗格中，選擇 **Roles** (角色)。

1. 選擇 **Create Role** (建立角色)。

1. 在**建立角色**頁面上，在已選取**AWS 服務**的情況下，選擇 **CodeBuild**，然後選擇**下一步：許可**。

1. 在**連接許可政策**頁面上，選取 **CodeBuildServiceRolePolicy**，然後選擇**下一步：檢閱**。

1. 在 **Create role and review (建立角色和檢閱)** 頁面上，針對 **Role name (角色名稱)**，輸入角色的名稱 (例如 **CodeBuildServiceRole**)，然後選擇 **Create role (建立角色)**。<a name="setting-up-service-role-cli"></a>

**建立 CodeBuild 服務角色 (AWS CLI)**

1. 請確定您已 AWS CLI 使用對應至其中一個 IAM 實體的 AWS 存取金鑰和 AWS 私密存取金鑰來設定 ，如先前程序所述。如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[設定 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)。

1. 在 AWS CLI 安裝 的本機工作站或執行個體上的空目錄中，建立兩個名為 `create-role.json`和 的檔案`put-role-policy.json`。如果您選擇不同的檔案名稱，請務必在本程序中一律使用這些檔案名稱。

   `create-role.json`:

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

****  

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

------
**注意**  
建議您使用 `aws:SourceAccount` 和 `aws:SourceArn` 條件索引鍵，保護自己免受[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)的困擾。例如，您可以使用下列條件區塊編輯先前的信任政策。`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 模式設定信任政策限制，您可以使用萬用字元 (\$1) 取代 ARN 的該部分。建立專案之後，您就可以更新信任政策。

   `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 CodeBuild 存取特定 AWS 資源，請變更`Resource`陣列的值。如需詳細資訊，請參閱 AWS 服務的安全文件。

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