

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

# 步驟 2：建立 CodeDeploy 的服務角色
<a name="getting-started-create-service-role"></a>

在 中 AWS，服務角色用於授予 AWS 服務的許可，以便其可以存取 AWS 資源。您連接到服務角色的政策會決定服務可存取哪些資源，以及該服務可以如何處理這些資源。

您為 CodeDeploy 建立的服務角色必須獲得運算平台所需的許可。如果您部署到多個運算平台，請為每個平台建立一個服務角色。若要新增許可，請連接下列一或多個 AWS 提供的政策：

對於 EC2/現場部署，連接 **AWSCodeDeployRole**政策。此政策提供您服務角色執行下列作業的許可：
+ 讀取執行個體上的標籤，或依 Amazon EC2 Auto Scaling 群組名稱識別 Amazon EC2 執行個體。
+ 讀取、建立、更新和刪除 Amazon EC2 Auto Scaling 群組、生命週期關聯和擴展政策。
+ 將資訊發佈至 Amazon SNS 主題。
+ 擷取 CloudWatch 警示的相關資訊。
+ 讀取和更新 Elastic Load Balancing。
**注意**  
 如果您使用啟動範本建立 Auto Scaling 群組，則必須新增下列許可：  
 `ec2:RunInstances` 
 `ec2:CreateTags` 
 `iam:PassRole` 
如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》中的 [步驟 2：建立服務角色](#getting-started-create-service-role)、建立 Auto Scaling 群組的啟動範本，以及[啟動範本支援](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-launch-template-permissions.html)。 [ Auto Scaling ](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) *Amazon EC2 Auto Scaling * 

對於 Amazon ECS 部署，如果您想要完整存取支援服務，請連接 **AWSCodeDeployRoleForECS**政策。此政策提供您服務角色執行下列作業的許可：
+  讀取、更新和刪除 Amazon ECS 任務集。
+  更新 Elastic Load Balancing 目標群組、接聽程式和規則。
+  叫用 AWS Lambda 函數。
+  存取 Amazon S3 儲存貯體中的修訂檔案。
+  擷取 CloudWatch 警示的相關資訊。
+ 將資訊發佈至 Amazon SNS 主題。

對於 Amazon ECS 部署，如果您想要有限存取支援服務，請連接 **AWSCodeDeployRoleForECSLimited**政策。此政策提供您服務角色執行下列作業的許可：
+  讀取、更新和刪除 Amazon ECS 任務集。
+  擷取 CloudWatch 警示的相關資訊。
+ 將資訊發佈至 Amazon SNS 主題。

對於 AWS Lambda 部署，如果您想要允許發佈到 Amazon SNS，請連接**AWSCodeDeployRoleForLambda**政策。此政策提供您服務角色執行下列作業的許可：
+  讀取、更新和叫用 AWS Lambda 函數和別名。
+  存取 Amazon S3 儲存貯體中的修訂檔案。
+  擷取 CloudWatch 警示的相關資訊。
+  將資訊發佈至 Amazon SNS 主題。

對於 AWS Lambda 部署，如果您想要限制對 Amazon SNS 的存取，請連接 **AWSCodeDeployRoleForLambdaLimited**政策。此政策提供您服務角色執行下列作業的許可：
+  讀取、更新和叫用 AWS Lambda 函數和別名。
+  存取 Amazon S3 儲存貯體中的修訂檔案。
+  擷取 CloudWatch 警示的相關資訊。

做為設定服務角色的一部分，您也需要更新其信任關係，指定您希望授予其存取的端點。

您可以使用 IAM 主控台、 AWS CLI或 IAM APIs 建立服務角色。

**Topics**
+ [建立服務角色 （主控台）](#getting-started-create-service-role-console)
+ [建立服務角色 (CLI)](#getting-started-create-service-role-cli)
+ [取得服務角色 ARN （主控台）](#getting-started-get-service-role-console)
+ [取得服務角色 ARN (CLI)](#getting-started-get-service-role-cli)

## 建立服務角色 （主控台）
<a name="getting-started-create-service-role-console"></a>

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在導覽窗格中，選擇**角色**，然後選擇**建立角色**。

1. 選擇**AWS 服務**，然後在**使用案例**下，從下拉式清單中選擇 **CodeDeploy**。

1. 選擇您的使用案例：
   +  對於 EC2/現場部署，選擇 **CodeDeploy**。
   +  針對 AWS Lambda 部署，選擇 **CodeDeploy for Lambda**。
   +  針對 Amazon ECS 部署，選擇 **CodeDeploy - ECS**。

1. 選擇**下一步**。

1. 在**新增許可**頁面上，會顯示使用案例的正確許可政策。選擇**下一步**。

1. 在**名稱、檢閱和建立**頁面上的角色**名稱**中，輸入服務角色的名稱 （例如，**CodeDeployServiceRole**)，然後選擇**建立角色**。

   您也可以在角色描述中輸入此服務**角色的描述**。

1. 若您希望此服務角色擁有存取目前所有支援端點的許可，您即已完成此程序。

   若要限制此服務角色無法存取某些端點，請繼續此程序中的其餘步驟。

1. 在角色清單中，搜尋並選擇您剛建立的角色 (`CodeDeployServiceRole`)。

1. 選擇**信任關係**標籤。

1. 選擇**編輯信任政策**。

   您應該會看到以下政策，提供服務角色所有支援端點的存取許可：

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

   若要僅授予服務角色對某些受支援端點的存取權，請將信任政策文字方塊的內容取代為下列政策。移除您要防止存取的端點行，然後選擇**更新政策**。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": [
                       
                       "codedeploy.us-east-1.amazonaws.com",
                       "codedeploy.us-east-2.amazonaws.com",
                       "codedeploy.us-west-1.amazonaws.com",
                       "codedeploy.us-west-2.amazonaws.com",
                       "codedeploy.ca-central-1.amazonaws.com",
                       "codedeploy.ap-east-1.amazonaws.com",                  
                       "codedeploy.ap-northeast-1.amazonaws.com",
                       "codedeploy.ap-northeast-2.amazonaws.com",
                       "codedeploy.ap-northeast-3.amazonaws.com",
                       "codedeploy.ap-southeast-1.amazonaws.com",
                       "codedeploy.ap-southeast-2.amazonaws.com",
                       "codedeploy.ap-southeast-3.amazonaws.com",
                       "codedeploy.ap-southeast-4.amazonaws.com",
                       "codedeploy.ap-south-1.amazonaws.com",
                       "codedeploy.ap-south-2.amazonaws.com",
                       "codedeploy.ca-central-1.amazonaws.com",
                       "codedeploy.eu-west-1.amazonaws.com",
                       "codedeploy.eu-west-2.amazonaws.com",
                       "codedeploy.eu-west-3.amazonaws.com",
                       "codedeploy.eu-central-1.amazonaws.com",
                       "codedeploy.eu-central-2.amazonaws.com",
                       "codedeploy.eu-north-1.amazonaws.com",
                       "codedeploy.eu-south-1.amazonaws.com",
                       "codedeploy.eu-south-2.amazonaws.com",
                       "codedeploy.il-central-1.amazonaws.com",
                       "codedeploy.me-central-1.amazonaws.com",
                       "codedeploy.me-south-1.amazonaws.com",
                       "codedeploy.sa-east-1.amazonaws.com"
                   ]
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

如需建立服務角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-creatingrole-service.html)。

## 建立服務角色 (CLI)
<a name="getting-started-create-service-role-cli"></a>

1. 在您的開發機器上，建立 (舉例) 名為 `CodeDeployDemo-Trust.json` 的文字檔案。此檔案用於允許 CodeDeploy 代表您工作。

   執行以下任意一項：
   + 若要授予所有支援 AWS 區域的存取權，請將下列內容儲存在 檔案中：

     ```
     {
         "Version": "2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "",
                 "Effect": "Allow",
                 "Principal": {
                     "Service": [
                         "codedeploy.amazonaws.com"
                     ]
                 },
                 "Action": "sts:AssumeRole"
             }
         ]
     }
     ```
   + 若要僅授予存取某些支援的區域，請在檔案中輸入以下內容，並移除您希望排除存取的區域行：

     ```
     {
         "Version": "2012-10-17",		 	 	 
         "Statement": [
             {
                 "Sid": "",
                 "Effect": "Allow",
                 "Principal": {
                     "Service": [
                         
                         "codedeploy.us-east-1.amazonaws.com",
                         "codedeploy.us-east-2.amazonaws.com",
                         "codedeploy.us-west-1.amazonaws.com",
                         "codedeploy.us-west-2.amazonaws.com",
                         "codedeploy.ca-central-1.amazonaws.com",
                         "codedeploy.ap-east-1.amazonaws.com",                  
                         "codedeploy.ap-northeast-1.amazonaws.com",
                         "codedeploy.ap-northeast-2.amazonaws.com",
                         "codedeploy.ap-northeast-3.amazonaws.com",
                         "codedeploy.ap-southeast-1.amazonaws.com",
                         "codedeploy.ap-southeast-2.amazonaws.com",
                         "codedeploy.ap-southeast-3.amazonaws.com",
                         "codedeploy.ap-southeast-4.amazonaws.com",
                         "codedeploy.ap-south-1.amazonaws.com",
                         "codedeploy.ap-south-2.amazonaws.com",
                         "codedeploy.ca-central-1.amazonaws.com",
                         "codedeploy.eu-west-1.amazonaws.com",
                         "codedeploy.eu-west-2.amazonaws.com",
                         "codedeploy.eu-west-3.amazonaws.com",
                         "codedeploy.eu-central-1.amazonaws.com",
                         "codedeploy.eu-central-2.amazonaws.com",
                         "codedeploy.eu-north-1.amazonaws.com",
                         "codedeploy.eu-south-1.amazonaws.com",
                         "codedeploy.eu-south-2.amazonaws.com",
                         "codedeploy.il-central-1.amazonaws.com",
                         "codedeploy.me-central-1.amazonaws.com",
                         "codedeploy.me-south-1.amazonaws.com",
                         "codedeploy.sa-east-1.amazonaws.com"
                     ]
                 },
                 "Action": "sts:AssumeRole"
             }
         ]
     }
     ```
**注意**  
請不要在清單中的最後一個端點之後使用逗點。

1. 從相同目錄裡，呼叫 **create-role** 命令，根據您剛才建立的文字檔案資訊，建立名為 **CodeDeployServiceRole** 的服務角色：

   ```
   aws iam create-role --role-name CodeDeployServiceRole --assume-role-policy-document file://CodeDeployDemo-Trust.json
   ```
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

   在命令的輸出中，記下 `Role` 物件下 `Arn` 項目的值。您稍後將需要它來建立部署群組。若您忘記該值，請遵循[取得服務角色 ARN (CLI)](#getting-started-get-service-role-cli) 中的說明。

1. 您使用的受管政策取決於運算平台。
   + 如果您的部署是部署到 EC2/現場部署運算平台：

     呼叫 **attach-role-policy**命令，根據名為 的 IAM 受管政策**CodeDeployServiceRole**，為名為 的服務角色提供許可**AWSCodeDeployRole**。例如：

     ```
     aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole
     ```
   + 如果您的部署是到 AWS Lambda 運算平台：

     呼叫 **attach-role-policy**命令，根據名為 **AWSCodeDeployRoleForLambda**或 的 IAM 受管政策**CodeDeployServiceRole**，為名為 的服務角色提供許可**AWSCodeDeployRoleForLambdaLimited**。例如：

     ```
     aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambda
     ```
   + 如果您的部署是 Amazon ECS 運算平台：

     呼叫 **attach-role-policy**命令，根據名為 **AWSCodeDeployRoleForECS**或 的 IAM 受管政策**CodeDeployServiceRole**，為名為 的服務角色提供許可**AWSCodeDeployRoleForECSLimited**。例如：

     ```
     aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/AWSCodeDeployRoleForECS
     ```

如需建立服務角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[為 AWS 服務建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/create-role-xacct.html)。

## 取得服務角色 ARN （主控台）
<a name="getting-started-get-service-role-console"></a>

若要使用 IAM 主控台取得服務角色的 ARN：

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

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

1. 在 **Filter (篩選條件)** 方塊中，輸入 **CodeDeployServiceRole**，然後按 Enter 鍵。

1. 選擇 **CodeDeployServiceRole**。

1. 記下 **Role ARN (角色 ARN)** 欄位的值。

## 取得服務角色 ARN (CLI)
<a name="getting-started-get-service-role-cli"></a>

若要使用 AWS CLI 取得服務角色的 ARN，請針對名為 的服務角色呼叫 **get-role**命令**CodeDeployServiceRole**：

```
aws iam get-role --role-name CodeDeployServiceRole --query "Role.Arn" --output text
```

傳回的值即為服務角色的 ARN。