

# Amazon ECS CodeDeploy IAM 角色
<a name="codedeploy_IAM_role"></a>

在将 CodeDeploy 蓝绿部署类型用于 Amazon ECS 之前，CodeDeploy 服务需要获得代表您更新 Amazon ECS 服务的权限。这些权限是由 CodeDeploy IAM 角色（`ecsCodeDeployRole`）提供的。

**注意**  
用户还需要使用 CodeDeploy 的权限；[所需的 IAM 权限](deployment-type-bluegreen.md#deployment-type-bluegreen-IAM) 中介绍了这些权限。

提供了两个托管策略。有关更多信息，请参阅《AWS 托管式策略参考指南》**中的以下章节之一：
+  [AWSCodeDeployRoleForECS](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCodeDeployRoleForECS.html) – 向 Codeploy 授予使用相关操作更新任何资源的权限。
+ [AWSCodeDeployRoleForECSLimited](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCodeDeployRoleForECSLimited.html) – 向 Codeploy 授予更多有限权限。

## 创建 CodeDeploy 角色
<a name="cd-iam-role-create"></a>

您可以使用以下过程为 Amazon ECS 创建 CodeDeploy 角色

------
#### [ AWS 管理控制台 ]

**创建用于 CodeDeploy 的服务角色（IAM 控制台）**

1. 登录 AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在 IAM 控制台的导航窗格中，选择**角色**，然后选择**创建角色**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **AWS 服务**。

1. 对于**服务或使用案例**，请选择 **CodeDeploy**，然后选择 **CodeDeploy：ECS** 使用案例。

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

1. 在**附加权限策略**部分中，确保选择了 **AWSCodeDeployRoleForECS** 策略。

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

1.  对于**在角色名称**，输入 **ecsCodeDeployRole**。

1. 检查该角色，然后选择**创建角色**。

------
#### [ AWS CLI ]

将所有*用户输入*替换为您自己的信息。

1. 创建一个名为 `codedeploy-trust-policy.json` 的文件，其中包含要用于 CodeDeploy IAM 角色的信任策略。

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

****  

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

------

1. 使用上一步中创建的信任策略创建命名为 `ecsCodedeployRole` 的 IAM 角色。

   ```
   aws iam create-role \
         --role-name ecsCodedeployRole \
         --assume-role-policy-document file://codedeploy-trust-policy.json
   ```

1. 将 `AWSCodeDeployRoleForECS` 或 `AWSCodeDeployRoleForECSLimited` 托管策略附加到 `ecsTaskRole` 角色。

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

   ```
   aws iam attach-role-policy \
         --role-name ecsCodedeployRole \
         --policy-arn arn:aws:iam::aws:policy/AWSCodeDeployRoleForECSLimited
   ```

------

当服务中的任务需要某个任务执行角色时，则作为策略，必须为每个任务执行角色或任务角色添加 `iam:PassRole` 权限以覆盖 Codeploy 角色。

### 任务执行角色权限
<a name="cd-iam-role-attach-policy"></a>

当服务中的任务需要某个任务执行角色时，则作为策略，必须为每个任务执行角色或任务角色添加 `iam:PassRole` 权限以覆盖 Codeploy 角色。有关更多信息，请参阅[Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)和[Amazon ECS 任务 IAM 角色](task-iam-roles.md)。然后，将该策略附加到该 CodeDeploy 角色

创建策略

------
#### [ AWS 管理控制台 ]

**使用 JSON 策略编辑器创建策略**

1. 登录AWS 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在左侧的导航窗格中，选择**策略**。

   如果这是您首次选择**策略**，则会显示**欢迎访问托管式策略**页面。选择**开始使用**。

1. 在页面的顶部，选择**创建策略**。

1. 在**策略编辑器**部分，选择 **JSON** 选项。

1. 输入以下 JSON 策略文档：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": ["arn:aws:iam::<aws_account_id>:role/<ecsCodeDeployRole>"]
           }
       ]
   }
   ```

1. 选择**下一步**。
**注意**  
您可以随时在**可视化**和 **JSON** 编辑器选项卡之间切换。不过，如果您进行更改或在**可视化**编辑器中选择**下一步**，IAM 可能会调整策略结构以针对可视化编辑器进行优化。有关更多信息，请参阅*《IAM 用户指南》*中的[调整策略结构](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure)。

1. 在**查看并创建**页面上，为您要创建的策略输入**策略名称**和**描述**（可选）。查看**此策略中定义的权限**以查看策略授予的权限。

1. 选择**创建策略**可保存新策略。

创建策略后，将策略附加到 CodeDeploy 角色。有关如何将策略附加到角色的信息，请参阅《AWS Identity and Access Management 用户指南》中的[更新角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-permissions.html)**。

------
#### [ AWS CLI ]

将所有*用户输入*替换为您自己的信息。

1. 使用以下内容创建名为 `blue-green-iam-passrole.json` 的文件。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": ["arn:aws:iam::*:role/code-deploy-role"],
               "Condition": {
                       "StringEquals": {"iam:PassedToService": "ecs.amazonaws.com"}
               }
           }
       ]
   }
   ```

------

1. 使用以下命令通过 JSON 策略文档文件创建 IAM 策略。

   ```
   aws iam create-policy \
         --policy-name cdTaskExecutionPolicy \
         --policy-document file://blue-green-iam-passrole.json
   ```

1. 使用以下命令检索您创建的 IAM 策略的 ARN。

   ```
   aws iam list-policies --scope Local --query 'Policies[?PolicyName==`cdTaskExecutionPolicy`].Arn'
   ```

1. 使用以下命令将策略附加到 CodeDeploy IAM 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsCodedeployRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/cdTaskExecutionPolicy
   ```

------