

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 步骤 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/create-launch-template.html)和[启动模板支持](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-launch-template-permissions.html)。

对于 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 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**角色**，然后选择**创建角色**。

1. 选择**AWS 服务**，然后在**用例**下的下拉列表中选择**CodeDeploy**。

1. 选择您的使用案例：
   +  对于 EC2/本地部署，请选择。**CodeDeploy**
   +  对于 AWS Lambda 部署，请选择 **CodeDeploy Lambda**。
   +  对于 Amazon ECS 部署，请选择 **CodeDeploy -ECS**。

1. 选择**下一步**。

1. 在**添加权限**页面上，将显示该使用案例的正确权限策略。选择**下一步**。

1. 在**命名、查看和创建**页面上的**角色名称**中，输入服务角色的名称（例如，**CodeDeployServiceRole**），然后选择**创建角色**。

   您还可以在**角色描述**中输入此服务角色的描述。

1. 如果您希望此服务角色有权访问所有当前支持的终端节点，则您已完成了此过程。

   要限制此服务角色访问某些端点，请继续执行此过程中的其余步骤。

1. 在角色列表中搜索并选择您刚刚创建的角色（`CodeDeployServiceRole`）。

1. 选择 **Trust relationships（信任关系）**选项卡。

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://`。此命令中需要该项。

   在命令输出中，记录 `Arn` 对象下方 `Role` 条目的值。稍后创建部署组时将需要它。如果您忘记了值，请按照[获取服务角色 ARN（CLI）](#getting-started-get-service-role-cli)中的说明操作。

1. 您使用的托管策略取决于计算平台。
   + 如果您要部署到 EC2/本地计算平台，请：

     调用 **attach-role-policy** 命令以根据名为 **AWSCodeDeployRole** 的 IAM 托管策略向名为 **CodeDeployServiceRole** 的服务角色授予权限。例如：

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

     调用 **attach-role-policy** 命令以根据名为 **AWSCodeDeployRoleForLambda** 或 **AWSCodeDeployRoleForLambdaLimited** 的 IAM 托管策略向名为 **CodeDeployServiceRole** 的服务角色授予权限。例如：

     ```
     aws iam attach-role-policy --role-name CodeDeployServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambda
     ```
   + 如果您要部署到 Amazon ECS 计算平台，请：

     调用 **attach-role-policy** 命令以根据名为 **AWSCodeDeployRoleForECS** 或 **AWSCodeDeployRoleForECSLimited** 的 IAM 托管策略向名为 **CodeDeployServiceRole** 的服务角色授予权限。例如：

     ```
     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 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**角色**。

1. 在**筛选条件**框中，键入 **CodeDeployServiceRole**，然后按 Enter。

1. 选择 **CodeDeployServiceRole**。

1. 记下 **Role ARN（角色 ARN）**字段的值。

## 获取服务角色 ARN（CLI）
<a name="getting-started-get-service-role-cli"></a>

要使用获取服务角色的 ARN，请对名为的服务角色调用**get-role**命令： AWS CLI **CodeDeployServiceRole**

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

返回值是服务角色的 ARN。