

# Amazon Elastic Container Service 的身份和访问管理
身份和访问管理

 

 

Amazon Identity and Access Management（IAM）是一项，Amazon Web Services 服务可以帮助管理员安全地控制对 Amazon 资源的访问。IAM 管理员控制谁可以通过*身份验证*（登录）和*授权*（具有权限）使用 Amazon ECS 资源。IAM 是一项无需额外费用即可使用的。Amazon Web Services 服务

**Topics**
+ [

## 受众
](#security_iam_audience)
+ [

## 使用身份进行身份验证
](#security_iam_authentication)
+ [

## 使用策略管理访问
](#security_iam_access-manage)
+ [

# 如何将 Amazon Elastic Container Service 与 IAM 结合使用
](security_iam_service-with-iam.md)
+ [

# Amazon Elastic Container Service 的基于身份的策略示例
](security_iam_id-based-policy-examples.md)
+ [

# Amazon Elastic Container Service Amazon 托管策略
](security-iam-awsmanpol.md)
+ [

# 对 Amazon ECS 使用服务相关角色
](using-service-linked-roles.md)
+ [

# 适用于 Amazon ECS 的 IAM 角色
](security-ecs-iam-role-overview.md)
+ [

# Amazon ECS 控制台所需的权限
](console-permissions.md)
+ [

# Amazon ECS 蓝绿部署中 Lambda 函数所需的权限
](blue-green-permissions.md)
+ [

# Amazon ECS 服务自动扩缩所需的 IAM 权限
](auto-scaling-IAM.md)
+ [

# 在创建时授予标记资源的权限
](supported-iam-actions-tagging.md)
+ [

# 对 Amazon Elastic Container Service 标识和访问进行故障排除
](security_iam_troubleshoot.md)
+ [

# Amazon ECS 的 IAM 最佳实践
](security-iam-bestpractices.md)

## 受众


您使用 Amazon Identity and Access Management（IAM）的方式因您的角色而异：
+ **服务用户**：如果您无法访问功能，请从管理员处请求权限（请参阅[对 Amazon Elastic Container Service 标识和访问进行故障排除](security_iam_troubleshoot.md)）
+ **服务管理员**：确定用户访问权限并提交权限请求（请参阅[如何将 Amazon Elastic Container Service 与 IAM 结合使用](security_iam_service-with-iam.md)）
+ **IAM 管理员**：编写用于管理访问权限的策略（请参阅[Amazon Elastic Container Service 的基于身份的策略示例](security_iam_id-based-policy-examples.md)）

## 使用身份进行身份验证


身份验证是您使用身份凭证登录 Amazon 的方法。您必须作为 Amazon Web Services 账户根用户、IAM 用户或通过担任 IAM 角色进行身份验证。

对于编程访问，Amazon 提供了 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的 Amazon 签名版本 4](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_sigv.html)。

### Amazon Web Services 账户 根用户


 当您创建 Amazon Web Services 账户 时，最初使用的是一个对所有 Amazon Web Services 服务和资源拥有完全访问权限的登录身份（称为 Amazon Web Services 账户*根用户*）。我们强烈建议不要使用根用户进行日常任务。有关需要根用户凭证的任务，请参阅《IAM 用户指南》**中的[需要根用户凭证的任务](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 联合身份


作为最佳实践，请要求人类用户必须使用带有身份提供者的联合身份验证才能使用临时凭证访问 Amazon Web Services 服务。

*联合身份*是来自企业目录、Web 身份提供者的用户，或 Amazon Directory Service 中的用户（这些用户使用来自身份源的凭证访问 Amazon Web Services 服务）。联合身份代入可提供临时凭证的角色。

### IAM 用户和群组


*[IAM 用户](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅*《IAM 用户指南》*中的[要求人类用户使用带有身份提供商的联合身份验证才能使用临时凭证访问 Amazon](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.amazonaws.cn/IAM/latest/UserGuide/id_groups.html](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.amazonaws.cn/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色


*[IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 Amazon CLI 或 Amazon API 操作来担任角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用策略管理访问


您将创建策略并将其附加到 Amazon 身份或资源，以控制 Amazon 中的访问。策略在与身份或资源关联时定义权限。当主体发出请求时，Amazon 会评估这些策略。大多数策略在 Amazon 中存储为 JSON 文档。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略


基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略


基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用来自 IAM 的 Amazon 托管策略。

### 其他策略类型


Amazon 支持额外的策略类型，这些策略类型可以设置由更常用的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略（SCP）**– 指定 Amazon Organizations 中组织或组织单元的最大权限。有关更多信息，请参阅《Amazon Organizations 用户指南》**中的[服务控制策略](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略（RCP）**– 设置对账户中资源的最大可用权限。有关更多信息，请参阅《Amazon Organizations 用户指南》**中的[资源控制策略（RCP）](https://docs.amazonaws.cn/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型


当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解 Amazon 如何确定在涉及多种策略类型时是否允许请求，请参阅《IAM 用户指南》**中的[策略评估逻辑](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# 如何将 Amazon Elastic Container Service 与 IAM 结合使用


在使用 IAM 管理对 Amazon ECS 的访问权限之前，了解哪些 IAM 功能可用于 Amazon ECS。

 

 


| IAM 功能 | Amazon ECS 支持 | 
| --- | --- | 
|   [基于身份的策略](#security_iam_service-with-iam-id-based-policies)   |   是  | 
|   [基于资源的策略](#security_iam_service-with-iam-resource-based-policies)   |   否   | 
|   [策略操作](#security_iam_service-with-iam-id-based-policies-actions)   |   是  | 
|   [策略资源](#security_iam_service-with-iam-id-based-policies-resources)   |   部分  | 
|   [策略条件键](#security_iam_service-with-iam-id-based-policies-conditionkeys)   |   是  | 
|   [ACL](#security_iam_service-with-iam-acls)   |   否   | 
|   [ABAC（策略中的标签）](#security_iam_service-with-iam-tags)   |   是  | 
|   [临时凭证](#security_iam_service-with-iam-roles-tempcreds)   |   是  | 
|   [转发访问会话（FAS）](#security_iam_service-with-iam-principal-permissions)   |   是  | 
|   [服务角色](#security_iam_service-with-iam-roles-service)   |   是  | 
|   [服务关联角色](#security_iam_service-with-iam-roles-service-linked)   |   是  | 

要大致了解 Amazon ECS 和其它 Amazon 服务如何与大多数 IAM 功能一起使用，请参阅 *IAM 用户指南*中的[与 IAM 一起使用的 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## Amazon ECS 基于身份的策略
基于身份的策略

**支持基于身份的策略：**是

基于身份的策略是可附加到身份（如 IAM 用户、用户组或角色）的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html)。

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。要了解可在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素引用](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html)。

### 适用于 Amazon ECS 的基于身份的策略示例
IAM 策略

 

要查看 Amazon ECS 基于身份的策略的示例，请参阅 [Amazon Elastic Container Service 的基于身份的策略示例](security_iam_id-based-policy-examples.md)。

## Amazon ECS 内基于资源的策略
基于资源的策略

**支持基于资源的策略：**否 

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源，策略定义指定主体可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中[指定主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html)。主体可以包括账户、用户、角色、联合用户或。Amazon Web Services 服务

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## Amazon ECS 的策略操作
策略操作

**支持策略操作：**是

管理员可以使用 Amazon JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。

 

要查看 Amazon ECS 操作的列表，请参阅*服务授权参考*中的 [Amazon Elastic Container Service 定义的操作](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html#amazonelasticcontainerservice-actions-as-permissions)。

Amazon ECS 中的策略操作在操作前面使用以下前缀：

```
ecs
```

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": [
      "ecs:action1",
      "ecs:action2"
         ]
```

 

 

您也可以使用通配符（\$1）指定多个操作。例如，要指定以单词 `Describe` 开头的所有操作，包括以下操作：

```
"Action": "ecs:Describe*"
```

要查看 Amazon ECS 基于身份的策略的示例，请参阅 [Amazon Elastic Container Service 的基于身份的策略示例](security_iam_id-based-policy-examples.md)。

## Amazon ECS 的策略资源
策略资源

**支持策略资源：**部分

管理员可以使用 Amazon JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

要查看 Amazon ECS 资源类型及其 ARN 的列表，请参阅*服务授权参考*中的 [AAmazon Elastic Container Service 定义的资源](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html#amazonelasticcontainerservice-resources-for-iam-policies)。要了解您可以使用哪些操作指定每个资源的 ARN，请参阅 [Amazon Elastic Container Service 定义的操作](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html#amazonelasticcontainerservice-actions-as-permissions)。

 

 

某些 Amazon ECS API 操作支持多个资源。例如，在调用 `DescribeClusters` API 操作时可以引用多个集群。要在单个语句中指定多个资源，请使用逗号分隔 ARN。

```
"Resource": [
      "EXAMPLE-RESOURCE-1",
      "EXAMPLE-RESOURCE-2"
```

例如，Amazon ECS 集群资源具有以下 ARN：

```
arn:${Partition}:ecs:${Region}:${Account}:cluster/${clusterName}
```

要在语句中指定 `my-cluster-1` 和 `my-cluster-2` 集群，请使用以下 ARN：

```
"Resource": [
         "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster-1",
         "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster-2"
```

要指定属于特定账户的所有集群，请使用通配符（\$1）：

```
"Resource": "arn:aws:ecs:us-east-1:123456789012:cluster/*"
```

对于任务定义，您可以指定最新修订版本或特定修订版本。

要指定任务定义的所有修订版，请使用通配符（\$1）：

```
"Resource:arn:${Partition}:ecs:${Region}:${Account}:task-definition/${TaskDefinitionFamilyName}:*"
```

要指定特定的任务定义修订版，请使用 \$1\$1TaskDefinitionRevisionNumber\$1：

```
"Resource:arn:${Partition}:ecs:${Region}:${Account}:task-definition/${TaskDefinitionFamilyName}:${TaskDefinitionRevisionNumber}"
```

要查看 Amazon ECS 基于身份的策略的示例，请参阅 [Amazon Elastic Container Service 的基于身份的策略示例](security_iam_id-based-policy-examples.md)。

## Amazon ECS 的策略条件键
策略条件键

**支持特定于服务的策略条件密钥：**是

管理员可以使用 Amazon JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 Amazon 全局条件键，请参阅《IAM 用户指南》**中的 [Amazon 全局条件上下文键](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

Amazon ECS 支持以下特定于服务的条件键，您可以使用这些键来为 IAM 策略提供精细筛选：


|  条件键  |  说明  |  评估类型  | 
| --- | --- | --- | 
|  aws:RequestTag/\$1\$1TagKey\$1  |  上下文键的格式为 `"aws:RequestTag/tag-key":"tag-value"`，其中 *tag-key* 和 *tag-value* 是标签键值对。 检查 Amazon 请求中是否存在目标键值对。例如，您可以检查请求是否包含标签键 `"Dept"` 并具有 `"Accounting"` 值。  |  字符串  | 
|  aws:ResourceTag/\$1\$1TagKey\$1  |  上下文键的格式为 `"aws:ResourceTag/tag-key":"tag-value"`，其中 *tag-key* 和 *tag-value* 是标签键值对。 检查附加到身份资源（用户或角色）的标签是否与指定的键名称和键值匹配。  |  字符串  | 
|  aws:TagKeys  |  该上下文密钥的格式为 `"aws:TagKeys":"tag-key"`，其中 *tag-key* 是没有值的标签键列表（例如，`["Dept","Cost-Center"]`）。 检查在 Amazon 请求中包含的标签键。  |  字符串  | 
|  ecs:ResourceTag/\$1\$1TagKey\$1  |  上下文键的格式为 `"ecs:ResourceTag/tag-key":"tag-value"`，其中 *tag-key* 和 *tag-value* 是标签键值对。 检查附加到身份资源（用户或角色）的标签是否与指定的键名称和键值匹配。  |  字符串  | 
| ecs:account-setting |  上下文键的格式为 `"ecs:account-setting":"account-setting"`，其中 *account-setting* 是账户设置的名称。  | 字符串 | 
| ecs:auto-assign-public-ip | 上下文密钥已格式化为 "ecs:auto-assign-public-ip":"value"，其中 value- 为“true”或“false”。 | 字符串 | 
|  ecs:capacity-provider  |  上下文键的格式为 `"ecs:capacity-provider":"capacity-provider-arn"`，其中 *capacity-provider-arn* 是容量提供程序的 ARN。  |  ARN，Null  | 
|  ecs:cluster  |  上下文键的格式为 `"ecs:cluster":"cluster-arn"`，其中 *cluster-arn* 是 Amazon ECS 集群的 ARN。  |  ARN，Null  | 
|  ecs:compute-compatability  | 上下文键的格式为 "ecs:compute-compatability":"compatability-type"，其中 compatability-type 为“FARGATE”、“EC2”或 EXTERNAL。 | 字符串 | 
|  ecs:container-instances  |  上下文键的格式为 `"ecs:container-instances":"container-instance-arns"`，其中 *container-instance-arns* 是一个或多个容器实例 ARN。  |  ARN，Null  | 
| ecs:container-name |  上下文密钥已格式化为 `"ecs:container-name":"container-name"`，其中 *container-instance-* 是任务定义中定义的 Amazon ECS 容器的名称。  | 字符串 | 
| ecs:enable-execute-command | 上下文密钥已格式化为 "ecs:enable-execute-command":"value"，其中 value- 为“true”或“false”。 | 字符串 | 
|  ecs:enable-service-connect  |  上下文键的格式为 `"ecs:enable-service-connect":"value"`，其中 *value* 为 `"true"` 或 `"false"`。  |  字符串  | 
|  ecs:enable-ebs-volumes  |  上下文键的格式为 `"ecs:enable-ebs-volumes":"value"`，其中 *value* 为 `"true"` 或 `"false"`。  |  字符串  | 
| ecs:enable-managed-tags |  上下文键的格式为 `"ecs:enable-managed-tags":"value"`，其中 *value* 为 `"true"` 或 `"false"`。  | 字符串 | 
| ecs:enable-vpc-lattice |  上下文键的格式为 `"ecs:vpc-lattice":"value"`，其中 *value* 为 `"true"` 或 `"false"`。  | 字符串 | 
| ecs:fargate-ephemeral-storage-kms-key |  上下文键的格式为 `"ecs:fargate-ephemeral-storage-kms-key":"key"`，其中 *key* 是 Amazon KMS 键的 ID。  | 字符串 | 
|  ecs:namespace  |  上下文键的格式为 `"ecs:namespace":"namespace-arn"`，其中 *namespace-arn* 为 Amazon Cloud Map 命名空间的 ARN。  |  ARN，Null  | 
| ecs:propagate-tags |  上下文键的格式为 `"ecs:propagate-tags":"value"`，其中 *value* 为 `"TASK_DEFINITION"`、`"SERVICE"` 或 `"NONE"`。  | 字符串 | 
|  ecs:service  |  上下文键的格式为 `"ecs:service":"service-arn"`，其中 *service-arn* 是 Amazon ECS 服务的 ARN。  |  ARN，Null  | 
|  ecs:task-definition  |  上下文键的格式为 `"ecs:task-definition":"task-definition-arn"`，其中 *task-definition-arn* 是 Amazon ECS 任务定义的 ARN。  |  ARN，Null  | 
| ecs:subnet |  上下文键的格式为 `"ecs:subnet":"subnets"`，其中 *subnets* 是使用 `awsvpc` 模式的任务或服务的子网。  | 字符串 | 
|  ecs:task  |  上下文键的格式为 `"ecs:task":"task-arn"`，其中 *task-arn* 是 Amazon ECS 服务的 ARN。  |  ARN，Null  | 
| ecs:task-cpu | 上下文键的格式为 "ecs:task-cpu":"task-cpu"，其中 task-cpu 是任务 cpu，为 1024 = 1 vCPU 的整数。 | 整数 | 
| ecs:task-memory | 上下文键的格式为 "ecs:task-memory":"task-memory"，其中 task-memory 是以 MiB 为单位的任务内存。 | 整数 | 

要查看 Amazon ECS 条件键的列表，请参阅*服务授权参考*中的 [Amazon Elastic Container Service 的条件键](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html#amazonelasticcontainerservice-policy-keys)。要了解您可以对哪些操作和资源使用条件键，请参阅 [Amazon Elastic Container Service 定义的操作](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html#amazonelasticcontainerservice-actions-as-permissions)。

要查看 Amazon ECS 基于身份的策略的示例，请参阅 [Amazon Elastic Container Service 的基于身份的策略示例](security_iam_id-based-policy-examples.md)。

## Amazon ECS 中的访问控制列表（ACL）
ACL

**支持 ACL：**否 

访问控制列表（ACL）控制哪些主体（账户成员、用户或角色）有权访问资源。ACL 与基于资源的策略类似，但它们不使用 JSON 策略文档格式。

## 使用 Amazon ECS 的基于属性的访问权限控制（ABAC）
ABAC

**重要**  
Amazon ECS 支持对所有 Amazon ECS 资源进行基于属性的访问权限控制。要确定是否可以使用属性来确定操作的范围，请使用《服务授权参考》**中的[由 Amazon ECS 定义的操作](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html#amazonelasticcontainerservice-actions-as-permissions)表。首先验证**资源**列中是否有资源。然后，使用**条件键**列查看操作/资源组合的键。

**支持 ABAC（策略中的标签）：**是

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于称为标签的属性来定义权限。您可以将标签附加到 IAM 实体和 Amazon 资源，然后设计 ABAC 策略，以支持在主体的标签与资源上的标签匹配时执行操作。

要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。

如果某个服务对于每种资源类型都支持所有这三个条件键，则对于该服务，该值为**是**。如果某个服务仅对于部分资源类型支持所有这三个条件键，则该值为**部分**。

有关 ABAC 的更多信息，请参阅《IAM 用户指南》**中的[使用 ABAC 授权定义权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。要查看设置 ABAC 步骤的教程，请参阅《IAM 用户指南》**中的[使用基于属性的访问权限控制（ABAC）](https://docs.amazonaws.cn/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

有关标记 Amazon ECS 资源的更多信息，请参阅 [为 Amazon ECS 资源添加标签](ecs-using-tags.md)。

要查看基于身份的策略（用于根据资源上的标签来限制对该资源的访问）的示例，请参阅 [基于标签描述 Amazon ECS 服务](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-view-cluster-tags)。

## 将临时凭证用于 Amazon ECS
临时凭证

**支持临时凭证：**是

临时凭证提供对 Amazon 资源的短期访问权限，并且是在您使用联合身份验证或切换角色时自动创建的。Amazon 建议您动态生成临时凭证，而不是使用长期访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的临时安全凭证](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_temp.html)和[使用 IAM 的。Amazon Web Services 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)

## Amazon ECS 的转发访问会话
主体权限

**支持转发访问会话（FAS）：**是

 转发访问会话（FAS）使用调用 Amazon Web Services 服务 的主体的权限，与发出请求的 Amazon Web Services 服务 结合，向下游服务发出请求。有关发出 FAS 请求时的策略详情，请参阅[转发访问会话](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_forward_access_sessions.html)。

## Amazon ECS 的服务角色
服务角色

**支持服务角色：**是

 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 Amazon Web Services 服务 委派权限的角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
更改服务角色的权限可能会破坏 Amazon ECS 的功能。仅当 Amazon ECS 提供相关指导时才编辑服务角色。

## Amazon ECS 的服务相关角色
服务关联角色

**支持服务相关角色：**是

 服务关联角色是一种与 Amazon Web Services 服务 关联的服务角色。服务可以代入代表您执行操作的角色。服务关联角色显示在您的 Amazon Web Services 账户 中，并由该服务拥有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

有关创建或管理 Amazon ECS 服务相关角色的详细信息，请参阅 [对 Amazon ECS 使用服务相关角色](using-service-linked-roles.md)。

# Amazon Elastic Container Service 的基于身份的策略示例
基于身份的策略示例

默认情况下，用户和角色没有创建或修改 Amazon ECS 资源的权限。要授予用户对所需资源执行操作的权限，IAM 管理员可以创建 IAM 策略。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create-console.html)。

有关 Amazon ECS 定义的操作和资源类型的详细信息，包括每种资源类型的 ARN 格式，请参阅*服务授权参考*中的 [Amazon Elastic Container Service 的操作、资源和条件键](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)。

**Topics**
+ [

## Amazon ECS 的策略最佳实践
](#security_iam_service-with-iam-policy-best-practices)
+ [

## 允许 Amazon ECS 用户查看他们自己的权限
](#security_iam_id-based-policy-examples-view-own-permissions)
+ [

## Amazon ECS 集群示例
](#IAM_cluster_policies)
+ [

## Amazon ECS 容器实例示例
](#IAM_container_instance_policies)
+ [

## Amazon ECS 任务定义示例
](#IAM_task_definition_policies)
+ [

## 运行 Amazon ECS 任务示例
](#IAM_run_policies)
+ [

## 启动 Amazon ECS 任务示例
](#IAM_start_policies)
+ [

## 列出并描述 Amazon ECS 任务示例
](#IAM_task_policies)
+ [

## 创建 Amazon ECS 服务示例
](#IAM_create_service_policies)
+ [

## 基于标签描述 Amazon ECS 服务
](#security_iam_id-based-policy-examples-view-cluster-tags)
+ [

## 拒绝 Amazon ECS Service Connect 命名空间覆盖示例
](#IAM_disable_namespace_override_policies)

## Amazon ECS 的策略最佳实践


基于身份的策略确定某个人是否可以创建、访问或删除您账户中的 Amazon ECS 资源。这些操作可能会使 Amazon Web Services 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **Amazon 托管式策略及转向最低权限许可入门**：要开始向用户和工作负载授予权限，请使用 *Amazon 托管式策略*来为许多常见使用场景授予权限。您可以在 Amazon Web Services 账户 中找到这些策略。建议通过定义特定于您的使用场景的 Amazon 客户托管式策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [Amazon 托管策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的 Amazon 托管策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果通过特定 Amazon Web Services 服务（例如 Amazon CloudFormation）使用服务操作，您还可以使用条件来授予对服务操作的访问权限。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证（MFA）**：如果您所处的场景要求您的 Amazon Web Services 账户 中有 IAM 用户或根用户，请启用 MFA 来提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.amazonaws.cn/IAM/latest/UserGuide/best-practices.html)。

## 允许 Amazon ECS 用户查看他们自己的权限


该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上完成此操作或者以编程方式使用 Amazon CLI 或 Amazon API 所需的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## Amazon ECS 集群示例


以下 IAM 策略授予创建和列出集群所需的权限。`CreateCluster` 和 `ListClusters` 操作不接受任何资源，因此，所有资源的资源定义将设置为 `*`。

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:CreateCluster",
                "ecs:ListClusters"
            ],
            "Resource": "*"
        }
    ]
}
```

------

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:DescribeClusters",
                "ecs:DeleteCluster"
            ],
            "Resource": ["arn:aws:ecs:us-east-1:123456789012:cluster/cluster-name"]
        }
    ]
}
```

------

以下 IAM 策略授予描述和删除特定集群所需的权限。`DescribeClusters` 和 `DeleteCluster` 操作将集群 ARN 接受为资源。

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

****  

```
{
    "Statement": [
        {
            "Action": [
                "ecs:Describe*",
                "ecs:List*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ecs:DeleteCluster",
                "ecs:DeregisterContainerInstance",
                "ecs:ListContainerInstances",
                "ecs:RegisterContainerInstance",
                "ecs:SubmitContainerStateChange",
                "ecs:SubmitTaskStateChange"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:ecs:us-east-1:123456789012:cluster/default"
        },
        {
            "Action": [
                "ecs:DescribeContainerInstances",
                "ecs:DescribeTasks",
                "ecs:ListTasks",
                "ecs:UpdateContainerAgent",
                "ecs:StartTask",
                "ecs:StopTask",
                "ecs:RunTask"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "ArnEquals": {"ecs:cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/default"}
            }
        }
    ]
}
```

------

以下 IAM 策略可附加到用户或组，该策略仅允许用户或组对特定集群执行操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ecs:Describe*",
                "ecs:List*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ecs:DeleteCluster",
                "ecs:DeregisterContainerInstance",
                "ecs:ListContainerInstances",
                "ecs:RegisterContainerInstance",
                "ecs:SubmitContainerStateChange",
                "ecs:SubmitTaskStateChange"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:ecs:us-east-1:111122223333:cluster/default"
        },
        {
            "Action": [
                "ecs:DescribeContainerInstances",
                "ecs:DescribeTasks",
                "ecs:ListTasks",
                "ecs:UpdateContainerAgent",
                "ecs:StartTask",
                "ecs:StopTask",
                "ecs:RunTask"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "ArnEquals": {"ecs:cluster": "arn:aws:ecs:us-east-1:111122223333:cluster/default"}
            }
        }
    ]
}
```

------

## Amazon ECS 容器实例示例


虽然容器实例注册由 Amazon ECS 代理处理，但有时您可能需要允许用户从集群中手动注销实例。容器实例可能已意外注册到错误的集群，或者实例已终止，但仍有任务在其上运行。

以下 IAM 策略可让用户列出并注销指定集群中的容器类型：

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:DeregisterContainerInstance",
                "ecs:ListContainerInstances"
            ],
            "Resource": "arn:aws:ecs:us-east-1:123456789012:cluster/cluster_name"
        }
    ]
}
```

------

## Amazon ECS 任务定义示例


任务定义 IAM 策略不支持资源级权限，但以下 IAM 策略可让用户注册、列出和描述任务定义：

如果您使用控制台，则必须添加 `CloudFormation: CreateStack` 作为 `Action`。

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:RegisterTaskDefinition",
                "ecs:ListTaskDefinitions",
                "ecs:DescribeTaskDefinition"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 运行 Amazon ECS 任务示例


任务定义是 `RunTask` 的资源。要限制用户可在其上运行任务定义的集群，您可以在 `Condition` 数据块中指定这些集群。这样做的好处是，您不必在资源中列出任务定义和集群以允许适当的访问。您可以应用任务定义和/或集群。

以下 IAM 策略授予在特定集群上运行特定任务定义的任意修订的权限：

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["ecs:RunTask"],
            "Condition": {
                "ArnEquals": {"ecs:cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/cluster_name"}
            },
            "Resource": ["arn:aws:ecs:us-east-1:123456789012:task-definition/task_family:*"]
        }
    ]
}
```

------

## 启动 Amazon ECS 任务示例


任务定义是 `StartTask` 的资源。要限制用户可在其中启动任务定义的集群和容器实例，您可以在 `Condition` 数据块中指定它们。这样做的好处是，您不必在资源中列出任务定义和集群以允许适当的访问。您可以应用任务定义和/或集群。

以下 IAM 策略授予在特定集群和特定容器实例上开始对特定任务定义进行任意修订的权限。

**注意**  
在本示例中，在通过 Amazon CLI 或其他 Amazon 开发工具包调用 `StartTask` API 时，必须指定任务定义修订，以便 `Resource` 映射匹配。

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["ecs:StartTask"],
            "Condition": {
                "ArnEquals": {
                    "ecs:cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/cluster_name",
                    "ecs:container-instances": ["arn:aws:ecs:us-east-1:123456789012:container-instance/cluster_name/container_instance_UUID"]
                }
            },
            "Resource": ["arn:aws:ecs:us-east-1:123456789012:task-definition/task_family:*"]
        }
    ]
}
```

------

## 列出并描述 Amazon ECS 任务示例


以下 IAM 策略可让用户描述指定集群中的指定任务：

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

****  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["ecs:DescribeTasks"],
            "Condition": {
                "ArnEquals": {"ecs:cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/cluster_name"}
            },
            "Resource": ["arn:aws:ecs:us-east-1:123456789012:task/cluster_name/task_UUID"]
        }
    ]
}
```

------

## 创建 Amazon ECS 服务示例


以下 IAM 策略可让用户在 Amazon Web Services 管理控制台 中创建 Amazon ECS 服务：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "application-autoscaling:Describe*",
                "application-autoscaling:PutScalingPolicy",
                "application-autoscaling:RegisterScalableTarget",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:PutMetricAlarm",
                "ecs:List*",
                "ecs:Describe*",
                "ecs:CreateService",
                "elasticloadbalancing:Describe*",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:ListAttachedRolePolicies",
                "iam:ListRoles",
                "iam:ListGroups",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 基于标签描述 Amazon ECS 服务


您可以在基于身份的策略中使用条件，以便基于标签控制对 Amazon ECS 资源的访问。此示例显示如何创建允许描述服务的策略。但是，仅当服务标签 `Owner` 具有该用户的用户名的值时，才授予此权限。此策略还授予在控制台上完成此操作的必要权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DescribeServices",
            "Effect": "Allow",
            "Action": "ecs:DescribeServices",
            "Resource": "*"
        },
        {
            "Sid": "ViewServiceIfOwner",
            "Effect": "Allow",
            "Action": "ecs:DescribeServices",
            "Resource": "arn:aws:ecs:*:*:service/*",
            "Condition": {
                "StringEquals": {"ecs:ResourceTag/Owner": "${aws:username}"}
            }
        }
    ]
}
```

------

您可以将该策略附加到您账户中的 IAM 用户。如果名为 `richard-roe` 的用户尝试描述 Amazon ECS 服务，则服务必须标记为 `Owner=richard-roe` 或 `owner=richard-roe`。否则，将拒绝其访问。条件标签键 `Owner` 匹配 `Owner` 和 `owner`，因为条件键名称不区分大小写。有关更多信息，请参阅 *IAM 用户指南* 中的 [IAM JSON 策略元素：条件](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition.html)。

## 拒绝 Amazon ECS Service Connect 命名空间覆盖示例


以下 IAM 策略拒绝用户覆盖服务配置中的默认 Service Connect 命名空间。默认命名空间在集群中设置。然而，您可以在服务配置中将其覆盖。为了保持一致性，可以考虑将所有新服务设置为使用相同的命名空间。使用以下上下文键要求服务使用特定的命名空间。在以下示例中，将 `<region>`、`<aws_account_id>`、`<cluster_name>` 和 `<namespace_id>` 替换为自己的内容。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:CreateService",
                "ecs:UpdateService"
            ],
            "Condition": {
                "ArnEquals": {
                    "ecs:cluster": "arn:aws:ecs:us-east-1:123456789012:cluster/cluster_name",
                    "ecs:namespace": "arn:aws:servicediscovery:us-east-1:123456789012:namespace/namespace_id"
                }
            },
            "Resource": "*"
        }
    ]
}
```

------

 

 

 

# Amazon Elastic Container Service Amazon 托管策略
Amazon ECS 的 Amazon 托管式策略

要向用户、组和角色添加权限，与自己编写策略相比，使用 Amazon 托管式策略更简单。创建仅为团队提供所需权限的 [IAM 客户管理型策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create-console.html)需要时间和专业知识。要快速入门，您可以使用我们的 Amazon 托管式策略。这些策略涵盖常见使用案例，可在您的 Amazon 账户中使用。有关 Amazon 托管式策略的更多信息，请参阅《IAM 用户指南》**中的 [Amazon 托管式策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

Amazon 服务负责维护和更新 Amazon 托管式策略。您无法更改 Amazon 托管式策略中的权限。服务偶尔会向 Amazon 托管式策略添加额外权限以支持新特征。此类更新会影响附加策略的所有身份（用户、组和角色）。当启动新特征或新操作可用时，服务最有可能会更新 Amazon 托管式策略。服务不会从 Amazon 托管式策略中删除权限，因此策略更新不会破坏您的现有权限。

此外，Amazon 还支持跨多种服务的工作职能的托管式策略。例如，**ReadOnlyAccess** Amazon 托管式策略提供对所有 Amazon 服务和资源的只读访问权限。当服务启动新特征时，Amazon 会为新操作和资源添加只读权限。有关工作职能策略的列表和说明，请参阅 *IAM 用户指南*中的[适用于工作职能的 Amazon 托管式策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_job-functions.html)。

Amazon ECS 和 Amazon ECR 提供了一些托管策略和信任关系，您可以将它们附加到用户、组、角色、Amazon EC2 实例和 Amazon ECS 任务，以实现对资源和 API 操作的不同级别的控制。您可以直接应用这些策略，或者也可以使用它们作为自行创建策略的起点。有关 Amazon ECR 托管策略的更多信息，请参阅 [Amazon ECR 托管策略](https://docs.amazonaws.cn/AmazonECR/latest/userguide/ecr_managed_policies.html)。

## AmazonECS\$1FullAccess
AmazonECS\$1FullAccess

您可以将 `AmazonECS_FullAccess` 策略附加到 IAM 身份。此策略授予对 Amazon ECS 资源的管理访问权限，并授予 IAM 身份（如用户、组或角色）访问 Amazon 服务，以使用 Amazon ECS 的所有功能。使用此策略可以访问 Amazon Web Services 管理控制台 中提供的所有 Amazon ECS 功能。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECS\$1FullAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECS_FullAccess.html)。

## AmazonECSInfrastructureRolePolicyForVolumes


您可以将 `AmazonECSInfrastructureRolePolicyForVolumes` 托管式策略附加到您的 IAM 实体。

此策略授予 Amazon ECS 代表您进行 Amazon API 调用所需的权限。您可以将此策略附加到启动 Amazon ECS 任务和服务时随卷配置提供的 IAM 角色。该角色允许 Amazon ECS 管理附加到任务的卷。有关更多信息，请参阅 [Amazon ECS 基础设施 IAM 角色](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/infrastructure_IAM_role.html)。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECSInfrastructureRolePolicyForVolumes](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForVolumes.html)。

## AmazonEC2ContainerServiceforEC2Role


您可以将 `AmazonEC2ContainerServiceforEC2Role` 策略附加到 IAM 身份。此策略授予允许Amazon ECS容器实例代表您调用 Amazon 的管理权限。有关更多信息，请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。

Amazon ECS 将此策略附加到服务角色，该角色允许 Amazon ECS 代表您对 Amazon EC2 实例或外部实例执行操作。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonEC2ContainerServiceforEC2Role](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonEC2ContainerServiceforEC2Role.html)。

### 注意事项


您应注意以下建议和注意事项，使用 `AmazonEC2ContainerServiceforEC2Role` 托管 IAM 策略。
+ 遵循授予最低权限的标准安全建议，您可以修改 `AmazonEC2ContainerServiceforEC2Role` 托管策略，以满足您的特定需求。如果您的使用案例不需要托管策略中授予的任何权限，请创建自定义策略并仅添加所需的权限。例如，为竞价型实例耗尽提供 `UpdateContainerInstancesState` 权限。如果您的使用案例不需要该权限，请使用自定义策略将其排除。
+ 在您的容器实例上运行的容器有权获得通过[实例元数据](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)提供给容器实例角色的所有权限。建议您将容器实例角色中的权限限制在托管 `AmazonEC2ContainerServiceforEC2Role` 策略中提供的最低权限列表的范围内。如果您的任务中的容器需要此处未列出的其他权限，建议您为这些任务提供其自己的 IAM 角色。有关更多信息，请参阅 [Amazon ECS 任务 IAM 角色](task-iam-roles.md)。

  您可以防止在 `docker0` 网桥访问提供给容器实例角色的权限。您可以在仍然允许通过在容器实例上运行以下命令 [Amazon ECS 任务 IAM 角色](task-iam-roles.md) 提供的权限的情况下执行 **iptables** 此操作。容器无法查询此规则生效的实例元数据。此命令采用原定设置 Docker 网桥配置，它不适用于使用 `host` 网络模式的容器。有关更多信息，请参阅 [网络模式](task_definition_parameters.md#network_mode)。

  ```
  sudo yum install -y iptables-services; sudo iptables --insert DOCKER USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
  ```

  您必须将此 **iptables** 规则保存到容器实例上，使其在重启后仍然可用。对于经 Amazon ECS 优化的 AMI，请使用以下命令。对于其他操作系统，请参阅该操作系统的相关文档。
  + 对于经 Amazon ECS 优化的 Amazon Linux 2 AMI：

    ```
    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
    ```
  + 对于经 Amazon ECS 优化的 Amazon Linux AMI：

    ```
    sudo service iptables save
    ```

## AmazonEC2ContainerServiceEventsRole


您可以将 `AmazonEC2ContainerServiceEventsRole` 策略附加到 IAM 身份。此策略授予允许 Amazon EventBridge（以前的 CloudWatch Events）代表您运行任务的权限。此策略可附加到创建计划任务时指定的 IAM 角色。有关更多信息，请参阅 [Amazon ECS EventBridge IAM 角色](CWE_IAM_role.md)。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonEC2ContainerServiceEventsRole](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonEC2ContainerServiceEventsRole.html)。

## AmazonECSTaskExecutionRolePolicy


`AmazonECSTaskExecutionRolePolicy` 托管 IAM 策略授予 Amazon ECS 容器代理和 Amazon Fargate 要创建的容器代理代表您调用 Amazon API。此策略可添加到您的任务执行 IAM 角色中。有关更多信息，请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECSTaskExecutionRolePolicy](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSTaskExecutionRolePolicy.html)。

## AmazonECSServiceRolePolicy


`AmazonECSServiceRolePolicy` 托管 IAM 策略使 Amazon Elastic Container Service 能够管理您的集群。可以将此策略添加到 [AWSServiceRoleForECS](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/using-service-linked-roles-for-clusters.html#service-linked-role-permissions-clusters) 服务相关角色。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSServiceRolePolicy.html)。

## `AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity`


可以将 `AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity` 策略附加到您的 IAM 实体。此策略授予代表您管理 Amazon ECS Service Connect TLS 功能所需的对 Amazon 私有证书颁发机构、Secrets Manager 和其他 Amazon 服务的管理权限。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity.html)。

## `AWSApplicationAutoscalingECSServicePolicy`


您不能将 `AWSApplicationAutoscalingECSServicePolicy` 附加到自己的 IAM 实体。此策略附加到服务链接角色，该角色允许 Application Auto Scaling 以代表您执行操作。有关更多信息，请参阅 [Application Auto Scaling 服务相关角色](https://docs.amazonaws.cn/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AWSApplicationAutoscalingECSServicePolicy](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AWSApplicationAutoscalingECSServicePolicy.html)。

## `AWSCodeDeployRoleForECS`


您不能将 `AWSCodeDeployRoleForECS` 附加到自己的 IAM 实体。此策略附加到服务链接角色，该角色允许 CodeDeploy 代表您执行操作。有关更多信息，请参阅 *Amazon CodeDeploy 用户指南*中的[为 CodeDeploy 创建服务角色](https://docs.amazonaws.cn/codedeploy/latest/userguide/getting-started-create-service-role.html)。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AWSCodeDeployRoleForECS](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AWSCodeDeployRoleForECS.html)。

## `AWSCodeDeployRoleForECSLimited`


您不能将 `AWSCodeDeployRoleForECSLimited` 附加到自己的 IAM 实体。此策略附加到服务链接角色，该角色允许 CodeDeploy 代表您执行操作。有关更多信息，请参阅 *Amazon CodeDeploy 用户指南*中的[为 CodeDeploy 创建服务角色](https://docs.amazonaws.cn/codedeploy/latest/userguide/getting-started-create-service-role.html)。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AWSCodeDeployRoleForECSLimited](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AWSCodeDeployRoleForECSLimited.html)。

## `AmazonECSInfrastructureRolePolicyForLoadBalancers`


可以将 `AmazonECSInfrastructureRolePolicyForLoadBalancers` 策略附加到您的 IAM 实体。此策略授予相关权限，允许 Amazon ECS 代表您管理 Elastic Load Balancing 资源。策略包括：
+ 描述侦听器、规则、目标组和目标运行状况的只读权限
+ 在目标组中注册和取消注册目标的权限
+ 修改应用程序负载均衡器和网络负载均衡器的侦听器的权限
+ 修改应用程序负载均衡器规则的权限

这些权限让 Amazon ECS 能够在创建或更新服务时自动管理负载均衡器配置，从而确保将流量正确路由到您的容器。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECSInfrastructureRolePolicyForLoadBalancers](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForLoadBalancers.html)。

## `AmazonECSInfrastructureRolePolicyForManagedInstances`


可以将 `AmazonECSInfrastructureRolePolicyForManagedInstances` 策略附加到您的 IAM 实体。此策略授予 Amazon ECS 代表您创建和更新 ECS 托管实例的 Amazon EC2 资源所需的权限。策略包括：
+ 为托管实例创建和管理 Amazon EC2 启动模板所需的权限
+ 使用 CreateFleet 和 RunInstances 预置 Amazon EC2 实例所需的权限
+ 创建和管理由 ECS 创建的 Amazon EC2 资源上的标签所需的权限
+ 向 Amazon EC2 实例传递 IAM 角色以用于托管实例所需的权限
+ 为 Amazon EC2 竞价型实例创建服务相关角色所需的权限
+ 用于描述 Amazon EC2 资源的只读权限，包括实例、实例类型、启动模板、网络接口、可用区、安全组、子网、VPC、EC2 映像和容量预留
+ 列出 Amazon ResourceGroups 资源的只读权限，这需要获取标记资源和列出 Amazon CloudFormation 堆栈资源的底层权限

这些权限使 Amazon ECS 能够自动为您的 ECS 托管实例预置和管理 Amazon EC2 实例，从而确保对底层计算资源进行正确的配置和生命周期管理。

要查看此策略的权限，请参阅《Amazon 托管式策略参考》**中的 [AmazonECSInfrastructureRolePolicyForManagedInstances](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForManagedInstances.html)。

## `AmazonECSInfrastructureRolePolicyForVpcLattice`


可以将 `AmazonECSInfrastructureRolePolicyForVpcLattice` 策略附加到您的 IAM 实体。此策略提供代表您管理 Amazon ECS 工作负载中的 VPC Lattice 功能所需的对其他 Amazon 服务资源的访问权限。

要查看此策略的权限，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECSInfrastructureRolePolicyForVpcLattice](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForVpcLattice.html)。

提供代表您管理 Amazon ECS 工作负载中的 VPC Lattice 功能所需的对其他 Amazon 服务资源的访问权限。

## `AmazonECSInfrastructureRoleforExpressGatewayServices`


可以将 `AmazonECSInfrastructureRoleforExpressGatewayServices` 策略附加到您的 IAM 实体。此策略授予 Amazon ECS 代表您使用 Express Services 创建和更新 Web 应用程序所需的权限。策略包括：
+ 为 Amazon ECS Application Auto Scaling 创建服务相关角色所需的权限
+ 创建、修改和删除应用程序负载均衡器、侦听器、规则和目标组所需的权限
+ 为 ECS 管理的资源创建、修改和删除 VPC 安全组所需的权限
+ 通过 ACM 请求、管理和删除 SSL/TLS 证书所需的权限
+ 为 Amazon ECS 服务配置 Application Auto Scaling 策略和目标所需的权限
+ 为自动扩缩触发器创建和管理 CloudWatch 警报所需的权限
+ 用于描述负载均衡器、VPC 资源、证书、自动扩缩配置和 CloudWatch 警报的只读权限

这些权限使 Amazon ECS 能够自动预置和管理 Express Services Web 应用程序所需的基础设施组件，包括负载均衡、安全组、SSL 证书和自动扩缩配置。

要查看此策略的权限，请参阅《Amazon 托管式策略参考》**中的 [AmazonECSInfrastructureRoleforExpressGatewayServices](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRoleforExpressGatewayServices.html)。

## `AmazonECSComputeServiceRolePolicy`


`AmazonECSComputeServiceRolePolicy` 策略附加到 AmazonECSComputeServiceRole 服务相关角色。有关更多信息，请参阅 [使用角色管理 Amazon ECS 托管实例](using-service-linked-roles-instances.md)。

此策略包含允许 Amazon ECS 完成以下任务的权限：
+ Amazon ECS 可以描述和删除启动模板。
+  Amazon ECS 可以描述和删除启动模板版本。
+ Amazon ECS 可以终止实例。
+ Amazon ECS 可以描述下面的实例数据参数：
  + 实例
  + 实例网络接口：Amazon ECS 可以描述以管理 EC2 实例生命周期。
  + 实例事件窗口：Amazon ECS 可以描述事件窗口信息，以确定是否可以中断工作流来修补实例。
  + 实例状态：Amazon ECS 可以描述实例状态，以便监控实例运行状况。

要查看此策略的权限，请参阅《Amazon 托管式策略参考》**中的 [AmazonECSComputeServiceRolePolicy](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSComputeServiceRolePolicy.html)。

## `AmazonECSInstanceRolePolicyForManagedInstances`


`AmazonECSInstanceRolePolicyForManagedInstances` 策略提供 Amazon ECS 托管实例向 Amazon ECS 集群注册并与 Amazon ECS 服务通信所需的权限。

此策略包含允许 Amazon ECS 托管实例完成以下任务的权限：
+ 向 Amazon ECS 集群注册和注销。
+ 提交容器实例状态更改。
+ 提交任务状态更改。
+ 发现 Amazon ECS 代理的轮询端点。

要查看此策略的权限，请参阅《Amazon 托管式策略参考》**中的 [AmazonECSInstanceRolePolicyForManagedInstances](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInstanceRolePolicyForManagedInstances.html)。

## Amazon ECS 更新为 Amazon 托管策略
策略更新

查看自此服务开始跟踪这些更改以来 Amazon ECS Amazon 托管策略更新的详细信息。有关此页面更改的自动提示，请订阅 Amazon ECS 文档历史记录页面上的 RSS 源。

 


| 更改 | 描述 | 日期 | 
| --- | --- | --- | 
|   更新 `AmazonECSInfrastructureRolePolicyForManagedInstances` 策略   |  `AmazonECSInfrastructureRolePolicyForManagedInstances` 策略已更新，增加了以下权限，以支持 Amazon ECS 托管实例上的容量预留：[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html)  | 2026 年 2 月 24 日 | 
|  将权限添加到 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSServiceRolePolicy)。  | AmazonECSServiceRolePolicy 托管式 IAM 策略已更新为包含 ssmmessages:OpenDataChannel 权限。此权限允许 Amazon ECS 为 ECS Exec 会话打开数据通道。 | 2026 年 1 月 20 日 | 
|   更新 `AmazonECSInfrastructureRolePolicyForManagedInstances` 策略   |  `AmazonECSInfrastructureRolePolicyForManagedInstances` 策略已更新以修改 `CreateFleet` 权限。由于以下原因，已移除子网、安全组和 EC2 映像的基于资源的条件：[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html) 此更改确保策略在缺少预期 ECS 管理标签的资源中正常运行。  | 2025 年 12 月 15 日 | 
|  将权限添加到 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSServiceRolePolicy)。  | AmazonECSServiceRolePolicy 托管 IAM 策略已更新，新增了 Amazon EC2 权限，允许 Amazon ECS 获取与事件窗口关联的服务和集群的 Amazon EC2 事件窗口。 | 2025 年 11 月 20 日 | 
|  将权限添加到 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSServiceRolePolicy)。  | AmazonECSServiceRolePolicy 托管 IAM 策略已更新，新增了 Amazon EC2 权限，允许 Amazon ECS 预置和取消预置任务 ENI。 | 2025 年 11 月 14 日 | 
|  更新 [AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity) 策略   | 更新了 AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity 托管 IAM 策略，将 secretsmanager:DescribeSecret 权限分离到其自己的策略语句中。该权限继续将 Amazon ECS 访问权限限定为 Amazon ECS 创建的密钥，并使用 ARN 模式匹配而不是资源标签进行范围界定。这使得 Amazon ECS 能够在密钥的整个生命周期内监控密钥状态，包括密钥何时被删除。 | 2025 年 11 月 13 日 | 
|  增加新的 [`AmazonECSInfrastructureRoleforExpressGatewayServices`](#security-iam-awsmanpol-AmazonECSInfrastructureRoleforExpressGatewayServices)  | 添加了新的 AmazonECSInfrastructureRoleforExpressGatewayServices 策略，其提供 Amazon ECS 访问权限，以使用 Express Services 创建和管理 Web 应用程序。 | 2025 年 11 月 21 日 | 
|  增加新的 [`AmazonECSInstanceRolePolicyForManagedInstances`](#security-iam-awsmanpol-AmazonECSInstanceRolePolicyForManagedInstances)  | 添加了新的 AmazonECSInstanceRolePolicyForManagedInstances 策略，该策略为 Amazon ECS 托管实例提供向 Amazon ECS 集群注册的权限。 | 2025 年 9 月 30 日 | 
|  增加新的 [`AmazonECSInfrastructureRolePolicyForManagedInstances`](#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForManagedInstances)  | 添加了新的 AmazonECSInfrastructureRolePolicyForManagedInstances 策略，该策略为 Amazon ECS 提供创建和管理 Amazon EC2 托管资源的权限。 | 2025 年 9 月 30 日 | 
|  添加新的 [AmazonECSComputeServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSComputeServiceRolePolicy)  | 允许 Amazon ECS 管理您的 Amazon ECS 托管实例和相关资源。 | 2025 年 8 月 31 日 | 
|  向 [AmazonEC2ContainerServiceforEC2Role](#security-iam-awsmanpol-AmazonEC2ContainerServiceforEC2Role) 添加权限   | AmazonEC2ContainerServiceforEC2Role 托管式 IAM 策略已更新为包含 ecs:ListTagsForResource 权限。此权限允许 Amazon ECS 代理通过任务元数据端点（\$1\$1ECS\$1CONTAINER\$1METADATA\$1URI\$1V4\$1/taskWithTags）检索任务和容器实例标签。 | 2025 年 8 月 4 日 | 
|  将权限添加到 [AmazonECSInfrastructureRolePolicyForLoadBalancers](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForLoadBalancers)。  | AmazonECSInfrastructureRolePolicyForLoadBalancers 托管式 IAM 策略已更新，增加了描述、取消注册和注册目标组的新权限。 | 2025 年 7 月 25 日 | 
|  添加新的 [`AmazonECSInfrastructureRolePolicyForLoadBalancers`](#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForLoadBalancers) 策略  |  添加了新的 AmazonecsInfrastructureRolePolicyforLoadBalancers 策略，该策略允许访问管理与 Amazon ECS 工作负载关联的负载均衡器所需的其他 Amazon 服务资源。  | 2025 年 7 月 15 日 | 
|  将权限添加到 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSServiceRolePolicy)。  | 更新了 AmazonECSServiceRolePolicy 托管式 IAM 策略，增加了新的 Amazon Cloud Map 权限，从而让 Amazon ECS 可以为由 Amazon ECS 管理的服务更新 Amazon Cloud Map 服务属性。 | 2025 年 7 月 15 日 | 
|  将权限添加到 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSServiceRolePolicy)  | 更新了 AmazonECSServiceRolePolicy 托管式 IAM 策略，增加了新的 Amazon Cloud Map 权限，从而让 Amazon ECS 可以为由 Amazon ECS 管理的服务更新 Amazon Cloud Map 服务属性。 | 2025 年 6 月 24 日 | 
|  增加了 [AmazonECSInfrastructureRolePolicyForVolumes](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForVolumes) 的权限  | AmazonECSInfrastructureRolePolicyForVolumes 策略已更新以添加 ec2:DescribeInstances 权限。该权限有助于防止附加到在同一容器实例上运行的 Amazon ECS 任务的 Amazon EBS 卷发生设备名称冲突。 | 2025 年 6 月 2 日 | 
|  添加新的 [AmazonECSInfrastructureRolePolicyForVpcLattice](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForVpcLattice)  | 提供代表您管理 Amazon ECS 工作负载中的 VPC Lattice 功能所需的对其他 Amazon 服务资源的访问权限。 | 2024 年 11 月 18 日 | 
|  增加了 [AmazonECSInfrastructureRolePolicyForVolumes](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForVolumes) 的权限  | 更新了 AmazonECSInfrastructureRolePolicyForVolumes 策略，以允许客户利用快照创建 Amazon EBS 卷。 | 2024 年 10 月 10 日 | 
|  增加了 [AmazonECS\$1FullAccess](#security-iam-awsmanpol-AmazonECS_FullAccess) 权限  |  更新了 AmazonECS\$1FullAccess 策略，从而为名为 ecsInfrastructureRole 的角色增加了 IAM 角色的 iam:PassRole 权限。这是由 Amazon Web Services 管理控制台 创建的默认 IAM 角色，该角色旨在用作 ECS 基础设施角色，从而允许 Amazon ECS 管理挂载到 ECS 任务的 Amazon EBS 卷。 | 2024 年 8 月 13 日 | 
|  新增 [AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity) 策略  |  新增 AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity 策略，该策略提供对 Amazon KMS、Amazon 私有证书颁发机构、Secrets Manager 的管理访问权限，并使 Amazon ECS Service Connect TLS 功能能够正常工作。  | 2024 年 1 月 22 日 | 
|  新增策略 [AmazonECSInfrastructureRolePolicyForVolumes](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSInfrastructureRolePolicyForVolumes)  | 已添加 AmazonECSInfrastructureRolePolicyForVolumes 策略。该策略授予 Amazon ECS 进行 Amazon API 调用所需的权限，以管理与 Amazon ECS 工作负载关联的 Amazon EBS 卷。 | 2024 年 1 月 11 日 | 
|  将权限添加到 [AmazonECSServiceRolePolicy](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonECSServiceRolePolicy)  | AmazonECSServiceRolePolicy 托管 IAM 策略已更新，增加了新的 events 权限，以及附加的 autoscaling 和 autoscaling-plans 权限。 | 2023 年 12 月 4 日 | 
|  将权限添加到 [AmazonEC2ContainerServiceEventsRole](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerServiceEventsRole)  | AmazonECSServiceRolePolicy 托管 IAM 策略已更新，允许访问 Amazon Cloud Map DiscoverInstancesRevision API 操作。 | 2023 年 10 月 4 日 | 
|  将权限添加到 [AmazonEC2ContainerServiceforEC2Role](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonEC2ContainerServiceforEC2Role)  | 修改 AmazonEC2ContainerServiceforEC2Role 策略是为了添加 ecs:TagResource 权限，其中包括一个条件，该条件将权限限制为仅限于新创建的集群和注册的容器实例。 | 2023 年 3 月 6 日 | 
|  向 [AmazonECS\$1FullAccess](#security-iam-awsmanpol-AmazonECS_FullAccess) 添加权限  | 修改 AmazonECS\$1FullAccess 策略是为了添加 elasticloadbalancing:AddTags 权限，其中包括一个条件，该条件将权限限制为仅限于新创建的负载均衡器、目标组、规则和创建的侦听器。此权限不允许向任何已经创建的 Elastic Load Balancing 资源添加标签。 | 2023 年 1 月 4 日 | 
|  Amazon ECS 开始跟踪更改  |  Amazon ECS 开始跟踪其 Amazon 托管策略的更改。  | 2021 年 6 月 8 日 | 

# 逐步淘汰 Amazon Elastic Container Service 的 Amazon 托管 IAM 策略
针对 Amazon ECS 逐步停用的 Amazon 托管策略

以下 Amazon 托管 IAM 策略将逐步停用。这些策略现在已由更新的策略取代。我们建议您更新用户或角色，来使用更新的策略。

## AmazonEC2ContainerServiceFullAccess


**重要**  
`AmazonEC2ContainerServiceFullAccess` 托管 IAM 策略已于 2021 年 1 月 29 日逐步停用，以响应 `iam:passRole` 权限内的安全调查发现。此权限授予对所有资源的访问权限，包括账户中角色的凭证。现在该策略已逐步停用，您无法将该策略附加到任何新的用户或角色。任何已附加策略的用户或角色都可以继续使用它。但是，我们建议您更新用户或角色，而不是使用 `AmazonECS_FullAccess` 托管策略。有关更多信息，请参阅 [迁移到 `AmazonECS_FullAccess` 托管策略](security-iam-awsmanpol-amazonecs-full-access-migration.md)。

## AmazonEC2ContainerServiceRole


**重要**  
`AmazonEC2ContainerServiceRole` 托管 IAM 策略已逐步停用。现在已被 Amazon ECS 与 Amazon ECS 服务相关角色所取代。有关更多信息，请参阅 [对 Amazon ECS 使用服务相关角色](using-service-linked-roles.md)。

## AmazonEC2ContainerServiceAutoscaleRole


**重要**  
`AmazonEC2ContainerServiceAutoscaleRole` 托管 IAM 策略已逐步停用。现在，已被 Amazon ECS 的 Application Auto Scaling 服务链接角色所取代。有关更多信息，请参阅《Application Auto Scaling 用户指南》**中的 [Application Auto Scaling 的服务相关角色](https://docs.amazonaws.cn/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

# 迁移到 `AmazonECS_FullAccess` 托管策略
迁移到 AmazonECS\$1FullAccess

`AmazonEC2ContainerServiceFullAccess` 托管 IAM 策略已于 2021 年 1 月 29 日逐步停用，以响应 `iam:passRole` 权限内的安全调查发现。此权限授予对所有资源的访问权限，包括账户中角色的凭证。现在该策略已逐步停用，您无法将该策略附加到任何新的组、用户或角色。任何已附加策略的组、用户或角色都可以继续使用它。但是，我们建议您更新组、用户或角色，以使用 `AmazonECS_FullAccess` 托管策略。

授予的权限由 `AmazonECS_FullAccess` 策略包括将 ECS 用作管理员所需的完整权限列表。如果您当前使用的由 `AmazonEC2ContainerServiceFullAccess` 策略授予的权限中不在 `AmazonECS_FullAccess` 策略中，您可以将其添加到内联策略语句中。有关更多信息，请参阅 [Amazon Elastic Container Service Amazon 托管策略](security-iam-awsmanpol.md)。

使用以下步骤确定您是否有任何组、用户或角色当前正在使用 `AmazonEC2ContainerServiceFullAccess` 托管 IAM 策略。然后，更新它们以分离早期的策略并附加 `AmazonECS_FullAccess` 策略。

**更新组、用户或角色以使用 AmazonECS\$1FullAccess 策略（Amazon Web Services 管理控制台)**

1. 通过 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**策略**并搜索并选择 `AmazonEC2ContainerServiceFullAccess` 策略。

1. 选择**策略用法**选项卡，显示当前正在使用此策略的任何 IAM 角色。

1. 对于当前使用 `AmazonEC2ContainerServiceFullAccess` 策略的 IAM 角色，请选择角色，然后使用以下步骤分离逐步停用的策略并附加 `AmazonECS_FullAccess` 策略。

   1. 在**权限**选项卡上，选择 **AmazonEC2ContainerServiceFullAccess** 策略旁边的 **X**。

   1. 选择**添加权限**。

   1. 选择**直接附加现有策略**中，搜索并选择 **AmazonECS\$1FullAccess** 策略，然后选择**下一步:审核**。

   1. 查看更改，然后选择**添加权限**。

   1. 对使用 `AmazonEC2ContainerServiceFullAccess` 策略的每个组、用户或角色重复这些步骤。

**更新组、用户或角色以使用 `AmazonECS_FullAccess` 策略（Amazon CLI)**

1. 使用 [https://docs.amazonaws.cn/cli/latest/reference/iam/generate-service-last-accessed-details.html](https://docs.amazonaws.cn/cli/latest/reference/iam/generate-service-last-accessed-details.html) 命令生成报告，其中包含有关上次使用逐步停用策略时的详细信息。

   ```
   aws iam generate-service-last-accessed-details \
        --arn arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess
   ```

   输出示例：

   ```
   {
       "JobId": "32bb1fb0-1ee0-b08e-3626-ae83EXAMPLE"
   }
   ```

1. 将先前输出中的作业 ID 与 [https://docs.amazonaws.cn/cli/latest/reference/iam/get-service-last-accessed-details.html](https://docs.amazonaws.cn/cli/latest/reference/iam/get-service-last-accessed-details.html) 命令配合使用以检索服务的上次访问报告。此报告显示上次使用逐步停用策略的 IAM 实体的 Amazon 资源名称（ARN）。

   ```
   aws iam get-service-last-accessed-details \
         --job-id 32bb1fb0-1ee0-b08e-3626-ae83EXAMPLE
   ```

1. 使用以下命令之一将 `AmazonEC2ContainerServiceFullAccess` 策略与组、用户或角色分离。
   + [https://docs.amazonaws.cn/cli/latest/reference/iam/detach-group-policy.html](https://docs.amazonaws.cn/cli/latest/reference/iam/detach-group-policy.html)
   + [https://docs.amazonaws.cn/cli/latest/reference/iam/detach-role-policy.html](https://docs.amazonaws.cn/cli/latest/reference/iam/detach-role-policy.html)
   + [https://docs.amazonaws.cn/cli/latest/reference/iam/detach-user-policy.html](https://docs.amazonaws.cn/cli/latest/reference/iam/detach-user-policy.html)

1. 使用以下命令之一将 `AmazonECS_FullAccess` 策略附加到组、用户或角色。
   + [https://docs.amazonaws.cn/cli/latest/reference/iam/attach-group-policy.html](https://docs.amazonaws.cn/cli/latest/reference/iam/attach-group-policy.html)
   + [https://docs.amazonaws.cn/cli/latest/reference/iam/attach-role-policy.html](https://docs.amazonaws.cn/cli/latest/reference/iam/attach-role-policy.html)
   + [https://docs.amazonaws.cn/cli/latest/reference/iam/attach-user-policy.html](https://docs.amazonaws.cn/cli/latest/reference/iam/attach-user-policy.html)

# 对 Amazon ECS 使用服务相关角色
使用服务关联角色

Amazon Elastic Container Service 使用 Amazon Identity and Access Management（IAM）[服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon ECS 直接相关。服务关联角色由 Amazon ECS 预定义，包含服务代表您调用其他 Amazon 服务所需的所有权限。

**Topics**
+ [

# 使用角色允许 Amazon ECS 管理集群
](using-service-linked-roles-for-clusters.md)
+ [

# 使用角色管理 Amazon ECS 托管实例
](using-service-linked-roles-instances.md)

# 使用角色允许 Amazon ECS 管理集群
允许 Amazon ECS 管理集群

Amazon Elastic Container Service 使用 Amazon Identity and Access Management（IAM）[服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon ECS 直接相关。服务关联角色由 Amazon ECS 预定义，包含服务代表您调用其他 Amazon 服务所需的所有权限。

服务相关角色可让您更轻松地设置 Amazon ECS，因为您不必手动添加必要的权限。Amazon ECS 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon ECS 可以代入该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

只有在首先删除相关资源后，您才能删除服务关联角色。这将保护您的 Amazon ECS 资源，因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其他服务的信息，请参阅[使用 IAM 的 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务关联角色文档。

## Amazon ECS 的服务相关角色权限


Amazon ECS 使用名为 **AWSServiceRoleForECS** – Role 的服务相关角色，以允许 Amazon ECS 管理您的集群。

AWSServiceRoleForECS 服务相关角色信任以下服务以担任该角色：
+ `ecs.amazonaws.com`

名为 AmazonECSServiceRolePolicy 的角色权限策略将允许 Amazon ECS 在指定资源上完成以下操作：
+ 操作：针对您的 Amazon ECS 任务使用 `awsvpc` 网络模式时，Amazon ECS 会管理与任务关联的弹性网络接口的生命周期。这还包括 Amazon ECS 向您的弹性网络接口添加的标签。
+ 操作：通过 Amazon ECS 服务使用负载均衡器时，Amazon ECS 会管理负载均衡器中资源的注册和注销。
+ 操作：使用 Amazon ECS 服务发现时，Amazon ECS 会管理所需的 Route 53 和 Amazon Cloud Map 资源，使服务发现能正常运作。
+ 操作：使用 Amazon ECS 服务自动扩缩时，Amazon ECS 会管理所需的自动扩缩资源。
+ 操作：Amazon ECS 会创建和管理 CloudWatch 警报和日志流，以帮助监控您的 Amazon ECS 资源。
+ 操作：使用 Amazon ECS Exec 时，Amazon ECS 会管理启动任务 Amazon ECS Exec 会话所需的权限。
+ 操作：使用 Amazon ECS Service Connect 时，Amazon ECS 会管理使用该功能所需的 Amazon Cloud Map 资源。
+ 操作：使用 Amazon ECS 容量提供程序时，Amazon ECS 会管理修改自动扩缩组及其 Amazon EC2 实例所需的权限。
+ 操作：Amazon ECS 可以为 Amazon ECS 管理的服务更新 Amazon Cloud Map 服务属性。
+ 操作：在启动和停止任务时，Amazon ECS 可以调用 Amazon EC2 预置和取消预置 ENI。
+ 操作：Amazon ECS 可以获取与事件窗口关联的服务和集群的 Amazon EC2 事件窗口。

您必须配置使用户、组或角色能够创建、编辑或删除服务相关角色的权限。有关更多信息，请参阅*《IAM 用户指南》*中的[服务相关角色权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 Amazon ECS 创建服务相关角色


您无需手动创建服务关联角色。当您创建集群或者在 Amazon Web Services 管理控制台、Amazon CLI 或 Amazon API 中创建或更新服务时，Amazon ECS 会为您创建服务相关角色。

**重要**  
 如果您在其他使用此角色支持的功能的服务中完成某个操作，此服务关联角色可以出现在您的账户中。如果在 2017 年 1 月 1 日（从此时开始支持服务相关角色）之前已使用 Amazon ECS 服务，则 Amazon ECS 已在您的账户中创建了 AWSServiceRoleForECS 角色。要了解更多信息，请参阅[我的 Amazon Web Services 账户中出现新角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

您还可以使用 IAM 控制台创建具有 **AWSServiceRoleForECS** 使用案例的服务相关角色。在 Amazon CLI 或 Amazon API 中，使用 IAM 创建一个服务名称为 `ecs.amazonaws.com` 的服务相关角色。有关更多信息，请参阅 *IAM 用户指南* 中的[创建服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#create-service-linked-role)。如果您删除了此服务相关角色，可以使用同样的过程再次创建角色。

如果您删除该服务关联角色，然后需要再次创建，您可以使用相同流程在账户中重新创建此角色。当您创建集群或者创建或更新服务时，Amazon ECS 会再次为您创建服务相关角色。

如果删除该服务相关角色，您可以使用相同的 IAM 过程再次创建该角色。

## 为 Amazon ECS 编辑服务相关角色


Amazon ECS 不允许您编辑 AWSServiceRoleForECS 服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。但是可以使用 IAM 编辑角色描述。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除适用于 Amazon ECS 的服务相关角色


您无需手动删除 AWSServiceRoleForECS 角色。当您在 Amazon Web Services 管理控制台、Amazon CLI 或 Amazon API 中删除所有区域中的集群时，Amazon ECS 会清理资源并为您删除服务相关角色。

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样就没有未被主动监控或维护的未使用实体。但是，您必须先清除您的服务相关角色，然后才能手动删除它。

### 清除服务相关角色


必须先删除服务相关角色使用的所有资源，然后才能使用 IAM 删除该角色。

**注意**  
如果当您试图删除资源时 Amazon ECS 服务正在使用该角色，则删除操作可能会失败。如果发生这种情况，请等待几分钟后重试。

**删除 AWSServiceRoleForECS 使用的 Amazon ECS 资源（控制台）**

1. 将所有区域中的所有 Amazon ECS 服务缩小到预期数量 0，然后删除该服务。有关更多信息，请参阅[更新 Amazon ECS 服务](update-service-console-v2.md)和[使用控制台删除 Amazon ECS 服务](delete-service-v2.md)。

1. 强制从所有区域的所有集群中取消注册所有容器实例。有关更多信息，请参阅 [注销 Amazon ECS 容器实例](deregister_container_instance.md)。

1. 删除所有区域的所有 Amazon ECS 集群。有关更多信息，请参阅 [删除 Amazon ECS 集群](delete_cluster-new-console.md)。

**删除 AWSServiceRoleForECS 使用的 Amazon ECS 资源（Amazon CLI）**

1. 将所有区域中的所有 Amazon ECS 服务缩小到预期数量 0，然后删除该服务。有关更多信息，请参阅 Amazon Command Line Interface 参考中的 [update-service](https://docs.amazonaws.cn/cli/latest/reference/ecs/update-service.html) 和 [delete-service](https://docs.amazonaws.cn/cli/latest/reference/ecs/delete-service.html)。

1. 强制从所有区域的所有集群中取消注册所有容器实例。有关更多信息，请参阅 [deregister-container-instance](https://docs.amazonaws.cn/cli/latest/reference/ecs/deregister-container-instance.html)。

1. 删除所有区域的所有 Amazon ECS 集群。有关更多信息，请参阅 [delete-cluster](https://docs.amazonaws.cn/cli/latest/reference/ecs/delete-cluster.html)。

**删除 AWSServiceRoleForECS 使用的 Amazon ECS 资源（API）**

1. 将所有区域中的所有 Amazon ECS 服务缩小到预期数量 0，然后删除该服务。有关更多信息，请参阅《Amazon ECS API 参考》**中的 [UpdateService](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_UpdateService.html) 和 [DeleteService](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_DeleteService.html)。

1. 强制从所有区域的所有集群中取消注册所有容器实例。有关更多信息，请参阅 [DeregisterContainerInstance](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_DeregisterContainerInstance.html).。

1. 删除所有区域的所有 Amazon ECS 集群。有关更多信息，请参阅 [DeleteCluster](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_DeleteCluster.html)。

### 手动删除服务相关角色


使用 IAM 控制台、Amazon CLI 或 Amazon API 删除 AWSServiceRoleForECS 服务相关角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## Amazon ECS 服务相关角色支持的区域


Amazon ECS 支持在该服务可用的所有区域中使用服务相关角色。有关更多信息，请参阅 [Amazon 区域和端点](https://docs.amazonaws.cn/general/latest/gr/rande.html)。

# 使用角色管理 Amazon ECS 托管实例
允许 Amazon ECS 管理 Amazon ECS 托管实例

Amazon Elastic Container Service 使用 Amazon Identity and Access Management（IAM）[服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种独特类型的 IAM 角色，它与 Amazon ECS 直接相关。服务关联角色由 Amazon ECS 预定义，包含服务代表您调用其他 Amazon 服务所需的所有权限。

服务相关角色可让您更轻松地设置 Amazon ECS，因为您不必手动添加必要的权限。Amazon ECS 定义其服务相关角色的权限，除非另外定义，否则只有 Amazon ECS 可以代入该角色。定义的权限包括信任策略和权限策略，以及不能附加到任何其他 IAM 实体的权限策略。

只有在首先删除相关资源后，您才能删除服务关联角色。这将保护您的 Amazon ECS 资源，因为您不会无意中删除对资源的访问权限。

有关支持服务相关角色的其他服务的信息，请参阅[使用 IAM 的 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)，并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务关联角色文档。

## Amazon ECS 的服务相关角色权限


Amazon ECS 使用名为 **AWSServiceRoleForECSCompute** – Role 的服务相关角色，以允许 Amazon ECS 管理由 Amazon ECS 托管实例容量提供程序预置的 Amazon EC2 托管实例。

AWSServiceRoleForECSCompute 服务相关角色信任以下服务可以代入该角色：
+ `ecs-compute.amazonaws.com`

名为 [`AmazonECSComputeServiceRolePolicy`](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonECSComputeServiceRolePolicy) 的角色权限策略允许 Amazon ECS 完成以下任务：
+ Amazon ECS 可以描述和删除启动模板。
+  Amazon ECS 可以描述和删除启动模板版本。
+ Amazon ECS 可以终止实例。
+ Amazon ECS 可以描述下面的实例数据参数：
  + 实例
  + 实例网络接口：Amazon ECS 可以描述以管理 EC2 实例生命周期。
  + 实例事件窗口：Amazon ECS 可以描述事件窗口信息，以确定是否可以中断工作流来修补实例。
  + 实例状态：Amazon ECS 可以描述实例状态，以便监控实例运行状况。

您必须配置使用户、组或角色能够创建、编辑或删除服务相关角色的权限。有关更多信息，请参阅*《IAM 用户指南》*中的[服务相关角色权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为 Amazon ECS 创建服务相关角色


您无需手动创建服务关联角色。当您在 Amazon Web Services 管理控制台、Amazon CLI 或 Amazon API 中为 Amazon ECS 托管实例创建容量提供程序时，Amazon ECS 会为您创建服务相关角色。

**重要**  
 如果您在其他使用此角色支持的功能的服务中完成某个操作，此服务关联角色可以出现在您的账户中。如果在 2017 年 1 月 1 日（从此时开始支持服务相关角色）之前已使用 Amazon ECS 服务，则 Amazon ECS 已在您的账户中创建了 AmazonECSComputeServiceRolePolicy 角色。要了解更多信息，请参阅[我的 Amazon Web Services 账户中出现新角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)。

如果您删除该服务关联角色，然后需要再次创建，您可以使用相同流程在账户中重新创建此角色。当您为 Amazon ECS 托管实例创建容量提供程序时，Amazon ECS 会为您创建服务相关角色。

如果删除该服务相关角色，您可以使用相同的 IAM 过程再次创建该角色。

## 为 Amazon ECS 编辑服务相关角色


Amazon ECS 不允许您编辑 AmazonECSComputeServiceRolePolicy 服务相关角色。创建服务关联角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。但是可以使用 IAM 编辑角色描述。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除适用于 Amazon ECS 的服务相关角色


您无需手动删除 AmazonECSComputeServiceRolePolicy 角色。当您在 Amazon Web Services 管理控制台、Amazon CLI 或 Amazon API 中删除所有区域中的所有 Amazon ECS 托管实例容量提供程序时，Amazon ECS 会清理资源并为您删除服务相关角色。

### 手动删除服务相关角色


使用 IAM 控制台、Amazon CLI 或 Amazon API 删除 AmazonECSComputeServiceRolePolicy 服务相关角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## Amazon ECS 服务相关角色支持的区域


Amazon ECS 支持在该服务可用的所有区域中使用服务相关角色。有关更多信息，请参阅 [Amazon 区域和端点](https://docs.amazonaws.cn/general/latest/gr/rande.html)。

# 适用于 Amazon ECS 的 IAM 角色


IAM 角色是可在账户中创建的一种具有特定权限的 IAM 身份。在 Amazon ECS 中，您可以创建角色来授予对 Amazon ECS 资源（例如容器或服务）的权限。

Amazon ECS 需要的角色取决于任务定义启动类型和您使用的功能。使用下表确定 Amazon ECS 需要哪些 IAM 角色。


| 角色 | 定义 | 何时需要 | 更多信息 | 
| --- | --- | --- | --- | 
| 任务执行 角色 | 此角色允许 Amazon ECS 代表您使用其他 Amazon 服务。 |  您的任务托管在 Amazon Fargate上且： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-ecs-iam-role-overview.html) 您的任务托管在 Amazon Fargate 或 Amazon EC2 实例上且： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-ecs-iam-role-overview.html)  | [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md) | 
| 任务 角色 | 此角色允许您的应用程序代码（在容器上）使用其他 Amazon 服务。 | 您的应用程序访问其他 Amazon 服务，例如 Amazon S3。 | [Amazon ECS 任务 IAM 角色](task-iam-roles.md) | 
| 容器实例角色 | 此角色允许您的 EC2 实例或外部实例向集群注册。 | 您的任务托管在 Amazon EC2 实例或外部实例上。 | [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md) | 
| Amazon ECS Anywhere 角色 | 此角色允许您的外部实例访问 Amazon API。 | 您的任务托管在外部实例上。 | [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md) | 
| 适用于负载均衡器角色的 Amazon ECS 基础设施 | 此角色允许 Amazon ECS 代表您为蓝绿部署管理集群中的负载均衡器资源。 | 您想要使用 Amazon ECS 蓝绿部署。 | [适用于负载均衡器的 Amazon ECS 基础设施 IAM 角色](AmazonECSInfrastructureRolePolicyForLoadBalancers.md) | 
| Amazon ECS CodeDeploy 角色 | 此角色允许 CodeDeploy 对您的服务进行更新。 | 您可使用 CodeDeploy 蓝/绿部署类型来部署服务。 | [Amazon ECS CodeDeploy IAM 角色](codedeploy_IAM_role.md) | 
| Amazon ECS EventBridge 角色 | 此角色允许 EventBridge 对您的服务进行更新。 | 您可使用 EventBridge 规则和目标来计划任务。 | [Amazon ECS EventBridge IAM 角色](CWE_IAM_role.md) | 
| Amazon ECS 基础设施角色 | 此角色允许 Amazon ECS 管理集群中的基础设施资源。 |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-ecs-iam-role-overview.html) | [Amazon ECS 基础设施 IAM 角色](infrastructure_IAM_role.md) | 
| 实例配置文件 | 此角色允许 Amazon ECS 托管实例安全地代入基础设施角色。 | 您在集群中使用 Amazon ECS 托管实例。 | [Amazon ECS 托管实例实例配置文件](managed-instances-instance-profile.md) | 

# Amazon ECS 中 IAM 角色的最佳实践
IAM 角色的最佳实践

Amazon ECS 需要的角色取决于任务定义启动类型和您使用的功能。我们建议您在表中创建单独的角色，而不是共享角色。


| 角色 | 定义 | 何时需要 | 更多信息 | 
| --- | --- | --- | --- | 
| 任务执行 角色 | 此角色允许 Amazon ECS 代表您使用其他 Amazon 服务。 |  您的任务托管在 Amazon Fargate上且： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-roles.html) 您的任务托管在 Amazon Fargate 或 Amazon EC2 实例上且： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-roles.html)  | [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md) | 
| 任务 角色 | 此角色允许您的应用程序代码（在容器上）使用其他 Amazon 服务。 | 您的应用程序访问其他 Amazon 服务，例如 Amazon S3。 | [Amazon ECS 任务 IAM 角色](task-iam-roles.md) | 
| 容器实例角色 | 此角色允许您的 EC2 实例或外部实例向集群注册。 | 您的任务托管在 Amazon EC2 实例或外部实例上。 | [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md) | 
| Amazon ECS Anywhere 角色 | 此角色允许您的外部实例访问 Amazon API。 | 您的任务托管在外部实例上。 | [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md) | 
| Amazon ECS CodeDeploy 角色 | 此角色允许 CodeDeploy 对您的服务进行更新。 | 您可使用 CodeDeploy 蓝/绿部署类型来部署服务。 | [Amazon ECS CodeDeploy IAM 角色](codedeploy_IAM_role.md) | 
| Amazon ECS EventBridge 角色 | 此角色允许 EventBridge 对您的服务进行更新。 | 您可使用 EventBridge 规则和目标来计划任务。 | [Amazon ECS EventBridge IAM 角色](CWE_IAM_role.md) | 
| Amazon ECS 基础设施角色 | 此角色允许 Amazon ECS 管理集群中的基础设施资源。 |  [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-roles.html) | [Amazon ECS 基础设施 IAM 角色](infrastructure_IAM_role.md) | 

## 任务 角色


建议您为任务分配角色。它的角色可以与其运行的 Amazon EC2 实例的角色不同。为每项任务分配角色符合最低权限访问的原则，并有利于对操作和资源进行更精细的控制。

当您在任务定义中添加任务角色时，Amazon ECS 容器代理会自动为该任务创建具有唯一凭证 ID（例如 `12345678-90ab-cdef-1234-567890abcdef`）的令牌。然后，该令牌和角色凭证将添加到代理的内部缓存中。代理使用凭证 ID 的 URI 填充容器 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 中的环境变量（例如，`/v2/credentials/12345678-90ab-cdef-1234-567890abcdef`）。

您可以通过将环境变量附加到 Amazon ECS 容器代理的 IP 地址并对生成的字符串运行 `curl` 命令来手动检索容器内部的临时角色凭证。

```
curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
```

预期的输出如下所示：

```
{
	"RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6",
	"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
	"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
	"Token": "IQoJb3JpZ2luX2VjEEM/Example==",
	"Expiration": "2021-01-16T00:51:53Z"
}
```

调用 Amazon API 时，较新版本的 Amazon 开发工具包会自动从 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` 环境变量中获取这些凭证。有关如何续订凭证的信息，请参阅在 re:Post 上的 [Renewing Amazon credentials](https://repost.aws/questions/QUgcf1EIOPS7GZNboeAiyO9Q/renewing-aws-credentials)。

输出包括一个访问密钥对，该密钥对由您的应用程序用于访问 Amazon 资源的秘密访问密钥 ID 和秘密密钥组成。它还包括 Amazon 用于验证凭证是否有效的令牌。默认情况下，使用任务角色分配给任务的凭证有效期为六小时。之后，Amazon ECS 容器代理会自动轮换它们。

## 任务执行 角色


任务执行角色用于授予 Amazon ECS 容器代理代表您调用特定 Amazon API 操作的权限。例如，当您使用 Amazon Fargate 时，Fargate 需要一个 IAM 角色来允许它从 Amazon ECR 提取映像并将日志写入 CloudWatch Logs。当任务引用存储在 Amazon Secrets Manager 中的密钥（例如映像提取密钥）时，还需要一个 IAM 角色。

**注意**  
如果您以经过身份验证的用户身份提取映像，则不太可能受到 [Docker Hub 拉取速率限制](https://www.docker.com/pricing/resource-consumption-updates)变化的影响。有关更多信息，请参阅[容器实例的私有注册表身份验证](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/private-auth-container-instances.html)。  
通过使用 Amazon ECR 和 Amazon ECR Public，您可以避开 Docker 施加的限制。如果您从 Amazon ECR 提取映像，这还有助于缩短网络提取时间，并减少流量离开您的 VPC 时的数据传输变化。

**重要**  
使用 Fargate 时，您必须使用 `repositoryCredentials` 向私有映像注册表进行身份验证。无法为 Fargate 上托管的任务设置 Amazon ECS 容器代理环境变量 `ECS_ENGINE_AUTH_TYPE` 或 `ECS_ENGINE_AUTH_DATA` 或修改 `ecs.config` 文件。有关更多信息，请参阅[任务的私有注册表身份验证](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/private-auth.html)。

## 容器实例角色


`AmazonEC2ContainerServiceforEC2Role` 托管 IAM 策略必须包含以下权限。遵循授予最低权限的标准安全建议，`AmazonEC2ContainerServiceforEC2Role` 托管策略可用作指南。如果不需要在托管策略中为您的使用案例授予的任何权限，请创建自定义策略并仅添加所需的权限。
+ `ec2:DescribeTags`：（可选）允许主体描述与 Amazon EC2 实例关联的标签。Amazon ECS 容器代理使用此权限来支持资源标签传播。有关更多信息，请参阅 [如何为资源添加标签](ecs-using-tags.md#tag-resources)。
+ `ecs:CreateCluster` –（可选）允许主体创建 Amazon ECS 集群。Amazon ECS 容器代理将使用此权限创建 `default` 集群（如果还没有集群）。
+ `ecs:DeregisterContainerInstance` –（可选）允许主体从集群注销 Amazon ECS 容器实例。Amazon ECS 容器代理不会调用此 API 操作，但仍保留此权限以帮助确保后续的兼容性。
+ `ecs:DiscoverPollEndpoint` –（必要）此操作返回 Amazon ECS 容器代理用于轮询更新的端点。
+ `ecs:Poll` –（必要）允许 Amazon ECS 容器代理与 Amazon ECS 控制面板通信，报告任务状态更改。
+ `ecs:RegisterContainerInstance` –（必要）允许主体向集群注册容器实例。Amazon ECS 容器代理使用此权限向集群注册 Amazon EC2 实例并支持资源标签传播。
+ `ecs:StartTelemetrySession` –（可选）允许 Amazon ECS 容器代理与 Amazon ECS 控制面板通信，报告每个容器和任务的运行状况信息和指标。

  尽管此权限并非必需，但我们建议您添加此权限，以便容器实例指标启动扩展操作，并接收与运行状况检查命令相关的报告。
+ `ecs:TagResource` –（可选）允许 Amazon ECS 容器代理在创建集群时标记集群，并在容器实例注册到集群时对其进行标记。
+ `ecs:UpdateContainerInstancesState`— 允许委托人修改 Amazon ECS 容器实例的状态。Amazon ECS 容器代理将此权限用于竞价型实例耗尽。
+ `ecs:Submit*` –（必要）这包括 `SubmitAttachmentStateChanges`、`SubmitContainerStateChange` 和 `SubmitTaskStateChange` API 操作。Amazon ECS 容器代理使用它们向 Amazon ECS 控制面板报告每个资源的状态变化。`SubmitContainerStateChange` 权限不再被 Amazon ECS 容器代理使用，但仍可帮助确保后续的兼容性。
+ `ecr:GetAuthorizationToken` –（可选）允许主体检索授权令牌。授权令牌表示您的 IAM 身份验证凭证，可用于访问您的 IAM 委托人有权访问的任何 Amazon ECR 注册表。收到的授权令牌有效期为 12 小时。
+ `ecr:BatchCheckLayerAvailability` –（可选）将容器映像推送到 Amazon ECR 私有存储库时，系统会检查每个映像层，验证其是否已推送。如果是，则会跳过映像层。
+ `ecr:GetDownloadUrlForLayer` –（可选）从 Amazon ECR 私有存储库中提取容器映像时，对于尚未缓存的每个映像层，此 API 都会被调用一次。
+ `ecr:BatchGetImage` –（可选）从 Amazon ECR 私有存储库中提取容器映像时，系统会调用一次此 API 来检索映像清单。
+ `logs:CreateLogStream` –（可选）允许主体为指定的日志组创建 CloudWatch Logs 日志流。
+ `logs:PutLogEvents` –（可选）允许主体将一批日志事件上传到指定的日志流。

## 服务关联角色


您可以将服务相关角色用于 Amazon ECS，以授予 Amazon ECS 服务代表您调用其他服务 API 的权限。Amazon ECS 需要拥有创建和删除网络接口、向目标组注册和注销目标的权限。它还需要必要的权限才能创建和删除扩展策略。这些权限通过服务相关角色授予。此角色是在您首次使用该服务时代表您创建的。

**注意**  
如果您无意中删除了服务相关角色，则可以重新创建它。有关说明，请参阅[创建服务相关角色](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/using-service-linked-roles.html#create-service-linked-role)。

## 角色建议


在设置任务 IAM 角色和策略时，建议执行以下操作。

### 阻止对 Amazon EC2 元数据的访问


当您在 Amazon EC2 实例上运行任务时，强烈建议您阻止访问 Amazon EC2 元数据，以防止您的容器继承分配给这些实例的角色。如果您的应用程序必须调用 Amazon API 操作，请改用 IAM 角色执行任务。

要防止在**桥接**模式下运行的任务访问 Amazon EC2 元数据，请运行以下命令或更新实例的用户数据。有关更新实例用户数据的更多说明，请参阅此 [Amazon 支持文章](https://www.amazonaws.cn/premiumsupport/knowledge-center/ecs-container-ec2-metadata/)。有关任务定义桥接模式的更多信息，请参阅[任务定义网络模式](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode)。

```
sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
```

要使此更改在重启后保持不变，请运行以下特定于您的亚马逊机器映像（AMI）的命令：
+ Amazon Linux 2

  ```
  sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  ```
+ Amazon Linux

  ```
  sudo service iptables save
  ```

对于使用 `awsvpc` 网络模式的任务，请在 `/etc/ecs/ecs.config` 文件中将环境变量 `ECS_AWSVPC_BLOCK_IMDS` 设置为 `true`。

您应在 `ecs-agent config` 文件中将 `ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST` 变量设置为 `false`，以防止在 `host` 网络中运行的容器访问 Amazon EC2 元数据。

### 使用 `awsvpc` 网络模式


使用网络 `awsvpc` 网络模式限制不同任务之间或您的任务与在 Amazon VPC 内运行的其他服务之间的流量。这将额外增加一层安全性。`awsvpc` 网络模式为在 Amazon EC2 上运行的任务提供任务级别的网络隔离。它是 Amazon Fargate 上的默认模式，是唯一可以用来为任务分配安全组的网络模式。

### 使用上次访问的信息优化角色


建议您删除任何从未使用或一段时间未使用的操作。这样可以防止发生不必要的访问。为此，请查看 IAM 提供的上次访问的信息，然后移除从未使用过或最近未使用过的操作。您可以按照以下步骤执行此操作。

运行以下命令以生成报告，其中显示所引用策略的最后访问信息：

```
aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1
```

使用输出中的 `JobId` 来运行以下命令。执行此操作后，您可以查看报告的结果。

```
aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9
```

有关更多信息，请参阅[使用上次访问的信息优化 Amazon 中的权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_last-accessed.html)。

### 监控 Amazon CloudTrail 是否有可疑活动


您可以监控 Amazon CloudTrail 是否有任何可疑活动。大多数 Amazon API 调用都以事件形式记录到 Amazon CloudTrail 中。Amazon CloudTrail Insights 会对它们进行分析，并提醒您注意任何与 `write` API 调用相关的可疑行为。这可能包括通话量激增。这些警报包括异常活动发生的时间和促成 API 的高级身份 ARN 等信息。

您可以通过查看事件的 `userIdentity` 属性来识别具有 IAM 角色的任务在 Amazon CloudTrail 中执行的操作。在以下示例中，`arn` 包括代入的角色的名称 `s3-write-go-bucket-role`，随后是任务的名称 `7e9894e088ad416eb5cab92afExample`。

```
"userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample",
    "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample",
    ...
}
```

**注意**  
在 Amazon EC2 容器实例上运行代入角色的任务时，Amazon ECS 容器代理会将请求记录到该代理的审核日志中，该代理位于 `/var/log/ecs/audit.log.YYYY-MM-DD-HH` 格式的地址上。有关更多信息，请参阅[任务 IAM 角色日志](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/logs.html#task_iam_roles-logs)和[记录跟踪记录的见解事件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/logging-insights-events-with-cloudtrail.html)。

# Amazon ECS 任务执行 IAM 角色
任务执行 IAM 角色

任务执行角色的 ，该角色授予 Amazon ECS 容器和 Fargate 代理代表您进行 Amazon API 调用的权限。任务执行 IAM 角色是必需的，具体取决于任务的要求。您可以将多个任务执行角色用于与您的账户关联的服务不同目的。

**注意**  
Amazon ECS 会定期向实例上运行的代理发送角色的临时凭证，来向代理提供这些权限，但任务中的容器无法直接获得这些权限。有关容器内的应用程序代码运行所需的 IAM 权限，请参阅[Amazon ECS 任务 IAM 角色](task-iam-roles.md)。

以下是任务执行 IAM 角色的常见使用案例：
+ 您的任务托管在 Amazon Fargate上：
  + 从 Amazon ECR 私有存储库中提取容器映像。
  + 在与运行任务的账户不同的账户中，从 Amazon ECR 私有存储库中提取容器映像。
  + 使用 `awslogs` 日志驱动程序将容器日志发送到 CloudWatch Logs。有关更多信息，请参阅 [将 Amazon ECS 日志发送到 CloudWatch](using_awslogs.md)。
+ 您的任务托管在 Amazon Fargate 或 Amazon EC2 实例上且：
  + 使用私有注册表身份验证。有关更多信息，请参阅 [私有注册表身份验证权限](#task-execution-private-auth)。
  + 使用运行时监控。
  + 任务定义使用 Secrets Manager 密钥或 Amazon Systems Manager Parameter Store 参数引用敏感数据。有关更多信息，请参阅 [Secrets Manager 或 Systems Manager 权限](#task-execution-secrets)。

**注意**  
该任务执行角色由 Amazon ECS 容器代理版本 1.16.0 和更高版本支持。

 Amazon ECS 提供了名为 `AmazonECSTaskExecutionRolePolicy` 的托管策略，该策略包含上述常见使用案例所需的权限。有关更多信息，请参阅《Amazon 托管式策略参考指南》中的 [AmazonECSTaskExecutionRolePolicy](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSTaskExecutionRolePolicy.html)**。对于特殊应用场景，可能需要向任务执行角色添加内联策略。

Amazon ECS 控制台将会创建一个任务执行角色。您可以手动为任务附加该托管式 IAM 策略，以便 Amazon ECS 能够在引入未来功能和增强功能时添加相关权限。您可以使用 IAM 控制台搜索来搜索 `ecsTaskExecutionRole`，并查看您的账户是否已有该任务执行角色。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 控制台搜索](https://docs.amazonaws.cn/IAM/latest/UserGuide/console_search.html)。

如果以经过身份验证的用户身份拉取映像，则不太可能受到 [Docker Hub 使用和限制](https://docs.docker.com/docker-hub/usage/)变化的影响。有关更多信息，请参阅[容器实例的私有注册表身份验证](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/private-auth-container-instances.html)。

通过使用 Amazon ECR 和 Amazon ECR Public，您可以避开 Docker 施加的限制。如果您从 Amazon ECR 提取映像，这还有助于缩短网络提取时间，并减少流量离开您的 VPC 时的数据传输变化。

使用 Fargate 时，您必须使用 `repositoryCredentials` 向私有映像注册表进行身份验证。无法为 Fargate 上托管的任务设置 Amazon ECS 容器代理环境变量 `ECS_ENGINE_AUTH_TYPE` 或 `ECS_ENGINE_AUTH_DATA` 或修改 `ecs.config` 文件。有关更多信息，请参阅[任务的私有注册表身份验证](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/private-auth.html)。

## 创建任务执行 角色


如果您的账户尚未具有任务执行角色，请使用以下步骤创建角色。

------
#### [ Amazon Web Services 管理控制台 ]

**为 Elastic Container Service 创建服务角色（IAM 控制台）**

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

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

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

1. 对于**服务或使用案例**，选择 **Elastic Container Service**，然后选择 **Elastic Container Service 任务**使用案例。

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

1. 在**添加权限**部分中，搜索 **AmazonECSTaskExecutionRolePolicy**，然后选择该策略。

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

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

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

------
#### [ Amazon CLI ]

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

1. 创建一个名为 `ecs-tasks-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下内容：

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

****  

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

------

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

   ```
   aws iam create-role \
         --role-name ecsTaskExecutionRole \
         --assume-role-policy-document file://ecs-tasks-trust-policy.json
   ```

1. 将 Amazon 托管 `AmazonECSTaskExecutionRolePolicy` 策略 附加到 `ecsTaskExecutionRole` 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsTaskExecutionRole \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
   ```

------

创建该角色后，为该角色添加以下功能的附加权限。


|  功能  |  其他权限  | 
| --- | --- | 
|  使用 Secrets Manager 凭证从位于 Amazon 之外的私有注册表（例如 Docker Hub、Quay.io 或您自己的私有注册表）拉取容器映像  |  [私有注册表身份验证权限](#task-execution-private-auth)  | 
| 使用 Systems Manager 或 Secrets Manager 传递敏感数据 | [Secrets Manager 或 Systems Manager 权限](#task-execution-secrets) | 
| 让 Fargate 任务通过接口端点拉取 Amazon ECR 映像 | [Fargate 任务通过接口端点拉取 Amazon ECR 映像的权限](#task-execution-ecr-conditionkeys) | 
| 在 Amazon S3 存储桶中托管配置文件 | [Amazon S3 存储桶文件存储权限](#s3-required) | 
| 配置 Container Insights 以查看 Amazon ECS 生命周期事件 |  [在 Container Insights 中启用 Amazon ECS 生命周期事件所需的权限](console-permissions.md#required-permissions-configure)  | 
| 在 Container Insights 中查看 Amazon ECS 生命周期事件 |  [在 Container Insights 中查看 Amazon ECS 生命周期事件所需的权限](console-permissions.md#required-permissions-view)  | 

## 私有注册表身份验证权限


借助私有注册表身份验证，您的 Amazon ECS 任务将可以从位于 Amazon 之外且需要身份验证凭证的私有注册表（例如 Docker Hub、Quay.io 或您自己的私有注册表）拉取容器映像。此功能使用 Secrets Manager 来安全地存储注册表凭证，然后使用 `repositoryCredentials` 参数在任务定义中引用这些凭证。

有关配置私有注册表身份验证的更多信息，请参阅[在 Amazon ECS 中使用非 Amazon 容器映像](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/private-auth.html)。

要允许访问包含您的私有注册表凭证的密钥，请将以下权限作为内联策略添加到任务执行角色中。有关更多信息，请参阅[添加和删除 IAM 策略。](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
+ `secretsmanager:GetSecretValue`：从 Secrets Manager 检索私有注册表凭证时为必需。
+ `kms:Decrypt`：仅当您的密钥使用自定义 KMS 密钥而不是默认密钥时才需要。您的自定义密钥的 Amazon 资源名称（ARN）必须添加为资源。

下面是添加所需权限的示例内联策略。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name",
                "arn:aws:kms:us-east-1:111122223333:key/key_id"
            ]
        }
    ]
}
```

------

## Secrets Manager 或 Systems Manager 权限


允许容器代理拉取所需 Amazon Systems Manager 或 Secrets Manager 资源的权限。有关更多信息，请参阅 [将敏感数据传递给 Amazon ECS 容器](specifying-sensitive-data.md)。

**使用 Secrets Manager**

要提供对您创建的 Secrets Manager 密钥的访问权限，请将以下权限手动添加到任务执行角色。有关如何管理权限的信息，请参阅**《IAM 用户指南》中的[添加和删除 IAM 身份权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `secretsmanager:GetSecretValue` – 在引用 Secrets Manager 密钥时是必需的。添加从 Secrets Manager 中检索密钥的权限。

以下示例策略添加了所需的权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name"
      ]
    }
  ]
}
```

------

**使用 Systems Manager**

**重要**  
对于使用 EC2 启动类型的任务，必须使用 ECS 代理配置变量 `ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true` 才能使用此功能。您可以在创建容器实例的过程中将其添加到 `./etc/ecs/ecs.config` 文件中，也可以将其添加到现有实例中，然后重新启动 ECS 代理。有关更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

要提供对您创建的 Systems Manager Parameter Store 参数的访问权限，请将以下权限作为策略手动添加到任务执行角色。有关如何管理权限的信息，请参阅**《IAM 用户指南》中的[添加和删除 IAM 身份权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `ssm:GetParameters` — 当您在任务定义中引用 Systems Manager Parameter Store 参数时是必需的。添加检索 Systems Manager 参数的权限。
+ `secretsmanager:GetSecretValue` — 当您直接引用 Secrets Manager 密钥或者您的 System Manager Parameter Store 参数在任务定义中引用 Secrets Manager 密钥时，这是必需的。添加从 Secrets Manager 中检索密钥的权限。
+ `kms:Decrypt` — 仅当您的密钥使用客户托管键而不是默认键时才需要。您的自定义密钥的 ARN 应添加为资源。添加解密客户托管密钥的权限。

以下示例策略添加了所需的权限：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters",
        "secretsmanager:GetSecretValue",
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:ssm:us-east-1:111122223333:parameter/parameter_name",
        "arn:aws:secretsmanager:us-east-1:111122223333:secret:secret_name",
        "arn:aws:kms:us-east-1:111122223333:key/key_id"
      ]
    }
  ]
}
```

------

## Fargate 任务通过接口端点拉取 Amazon ECR 映像的权限


在 Amazon ECR 配置为使用接口 VPC 端点的情况下，当启动使用 Fargate 的任务（该任务从 Amazon ECR 中拉取映像）时，可以限制任务对特定 VPC 或 VPC 端点的访问。可通过为要使用 IAM 条件键的任务创建任务执行角色来做到这一点。

使用以下 IAM 全局条件键来限制对特定 VPC 或 VPC 端点的访问。有关更多信息，请参阅 [Amazon Global Condition Context Keys](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html)。
+ `aws:SourceVpc`：限制对特定 VPC 的访问。可以将 VPC 限制为托管任务和端点的 VPC。
+ `aws:SourceVpce`：限制对特定 VPC 端点的访问。

以下任务执行角色策略提供了一个添加条件键的示例：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:GetAuthorizationToken",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ecr:BatchCheckLayerAvailability",
                    "ecr:GetDownloadUrlForLayer",
                    "ecr:BatchGetImage"
                ],
                "Resource": "arn:aws:ecr:*:*:repository/*",
                "Condition": {
                    "StringEquals": {
                            "aws:sourceVpce": "vpce-0123456789abcdef0"
                    }
                }
            }
    ]
}
```

------

## Amazon ECR 权限


当您需要从 Amazon ECR 私有存储库提取容器映像时，将需要以下权限。任务执行角色应具有这些权限，以允许 Amazon ECS 容器和 Fargate 代理代表您提取容器映像。对于基本 ECS 实施，应将这些权限添加到任务执行角色，而不是任务 IAM 角色。

Amazon ECS 任务执行角色托管策略（`AmazonECSTaskExecutionRolePolicy`）包含从 Amazon ECR 提取映像所需的权限。如果您使用托管策略，则无需单独添加这些权限。

如果您要创建自定义策略，则请包含以下权限以允许从 Amazon ECR 提取映像：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

请注意，如果您的应用程序代码需要直接与 Amazon ECR API 交互，则这些权限与任务 IAM 角色中可能需要的权限不同。有关 Amazon ECR 的任务 IAM 角色权限的信息，请参阅 [Amazon ECR 权限](task-iam-roles.md#ecr-required-iam-permissions)。

## Amazon S3 存储桶文件存储权限


指定某个在 Amazon S3 中托管的配置文件时，任务执行角色必须包含对此配置文件的 `s3:GetObject` 权限以及对此文件所在 Amazon S3 存储桶的 `s3:GetBucketLocation` 权限。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的 [Amazon S3 的策略操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-actions)。

以下示例策略添加了从 Amazon S3 中检索文件所需的权限。指定 Amazon S3 存储桶的名称和配置文件名称。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/folder_name/config_file_name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket"
      ]
    }
  ]
}
```

------

### 重要的安全注意事项


 使用与 Amazon S3 存储桶集成的 Amazon ECS 功能时，请实施存储桶所有权验证，以防止存储桶接管攻击。如果未进行适当验证，而恶意行为者删除并使用相同名称重新创建了 Amazon S3 存储桶，则您的任务可能会在不知情的情况下加载恶意配置或将敏感数据发送到攻击者控制的存储桶。

**建议的 IAM 策略条件：**

```
               "Condition": {
                 "StringEquals": {
                   "aws:ResourceAccount": "TRUSTED-ACCOUNT-ID"
                 }
               }
```

将 *TRUSTED-ACCOUNT-ID* 替换为拥有 S3 存储桶的 Amazon 账户 ID。

此条件确保您的任务执行角色只能访问指定的受信任账户拥有的 Amazon S3 存储桶。

# Amazon ECS 任务 IAM 角色
任务 IAM 角色

您的 Amazon ECS 任务可以具有与其关联的 IAM 角色。此 IAM 角色中授予的权限将传递给在任务中运行的容器。此角色允许应用程序代码（在容器上运行）使用其他 Amazon 服务。当您的应用程序访问其他 Amazon 服务（例如 Amazon S3）时需要任务角色。

**注意**  
Amazon ECS 容器和 Fargate 代理未访问这些权限。有关 Amazon ECS 提取容器映像和运行任务所需的 IAM 权限，请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

使用任务角色有以下好处：
+ **分离关注点**：如果您使用的是 EC2，则任务 IAM 角色允许您为容器指定 IAM 权限，而无需使用 EC2 实例配置文件指定这些权限（有关更多信息，请参阅《Amazon Identity and Access Management 用户指南》**中的[使用实例配置文件](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)）。这样，您可以在 ECS 容器实例上独立、统一地部署应用程序，而无需修改与 EC2 实例关联的 IAM 权限。
+ **可审计性：**通过 CloudTrail 提供访问和事件日志记录，从而确保追溯审计。任务凭证具有一个会连接到会话的“`taskArn`”上下文，因此 CloudTrail 日志会显示角色凭证传递到的具体任务。
+ **统一交付凭证**：ECS 负责将 IAM 角色凭证交付给容器，从而确保无论任务关联到哪种计算选项，都可以通过定义明确的接口访问这些凭证。在 ECS Fargate 上，EC2 实例配置文件不支持任务中的容器。借助任务 IAM 角色，您可以在容器中使用 Amazon SDK 或 Amazon CLI 时将 IAM 权限关联到容器，而无论您使用哪种计算选项。有关 Amazon SDK 如何访问这些凭证的更多信息，请参阅 [Container credential provider](https://docs.amazonaws.cn/sdkref/latest/guide/feature-container-credentials.html)。

**重要**  
容器不是安全边界，使用任务 IAM 角色也不能改变这一点。在 Fargate 上运行的任务都有自己的隔离边界，不与其他任务共享底层内核、CPU 资源、内存资源或弹性网络接口。ECS 上的 EC2 和外部容器实例没有任务隔离（与 Fargate 不同），容器有可能访问同一容器实例上其他任务的凭证。此外，容器还有可能会访问分配给 [ECS 容器实例角色](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/instance_IAM_role.html)的权限。按照[角色建议](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security-iam-roles.html#security-iam-roles-recommendations)部分的建议操作，为容器阻止对 Amazon EC2 实例元数据服务的访问（有关更多信息，请参阅《Amazon EC2 用户指南》中的[使用实例元数据服务访问实例元数据](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)**）。  
请注意，在为任务指定 IAM 角色时，Amazon CLI 或其他 SDK 在该任务的容器中将仅使用该任务角色提供的 Amazon 凭证，而不会从运行任务的 Amazon EC2 或外部实例继承任何 IAM 权限。

## 创建任务 IAM 角色


在创建供任务使用的 IAM 策略时，该策略必须包括您希望任务中的容器承担的权限。您可以使用现有 Amazon 托管策略，也可以从头开始创建满足特定需求的自定义策略。有关更多信息，请参阅《IAM 用户指南》**中的[创建 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html)。

**重要**  
对于 Amazon ECS 任务（适用于所有启动类型），我们建议您为任务使用 IAM 策略和角色。这些凭证允许您的任务在不调用 `sts:AssumeRole` 的情况下发出 Amazon API 请求，以担任已与任务关联的相同角色。如果您的任务需要能代入自己的角色，则必须创建明确允许该角色代入自己的信任策略。有关更多信息，请参阅《IAM 用户指南》中的[更新角色信任策略](https://docs.amazonaws.cn//IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)**。

创建 IAM 策略后，您可以创建 IAM 角色，其中包括您在 Amazon ECS 任务定义中引用的策略。您可以在 IAM 控制台中使用 **Elastic Container Service 任务**使用案例创建该角色。然后，可以将您特定的 IAM 策略附加到该角色，其为任务中的容器提供所需的权限。以下过程说明如何执行此操作。

如果您有多个需要 IAM 权限的任务定义或服务，则应考虑为每个特定的任务定义或服务创建一个具有所需最低权限的角色以便任务进行操作，以便您能够将为每个任务提供的访问权限降到最低。

有关您所在区域的服务端点的信息，请参阅《Amazon Web Services 一般参考 指南》**中的[服务端点](https://docs.amazonaws.cn/general/latest/gr/ecs-service.html#ecs_region)。

IAM 任务角色必须具有指定 `ecs-tasks.amazonaws.com` 服务的信任策略。`sts:AssumeRole` 权限允许您的任务承担与 Amazon EC2 实例使用的不同的 IAM 角色。这样，您的任务不会继承与 Amazon EC2 实例关联的角色。以下是信任策略的示例。替换区域标识符并指定启动任务时使用的 Amazon 账号。

**重要**  
创建任务 IAM 角色时，建议您在与角色关联的信任关系策略中使用 `aws:SourceAccount` 或 `aws:SourceArn` 条件键进一步限制权限范围，以防止混淆代理安全问题。使用 `aws:SourceArn` 条件键指定当前不受支持的特定集群时，应使用通配符来指定所有集群。要了解更多关于混淆代理问题以及如何保护您的 Amazon 账户的信息，请参阅[《IAM 用户指南》](https://docs.amazonaws.cn/IAM/latest/UserGuide/confused-deputy.html)中的*混淆代理问题*。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Principal":{
            "Service":[
               "ecs-tasks.amazonaws.com"
            ]
         },
         "Action":"sts:AssumeRole",
         "Condition":{
            "ArnLike":{
            "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*"
            },
            "StringEquals":{
               "aws:SourceAccount":"111122223333"
            }
         }
      }
   ]
}
```

------

使用以下过程创建策略，通过示例策略从 Amazon S3 检索对象。将所有*用户输入*替换为您自己的值。

------
#### [ Amazon Web Services 管理控制台 ]

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

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

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

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

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

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

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

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":[
               "arn:aws:s3:::my-task-secrets-bucket/*"
            ]
         }
      ]
   }
   ```

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

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

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

------
#### [ Amazon CLI ]

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

1. 使用以下内容创建名为 `s3-policy.json` 的文件。

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Action":[
               "s3:GetObject"
            ],
            "Resource":[
               "arn:aws:s3:::my-task-secrets-bucket/*"
            ]
         }
      ]
   }
   ```

------

1. 使用以下命令通过 JSON 策略文档文件创建 IAM 策略。将所有*用户输入*替换为您自己的值。

   ```
   aws iam create-policy \
         --policy-name taskRolePolicy \
         --policy-document file://s3-policy.json
   ```

------

使用以下过程创建服务角色。

------
#### [ Amazon Web Services 管理控制台 ]

**为 Elastic Container Service 创建服务角色（IAM 控制台）**

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

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

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

1. 对于**服务或使用案例**，选择 **Elastic Container Service**，然后选择 **Elastic Container Service 任务**使用案例。

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

1. 对于**添加权限**，搜索并选择您创建的策略。

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

1. 对于**角色名称**，请为您的角色输入一个名称。在此示例中，键入 `AmazonECSTaskS3BucketRole` 以给角色命名。

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

------
#### [ Amazon CLI ]

1. 创建一个名为 `ecs-tasks-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下内容。替换区域标识符并指定启动任务时使用的 Amazon 账号。

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

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Principal":{
               "Service":[
                  "ecs-tasks.amazonaws.com"
               ]
            },
            "Action":"sts:AssumeRole",
            "Condition":{
               "ArnLike":{
               "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*"
               },
               "StringEquals":{
                  "aws:SourceAccount":"111122223333"
               }
            }
         }
      ]
   }
   ```

------

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

   ```
   aws iam create-role \
         --role-name ecsTaskRole \
         --assume-role-policy-document file://ecs-tasks-trust-policy.json
   ```

1. 使用以下命令检索您创建的 IAM 策略的 ARN。将 *taskRolePolicy* 替换为您创建的策略的名称。

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

1. 将创建的 IAM 策略其附加到 `ecsTaskRole` 角色。将 `policy-arn` 替换为所创建策略的 ARN。

   ```
   aws iam attach-role-policy \
         --role-name ecsTaskRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy
   ```

------

创建该角色后，为该角色添加以下功能的附加权限。


|  功能  |  其他权限  | 
| --- | --- | 
|  使用 ECS Exec  |  [ECS Exec 权限](#ecs-exec-required-iam-permissions)  | 
| 使用来自私有 Amazon ECR 存储库的映像 | [Amazon ECR 权限](#ecr-required-iam-permissions) | 
| 使用 EC2 实例（Windows 和 Linux） | [Amazon EC2 实例附加配置](#task-iam-role-considerations) | 
| 使用外部实例 | [外部实例附加配置](#enable_task_iam_roles) | 
| 使用 Windows EC2 实例 | [Amazon EC2 Windows 实例附加配置](#windows_task_IAM_roles) | 

## Amazon ECR 权限


当您的应用程序代码需要直接与 Amazon ECR 存储库交互时，需要以下权限。请注意，对于只需要从 Amazon ECR 提取映像的基本实施，任务 IAM 角色级别不需要这些权限。相反地，Amazon ECS 任务执行角色应该具有这些权限。有关任务执行角色的更多信息，请参阅[Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

如果在容器中运行的应用程序代码需要直接与 Amazon ECR API 交互，则应向任务 IAM 角色添加以下权限，并在任务定义中包含任务 IAM 角色。有关更多信息，请参阅 *IAM 用户指南*中的[添加和删除 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

为您的任务 IAM 角色使用以下策略，从而为需要直接与 Amazon ECR 交互的容器应用程序添加所需的 Amazon ECR 权限：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## ECS Exec 权限


[ECS Exec](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/ecs-exec.html) 功能需要一个任务 IAM 角色来授予容器在托管 SSM 代理（`execute-command` 代理）和 SSM 服务之间进行通信所需的权限。您应向任务 IAM 角色添加以下权限，并在任务定义中包含任务 IAM 角色。有关更多信息，请参阅 *IAM 用户指南*中的[添加和删除 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

对于您的任务 IAM 角色使用以下策略来添加所需的 SSM 权限。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}
```

------

## Amazon EC2 实例附加配置


建议您将容器实例角色中的权限限制在 `AmazonEC2ContainerServiceforEC2Role` 托管 IAM 策略中使用的最低权限列表的范围内。

Amazon EC2 需要至少为版本 `1.11.0` 的容器代理才能使用任务角色；但建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息，请参阅[更新 Amazon ECS 容器代理](ecs-agent-update.md)。如果您使用经 Amazon ECS 优化的 AMI，您的实例需要至少为 `1.11.0-1` 版的 `ecs-init` 程序包。如果您的实例使用最新的经 Amazon ECS 优化的 AMI，则这些实例将包含所需版本的容器代理和 `ecs-init`。有关更多信息，请参阅 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md)。

如果对容器实例使用的不是经 Amazon ECS 优化的 AMI，请将 `--net=host` 选项添加到 **docker run** 命令，该命令会为所需配置启动代理和以下代理配置变量（有关更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)）：

`ECS_ENABLE_TASK_IAM_ROLE=true`  
为具有 `bridge` 和 `default` 网络模式的容器使用任务的 IAM 角色。

`ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true`  
为具有 `host` 网络模式的容器使用任务的 IAM 角色。此变量仅在代理版本 1.12.0 和更高版本上受支持。

有关示例运行命令，请参阅[手动更新 Amazon ECS 容器代理（适用于非经 Amazon ECS 优化的 AMI）](manually_update_agent.md)。您还需要在容器实例上设置以下联网命令，以便任务中的容器可以检索其 Amazon 凭证：

```
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
```

您必须将这些 **iptables** 规则保存到容器实例，使其在重启后仍然可用。您可以使用 **iptables-save** 和 **iptables-restore** 命令保存 **iptables** 规则并在启动时还原它们。有关更多信息，请查阅您的特定操作系统文档。

要防止使用 `awsvpc` 网络模式的任务运行的容器访问提供给 Amazon EC2 实例配置文件的凭证信息（同时仍允许任务角色提供的权限），请将代理配置文件中的 `ECS_AWSVPC_BLOCK_IMDS` 代理配置变量设置为 `true`，然后重新启动代理。有关更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)。

通过在 Amazon EC2 实例上运行以下 **iptables** 命令，阻止使用 `bridge` 网络模式的任务运行的容器访问提供给 Amazon EC2 实例配置文件的凭证信息，同时仍允许任务角色提供的权限。此命令不影响使用 `host` 或 `awsvpc` 网络模式的任务中的容器。有关更多信息，请参阅 [网络模式](task_definition_parameters.md#network_mode)。
+ 

  ```
  sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
  ```

  您必须将此 **iptables** 规则保存到 Amazon EC2 实例上，使其在重启后仍然可用。使用经 Amazon ECS 优化的 AMI，您可以使用以下命令。对于其他操作系统，请参阅该操作系统的相关文档。

  ```
  sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  ```

## 外部实例附加配置


外部实例需要至少为版本 `1.11.0` 的容器代理才能使用任务 IAM 角色；但建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息，请参阅[更新 Amazon ECS 容器代理](ecs-agent-update.md)。如果您正在使用经 Amazon ECS 优化的 AMI，您的实例将需要至少为 `1.11.0-1` 版的 `ecs-init` 程序包。如果您的实例使用最新的经 Amazon ECS 优化的 AMI，则这些实例将包含所需版本的容器代理和 `ecs-init`。有关更多信息，请参阅 [经 Amazon ECS 优化的 Linux AMI](ecs-optimized_AMI.md)。

如果对容器实例使用的不是经 Amazon ECS 优化的 AMI，请将 `--net=host` 选项添加到 **docker run** 命令，该命令会为所需配置启动代理和以下代理配置变量（有关更多信息，请参阅 [Amazon ECS 容器代理配置](ecs-agent-config.md)）：

`ECS_ENABLE_TASK_IAM_ROLE=true`  
为具有 `bridge` 和 `default` 网络模式的容器使用任务的 IAM 角色。

`ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true`  
为具有 `host` 网络模式的容器使用任务的 IAM 角色。此变量仅在代理版本 1.12.0 和更高版本上受支持。

有关示例运行命令，请参阅[手动更新 Amazon ECS 容器代理（适用于非经 Amazon ECS 优化的 AMI）](manually_update_agent.md)。您还需要在容器实例上设置以下联网命令，以便任务中的容器可以检索其 Amazon 凭证：

```
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
```

您必须将这些 **iptables** 规则保存到容器实例，使其在重启后仍然可用。您可以使用 **iptables-save** 和 **iptables-restore** 命令保存 **iptables** 规则并在启动时还原它们。有关更多信息，请查阅您的特定操作系统文档。

## Amazon EC2 Windows 实例附加配置


**重要**  
这仅适用于 EC2 上使用任务角色的 Windows 容器。

具有 Windows 功能的任务角色需要在 EC2 上进行附加配置。
+ 在启动容器实例时，您必须在容器实例用户数据脚本中设置 `-EnableTaskIAMRole` 选项。`EnableTaskIAMRole` 为任务打开任务 IAM 角色功能。例如：

  ```
  <powershell>
  Import-Module ECSTools
  Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole 
  </powershell>
  ```
+ 您必须使用[Amazon ECS 容器引导脚本](#windows_task_IAM_roles_bootstrap)中提供的联网命令来引导容器。
+ 您必须为任务创建 IAM 角色和策略。有关更多信息，请参阅 [创建任务 IAM 角色](#create_task_iam_policy_and_role)。
+ 任务的 IAM 角色凭证提供程序在容器实例上使用端口 80。因此，如果在容器实例上配置任务的 IAM 角色，则容器无法将端口 80 用于任何端口映射中的主机端口。要在端口 80 上公开容器，建议您为这些容器配置一个使用负载平衡功能的服务。您可以在负载均衡器上使用端口 80。通过这样做，可以将流量传送到容器实例上的另一个主机端口。有关更多信息，请参阅 [使用负载均衡分配 Amazon ECS 服务流量](service-load-balancing.md)。
+ 如果重新启动 Windows 实例，则必须删除代理接口并再次初始化 Amazon ECS 容器代理以备份凭证代理。

### Amazon ECS 容器引导脚本


必须先使用所需的联网命令引导容器，然后容器才能访问容器实例上的凭证代理来获得凭证。当容器启动时，应在容器上运行以下代码示例脚本。

**注意**  
在 Windows 上使用 `awsvpc` 网络模式时，不需要运行此脚本。

如果您运行包含 Powershell 的 Windows 容器，请使用以下脚本：

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
#	http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
 
$gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API
New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API
```

如果您运行的 Windows 容器只有命令 shell，请使用以下脚本：

```
# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
#	http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
 
for /f "tokens=1" %i  in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i
for /f "tokens=3" %i  in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i
netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API
netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API
```

# Amazon ECS 容器实例 IAM 角色
容器实例 IAM 角色

Amazon ECS 容器实例（包括 Amazon EC2 和外部实例）运行 Amazon ECS 容器代理，并需要服务的 IAM 角色，以便了解属于您的代理。在启动容器实例并将其注册到集群之前，必须为容器实例创建 IAM 角色以供使用。该角色在您用于登录控制台或运行 Amazon CLI 命令的账户中创建。

**重要**  
如果要将外部实例注册到集群，则您使用的 IAM 角色也需要 Systems Manager 权限。有关更多信息，请参阅 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

Amazon ECS 提供 `AmazonEC2ContainerServiceforEC2Role` 托管 IAM 策略，该策略包含使用完整 Amazon ECS 功能集所需的权限。此托管策略可以附加到 IAM 角色并与您的容器实例相关联。或者，您可以在创建要使用的自定义策略时使用托管策略作为指导。容器实例角色为 Amazon ECS 容器代理和 Docker 进程守护程序提供代表您调用 Amazon API 所需的权限。有关托管策略的更多信息，请参阅 [AmazonEC2ContainerServiceforEC2Role](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonEC2ContainerServiceforEC2Role)。

## 创建容器实例角色


**重要**  
如果要将外部实例注册到集群，请参阅 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md)。

您可以手动为容器实例创建角色和附加托管 IAM 策略，以便 Amazon ECS 能够在引入未来功能和增强功能时添加这些功能的权限。如果需要，可使用以下过程附加托管 IAM 策略。

------
#### [ Amazon Web Services 管理控制台 ]

**为 Elastic Container Service 创建服务角色（IAM 控制台）**

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

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

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

1. 对于**服务或使用案例**，选择 **Elastic Container Service**，然后选择 **Elastic Container Service 的 EC2 角色**使用案例。

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

1. 在**权限策略**部分，确认是否选择了 **AmazonEC2ContainerServiceforEC2Role** 策略。
**重要**  
**AmazonEC2ContainerServiceforEC2Role** 托管策略应附加到容器实例 IAM 角色，否则使用 Amazon Web Services 管理控制台 创建集群时将收到错误。

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

1.  对于**角色名称**，输入 **ecsInstanceRole**

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

------
#### [ Amazon CLI ]

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

1. 创建以下内容的名为 `instance-role-trust-policy.json` 的文件。  
****  

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

1. 使用以下命令通过信任策略文档创建实例 IAM 角色。

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

1. 使用 [create-instance-profile](https://docs.amazonaws.cn/cli/latest/reference/iam/create-instance-profile.html) 命令创建名为 `ecsInstanceRole-profile` 的实例配置文件。

   ```
   aws iam create-instance-profile --instance-profile-name ecsInstanceRole-profile
   ```

   响应示例

   ```
   {
       "InstanceProfile": {
           "InstanceProfileId": "AIPAJTLBPJLEGREXAMPLE",
           "Roles": [],
           "CreateDate": "2022-04-12T23:53:34.093Z",
           "InstanceProfileName": "ecsInstanceRole-profile",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:instance-profile/ecsInstanceRole-profile"
       }
   }
   ```

1. 将 `ecsInstanceRole` 角色添加到 `ecsInstanceRole-profile` 实例配置文件。

   ```
   aws iam add-role-to-instance-profile \
       --instance-profile-name ecsInstanceRole-profile \
       --role-name ecsInstanceRole
   ```

1. 使用以下命令以将 `AmazonEC2ContainerServiceForEC2Role` 托管策略附加到角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role \
       --role-name ecsInstanceRole
   ```

------

创建该角色后，为该角色添加以下功能的附加权限。


|  功能  |  其他权限  | 
| --- | --- | 
|  Amazon ECR 具有容器映像  |  [Amazon ECR 权限](#container-instance-role-ecr)  | 
| 使用 CloudWatch Logs 监控容器实例 | [监控容器实例的权限](#cwl_iam_policy) | 
| 在 Amazon S3 存储桶中托管配置文件 | [Amazon S3 只读访问权限](#container-instance-role-s3) | 

## Amazon ECR 权限


用于容器实例的 Amazon ECS 容器实例角色必须具有以下有关 Amazon ECR 的 IAM 策略权限。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer",
                "ecr:GetAuthorizationToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

如果您对容器实例使用 `AmazonEC2ContainerServiceforEC2Role` 托管策略，则您的角色将具有适当的权限。

## 设置 awsvpcTrunking 账户设置所需的权限


Amazon ECS 支持使用受支持的 Amazon EC2 实例类型启动已增加 ENI 密度的容器实例。使用此功能时，建议您创建两个容器实例角色。为一个角色启用 `awsvpcTrunking` 账户设置，并将该角色用于需要 ENI 中继的任务。有关 `awsvpcTrunking` 账户设置的信息，请参阅[通过账户设置访问 Amazon ECS 功能](ecs-account-settings.md)。

用于容器实例的容器实例角色必须具有以下 IAM 策略权限才能设置账户设置 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:ListAccountSettings", 
                "ecs:ListAttributes", 
                "ecs:PutAccountSetting" 
            ],
            "Resource": "*"
        }
    ]
}
```

------

要使用容器实例角色，请向实例用户数据添加以下内容：

```
#!/bin/bash
aws ecs put-account-setting --name awsvpcTrunking --value enabled --region region
ECS_CLUSTER=MyCluster>> /etc/ecs/ecs.config
EOF
```

有关将用户数据添加到 EC2 实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[启动时在 Linux 实例上运行命令](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/user-data.html)。

## Amazon S3 只读访问权限


将配置信息存储在 Amazon S3 中的私有存储桶中并向您的容器实例 IAM 角色授予只读访问权限，这是一个允许在启动时配置容器实例的安全方便的方法。您可以将 `ecs.config` 文件的副本存储在私有存储桶中，使用 Amazon CLI Amazon EC2 用户数据安装 ，然后在实例启动时将配置信息复制到 `/etc/ecs/ecs.config`。

有关创建 `ecs.config` 文件，将该文件存储在 Amazon S3, 中并使用此配置启动实例的更多信息，请参阅 [将 Amazon ECS 容器实例配置存储在 Amazon S3 中](ecs-config-s3.md)。

可以使用以下 Amazon CLI 命令允许 Amazon S3 对容器实例角色的只读访问。将 *ecsInstanceRole* 替换为您创建的角色的名称。

```
aws iam attach-role-policy \
      --role-name ecsInstanceRole \
      --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
```

您也可以使用 IAM 控制台将 Amazon S3 只读访问权限（`AmazonS3ReadOnlyAccess`）添加到您的角色。有关更多信息，请参阅《Amazon Identity and Access Management 用户指南》**中的[更新角色权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_update-role-permissions.html)。

## 监控容器实例的权限


在您的容器实例可以将日志数据发送到 CloudWatch Logs 之前，您必须创建一个 IAM 策略，进而允许 Amazon ECS 代理将客户的应用程序日志写入 CloudWatch（通常通过 `awslogs` 驱动程序处理）。创建策略后，将策略附加到 `ecsInstanceRole`。

------
#### [ Amazon Web Services 管理控制台 ]

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

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

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

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

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

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

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

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

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

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

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

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

------
#### [ Amazon CLI ]

1. 使用以下内容创建名为 `instance-cw-logs.json` 的文件。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:PutLogEvents",
                   "logs:DescribeLogStreams"
               ],
               "Resource": ["arn:aws:logs:*:*:*"]
           }
       ]
   }
   ```

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

   ```
   aws iam create-policy \
         --policy-name cwlogspolicy \
         --policy-document file://instance-cw-logs.json
   ```

1. 使用以下命令检索您创建的 IAM 策略的 ARN。将 *cwlogspolicy* 替换为您创建的策略的名称。

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

1. 使用以下命令通过策略 ARN 将策略附加到容器实例 IAM 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsInstanceRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/cwlogspolicy
   ```

------

# Amazon ECS Anywhere IAM 角色


将本地部署服务器或虚拟机（VM）注册到集群时，服务器或虚拟机需要 IAM 角色才能与 Amazon API 通信。您只需为每个创建此 IAM 角色一次 Amazon 账户。但是，此 IAM 角色必须与您注册到集群的每个服务器或虚拟机关联。此角色是 `ECSAnywhereRole`。您可以手动创建此角色。Amazon ECS 可以在您在 Amazon Web Services 管理控制台 中注册外部实例时代表您创建角色。您可以使用 IAM 控制台搜索来搜索 `ecsAnywhereRole` 并查看您的账户是否已有该角色。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 控制台搜索](https://docs.amazonaws.cn/IAM/latest/UserGuide/console_search.html)。

Amazon 提供两个托管 IAM 策略，可在创建 ECS Anywhere IAM 角色、`AmazonSSMManagedInstanceCore` 和 `AmazonEC2ContainerServiceforEC2Role` 策略时使用。`AmazonEC2ContainerServiceforEC2Role` 策略包含的权限可能会提供超出您需要的访问权限。因此，根据您的特定使用案例，我们建议您创建一个自定义策略，仅添加该策略中所需的权限。有关更多信息，请参阅 [Amazon ECS 容器实例 IAM 角色](instance_IAM_role.md)。

任务执行 IAM角色授予 Amazon ECS 容器代理代表您进行 Amazon API 调用的权限。使用任务执行 IAM 角色时，必须在任务定义中指定该角色。有关更多信息，请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

如果满足以下条件之一，则需要任务执行角色：
+ 您正在使用 `awslogs` 日志驱动程序将容器日志发送到 CloudWatch Logs。
+ 您的任务定义指定托管在 Amazon ECR 专用存储库中的容器映像。但是，如果与外部实例关联的 `ECSAnywhereRole` 角色还包含从 Amazon ECR 拉取映像所需的权限，那么任务执行角色不需要包括这些权限。

## 创建 Amazon ECS Anywhere 角色


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

1. 利用以下信任策略创建名为 `ssm-trust-policy.json` 的本地文件。

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

****  

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

------

1. 使用以下 Amazon CLI 命令创建角色并附加信任策略。

   ```
   aws iam create-role --role-name ecsAnywhereRole --assume-role-policy-document file://ssm-trust-policy.json
   ```

1. 使用以下命令附加 Amazon 托管策略。

   ```
   aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
   aws iam attach-role-policy --role-name ecsAnywhereRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role
   ```

您还可以使用 IAM 自定义信任策略工作流来创建该角色。有关更多信息，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

# Amazon ECS 基础设施 IAM 角色
基础设施 IAM 角色

Amazon ECS 基础设施 IAM 角色允许 Amazon ECS 代表您管理集群中的基础设施资源，并在以下情况使用：
+ 您想将 Amazon EBS 卷附加到您的 Fargate 或 EC2 启动类型 Amazon ECS 任务。基础设施角色允许 Amazon ECS 为您的任务管理 Amazon EBS 卷。

  您可以使用 `AmazonECSInfrastructureRolePolicyForVolumes` 托管策略。
+ 您想使用传输层安全性协议（TLS）加密您的 Amazon ECS Service Connect 服务之间的流量。

  您可以使用 `AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity` 托管策略。
+ 您想要创建 Amazon VPC Lattice 目标组。

  您可以使用 `AmazonECSInfrastructureRolePolicyForVpcLattice` 托管策略。
+ 您希望在 Amazon ECS 集群中使用 Amazon ECS 托管实例。基础设施角色允许 Amazon ECS 管理托管实例的生命周期。

  您可以使用 `AmazonECSInfrastructureRolePolicyForManagedInstances` 托管策略。
+ 您想要使用 Express Mode。基础设施角色使 Amazon ECS 能够预置和管理 Express Mode 服务所需的基础设施组件，包括负载均衡、安全组、SSL 证书和自动扩缩配置。

  您可以使用 `AmazonECSInfrastructureRoleforExpressGatewayServices` 托管策略。

 当 Amazon ECS 担任此角色代表您采取行动时，这些事件将在 Amazon CloudTrail 中可见。如果 Amazon ECS 使用该角色来管理附加到任务的 Amazon EBS 卷，则 CloudTrail 日志 `roleSessionName` 将为 `ECSTaskVolumesForEBS`。如果此角色用于加密您的 Service Connect 服务之间的流量，则 CloudTrail 日志 `roleSessionName` 将为 `ECSServiceConnectForTLS`。如果该角色用于为 VPC Lattice 创建目标组，则 CloudTrail 日志 `roleSessionName` 将是 `ECSNetworkingWithVPCLattice`。如果该角色用于管理 Amazon ECS 托管实例，则 CloudTrail 日志 `roleSessionName` 将为 `ECSManagedInstancesForCompute`。您可以使用此名称通过筛选**用户名**在 CloudTrail 控制台中搜索事件。

Amazon ECS 提供了托管策略，其中包含卷挂载、TLS、VPC Lattice 和托管实例所需的权限。有关更多信息，请参阅《Amazon 托管式策略参考指南》**中的 [AmazonECSInfrastructureRolePolicyForVolumes](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForVolumes.html)、[AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity.html)、[AmazonECSInfrastructureRolePolicyForVpcLattice](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForVpcLattice.html)、[AmazonECSInfrastructureRolePolicyForManagedInstances](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForManagedInstances.html) 和 [AmazonECSInfrastructureRoleforExpressGatewayServices](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRoleforExpressGatewayServices.html)。

## 创建 Amazon ECS 基础设施角色


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

1. 创建一个名为 `ecs-infrastructure-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下内容：

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

****  

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

------

1. 使用您在上一步中创建的信任策略，并使用以下 Amazon CLI 命令创建一个名为 `ecsInfrastructureRole` 的角色。

   ```
   aws iam create-role \
         --role-name ecsInfrastructureRole \
         --assume-role-policy-document file://ecs-infrastructure-trust-policy.json
   ```

1. 根据您的使用案例，请将托管策略附加到 `ecsInfrastructureRole` 角色。
   + 要将 Amazon EBS 卷附加到 Fargate 或 EC2 启动类型的 Amazon ECS 任务，请附加 `AmazonECSInfrastructureRolePolicyForVolumes` 托管策略。
   + 要使用传输层安全性协议（TLS）加密 Amazon ECS Service Connect 服务之间的流量，请附加 `AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity` 托管策略。
   + 要创建 Amazon VPC Lattice 目标组，请附加 `AmazonECSInfrastructureRolePolicyForVpcLattice` 托管策略。
   + 如果您想要在 Amazon ECS 集群中使用 Amazon ECS 托管实例，请附加 `AmazonECSInfrastructureRolePolicyForManagedInstances` 托管策略。

   ```
   aws iam attach-role-policy \
         --role-name ecsInfrastructureRole \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForVolumes
   ```

   ```
   aws iam attach-role-policy \
         --role-name ecsInfrastructureRole \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSInfrastructureRolePolicyForServiceConnectTransportLayerSecurity
   ```

   ```
   aws iam attach-role-policy \
         --role-name ecsInfrastructureRole \
         --policy-arn arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForManagedInstances
   ```

您也可以使用 IAM 控制台的**自定义信任策略**工作流程来创建该角色。有关更多信息，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

**重要**  
如果 Amazon ECS 使用基础设施角色来管理附加到您的任务的 Amazon EBS 卷，则请在停止使用 Amazon EBS 卷的任务之前确保满足以下条件。  
该角色未被删除。
该角色的信任策略不会被修改为删除 Amazon ECS 访问权限（`ecs.amazonaws.com`）。
托管策略 `AmazonECSInfrastructureRolePolicyForVolumes` 未被删除。如果您必须修改角色的权限，则请至少保留 `ec2:DetachVolume`、`ec2:DeleteVolume` 和 `ec2:DescribeVolumes` 用于卷删除。
在停止带有附加 Amazon EBS 卷的任务之前删除或修改角色将导致任务陷入 `DEPROVISIONING` 状态，并且关联的 Amazon EBS 卷无法删除。Amazon ECS 将定期自动重试以停止任务并删除该卷，直到恢复必要的权限。您可以使用 [DescribeTasks](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_DescribeTasks.html) API 查看任务的卷附加状态和关联的状态原因。

创建该文件后，您必须向用户授予将该角色传递给 Amazon ECS 的权限。

## 授予将基础设施角色传递给 Amazon ECS 的权限


要使用 ECS 基础设施 IAM 角色，您必须授予用户将该角色传递给 Amazon ECS 的权限。将以下 `iam:PassRole` 权限附加到您的用户。将 *ecsInfrastructureRole* 替换为您创建的基础设施角色的名称。

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

****  

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

------

有关 `iam:Passrole` 和更新用户权限的更多信息，请参阅《Amazon Identity and Access Management 用户指南》**中的[向用户授予权限以将角色传递给 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_passrole.html)和[更改 IAM 用户的权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_users_change-permissions.html)。

# Amazon ECS 托管实例实例配置文件


实例配置文件是一个 IAM 容器，它只包含一个 IAM 角色，并允许 Amazon ECS 托管实例安全地代入该角色。实例配置文件包含 ECS 代理代入的实例角色，用于向集群注册实例并与 ECS 服务进行通信。

**重要**  
如果您将 Amazon ECS 托管实例与 Amazon 托管基础设施策略一起使用，则实例配置文件必须命名为 `ecsInstanceRole`。如果您为基础设施角色使用自定义策略，则实例配置文件可以具有备用名称。

## 使用信任策略创建角色


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

1. 创建一个名为 `ecsInstanceRole-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下内容：

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

****  

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

------

1. 使用您在上一步中创建的信任策略，并使用以下 Amazon CLI 命令创建一个名为 `ecsInstanceRole` 的角色。

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

1. 将 Amazon 托管 `AmazonECSInstanceRolePolicyForManagedInstances` 策略 附加到 `ecsInstanceRole` 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsInstanceRole \
         --policy-arn arn:aws:iam::aws:policy/AmazonECSInstanceRolePolicyForManagedInstances
   ```
**注意**  
如果您选择应用最低权限，并指定您自己的权限，则可以添加以下权限，以帮助排查 Amazon ECS 托管实例与任务相关的问题：  
`ecs:StartTelemetrySession`
`ecs:PutSystemLogEvents`

您也可以使用 IAM 控制台的**自定义信任策略**工作流程来创建该角色。有关更多信息，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

创建该文件后，您必须向用户授予将该角色传递给 Amazon ECS 的权限。

## 使用 Amazon CLI 创建实例配置文件


创建角色后，请使用 Amazon CLI 创建实例配置文件：

```
aws iam create-instance-profile --instance-profile-name ecsInstanceRole 
```

将角色添加到实例配置文件中：

```
aws iam add-role-to-instance-profile \
   --instance-profile-name ecsInstanceRole \
   --role-name ecsInstanceRole
```

验证是否已成功创建配置文件：

```
aws iam get-instance-profile --instance-profile-name ecsInstanceRole 
```

# 适用于负载均衡器的 Amazon ECS 基础设施 IAM 角色
适用于负载均衡器的基础设施 IAM 角色

适用于负载均衡器的 Amazon ECS 基础设施 IAM 角色允许 Amazon ECS 代表您管理集群中的负载均衡器资源，并在以下情况使用：
+ 您想要将 Amazon ECS 与蓝绿部署配合使用。基础设施角色允许 Amazon ECS 为您的部署管理负载均衡器资源。
+ 在部署操作期间，您需要使用 Amazon ECS 来创建、修改或删除负载均衡器资源，例如目标组和侦听器。

当 Amazon ECS 担任此角色代表您采取行动时，这些事件将在 Amazon CloudTrail 中可见。如果 Amazon ECS 使用该角色为蓝绿部署管理负载均衡器资源，则 CloudTrail 日志 `roleSessionName` 将为 `ECSNetworkingWithELB` 或 `ecs-service-scheduler`。您可以使用此名称通过筛选**用户名**在 CloudTrail 控制台中搜索事件。

Amazon ECS 提供托管式策略，其中包含管理负载均衡器所需的权限。有关更多信息，请参阅《Amazon 托管式策略参考指南》**中的 [AmazonECSInfrastructureRolePolicyForLoadBalancers](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECSInfrastructureRolePolicyForLoadBalancers.html)。

## 创建适用于负载均衡器的 Amazon ECS 基础设施角色


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

1. 创建一个名为 `ecs-infrastructure-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下内容：

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

****  

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

------

1. 使用您在上一步中创建的信任策略，并使用以下 Amazon CLI 命令创建一个名为 `ecsInfrastructureRoleForLoadBalancers` 的角色。

   ```
   aws iam create-role \
         --role-name ecsInfrastructureRoleForLoadBalancers \
         --assume-role-policy-document file://ecs-infrastructure-trust-policy.json
   ```

1. 将 Amazon 托管 `AmazonECSInfrastructureRolePolicyForLoadBalancers` 策略 附加到 `ecsInfrastructureRoleForLoadBalancers` 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsInfrastructureRoleForLoadBalancers \
         --policy-arn arn:aws:iam::aws:policy/AmazonECSInfrastructureRolePolicyForLoadBalancers
   ```

您也可以使用 IAM 控制台的**自定义信任策略**工作流程来创建该角色。有关更多信息，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

**重要**  
如果 Amazon ECS 使用该基础设施角色来为蓝绿部署管理负载均衡器资源，在删除或修改角色前，请确保完成以下事项：  
在进行主动部署时，不会删除该角色。
该角色的信任策略不会被修改为删除 Amazon ECS 访问权限（`ecs.amazonaws.com`）。
在进行主动部署时，不会移除托管式策略 `AmazonECSInfrastructureRolePolicyForLoadBalancers`。
在主动的蓝绿部署期间删除或修改角色可能会导致部署失败，并可能使您的服务处于不一致的状态。

创建该文件后，您必须向用户授予将该角色传递给 Amazon ECS 的权限。

## 授予将基础设施角色传递给 Amazon ECS 的权限


要使用适用于负载均衡器的 ECS 基础设施 IAM 角色，您必须授予用户将该角色传递给 Amazon ECS 的权限。将以下 `iam:PassRole` 权限附加到您的用户。将 *ecsInfrastructureRoleForLoadBalancers* 替换为您创建的基础设施角色的名称。

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

****  

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

------

有关 `iam:Passrole` 和更新用户权限的更多信息，请参阅《Amazon Identity and Access Management 用户指南》**中的[向用户授予权限以将角色传递给 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_use_passrole.html)和[更改 IAM 用户的权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_users_change-permissions.html)。

# Amazon ECS CodeDeploy IAM 角色
CodeDeploy IAM 角色

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

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

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

## 创建 CodeDeploy 角色


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

------
#### [ Amazon Web Services 管理控制台 ]

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

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

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

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

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

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

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

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

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

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

------
#### [ Amazon 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 角色。

### 任务执行角色权限


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

创建策略

------
#### [ Amazon Web Services 管理控制台 ]

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

1. 登录Amazon Web Services 管理控制台，然后通过以下网址打开 IAM 控制台：[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/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.amazonaws.cn/IAM/latest/UserGuide/troubleshoot_policies.html#troubleshoot_viseditor-restructure)。

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

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

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

------
#### [ Amazon 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
   ```

------

# Amazon ECS EventBridge IAM 角色
EventBridge IAM 角色

在您能够将 Amazon ECS 计划任务与 EventBridge 规则和目标配合使用之前，EventBridge 服务需要代表您运行 Amazon ECS 任务的权限。这些权限由 EventBridge IAM 角色（`ecsEventsRole`）提供。

`AmazonEC2ContainerServiceEventsRole` 策略如下所示。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["ecs:RunTask"],
            "Resource": ["*"]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": ["*"],
            "Condition": {
                "StringLike": {"iam:PassedToService": "ecs-tasks.amazonaws.com"}
            }
        },
        {
            "Effect": "Allow",
            "Action": "ecs:TagResource",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ecs:CreateAction": ["RunTask"]
                }
            }
        }
    ]
}
```

------

如果计划任务需要使用任务执行角色、任务角色或任务角色覆盖，则必须将每个任务执行角色、任务角色或任务角色覆盖的 `iam:PassRole` 权限添加到 EventBridge IAM 角色。有关任务执行角色的更多信息，请参阅[Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)。

**注意**  
指定您的任务执行角色或任务角色覆盖的完整 ARN。

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

****  

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

------

配置计划任务时，您可以选择让 Amazon Web Services 管理控制台 创建 EventBridge 角色。有关更多信息，请参阅 [使用 Amazon EventBridge 调度器计划 Amazon ECS 任务](tasks-scheduled-eventbridge-scheduler.md)。

## 创建 EventBridge 角色


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

1. 创建一个名为 `eventbridge-trust-policy.json` 的文件，其中包含要用于 IAM 角色的信任策略。该文件应包含以下内容：

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

****  

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

------

1. 使用以下命令创建一个 IAM 角色，该角色使用您在上一步中创建的信任策略命名为 `ecsEventsRole`。

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

1. 使用以下命令将 Amazon 托管 `AmazonEC2ContainerServiceEventsRole` 附加到 `ecsEventsRole` 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsEventsRole \
         --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceEventsRole
   ```

您也可以使用 IAM 控制台的**自定义信任策略**工作流程（[https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/)）来创建该角色。有关更多信息，请参阅《IAM 用户指南》**中的[使用自定义信任策略创建角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-custom.html)。

## 将策略附加到 `ecsEventsRole` 角色


您可以使用以下过程将任务执行角色的权限添加到 EventBridge IAM 角色。

------
#### [ Amazon Web Services 管理控制台 ]

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

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

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

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

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

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

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

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

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

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

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

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

------
#### [ Amazon CLI ]

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

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

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

****  

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

------

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

   ```
   aws iam create-policy \
         --policy-name eventsTaskExecutionPolicy \
         --policy-document file://ev-iam-passrole.json
   ```

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

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

1. 使用以下命令通过策略 ARN 将策略附加到 EventBridge IAM 角色。

   ```
   aws iam attach-role-policy \
         --role-name ecsEventsRole \
         --policy-arn arn:aws:iam:111122223333:aws:policy/eventsTaskExecutionPolicy
   ```

------

# Amazon ECS 控制台所需的权限


遵循授予最低权限的最佳实践，您可以使用 `AmazonECS_FullAccess` 托管策略作为创建您自己的自定义策略的模板。这样，您就可以根据您的特定要求取消或添加托管策略的权限。有关更多信息，请参阅《Amazon Managed Policy Reference》**中的 [AmazonECS\$1FullAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonECS_FullAccess.html)。

## 创建 IAM 角色的权限


以下操作需要额外的权限才能完成操作：
+ 注册外部实例：有关更多信息，请参阅 [Amazon ECS Anywhere IAM 角色](iam-role-ecsanywhere.md) 
+ 注册任务定义：有关更多信息，请参阅 [Amazon ECS 任务执行 IAM 角色](task_execution_IAM_role.md)
+ 创建用于计划任务的 EventBridge 规则：有关更多信息，请参阅 [Amazon ECS EventBridge IAM 角色](CWE_IAM_role.md)

您可以通过先在 IAM 中创建角色来添加这些权限，然后再在 Amazon ECS 控制台中使用这些权限。如果您没有创建角色，Amazon ECS 控制台将代表您创建角色。

## 将外部实例注册到集群所需的权限


在向集群注册外部实例并想要创建新的外部实例（`ecsExternalInstanceRole`）角色时，您需要额外的权限。

需要以下额外权限：
+ `iam` – 允许主体创建并列出 IAM 角色及其附加的策略。
  + iam:AttachRolePolicy
  + iam:CreateRole
  + am:CreateInstanceProfile
  + iam:AddRoleToInstanceProfile
  + iam:ListInstanceProfilesForRole
  + iam:GetRole
+ `ssm` – 允许主体向 Systems Manager 注册外部实例。

**注意**  
要选择现有的 `ecsExternalInstanceRole`，您必须拥有 `iam:GetRole` 和 `iam:PassRole` 权限。

以下策略包含所需的权限，并将操作限制到 `ecsExternalInstanceRole` 角色。

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

****  

```
{
"Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "iam:AttachRolePolicy",
              "iam:CreateRole",
              "iam:CreateInstanceProfile",
              "iam:AddRoleToInstanceProfile",
              "iam:ListInstanceProfilesForRole",
              "iam:GetRole"
          ],
          "Resource": "arn:aws:iam::*:role/ecsExternalInstanceRole"
      },
      {
          "Effect": "Allow",
          "Action": ["iam:PassRole","ssm:CreateActivation"],
          "Resource": "arn:aws:iam::*:role/ecsExternalInstanceRole"
      }
    ]
}
```

------

## 注册任务定义所需的权限


注册任务定义并想要创建新的任务执行（`ecsTaskExecutionRole`）角色时，您需要额外的权限。

需要以下额外权限：
+ `iam` – 允许主体创建并列出 IAM 角色及其附加的策略。
  + iam:AttachRolePolicy
  + iam:CreateRole
  + iam:GetRole

**注意**  
要选择现有的 `ecsTaskExecutionRole`，您必须拥有 `iam:GetRole` 权限。

以下策略包含所需的权限，并将操作限制到 `ecsTaskExecutionRole` 角色。

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

****  

```
{
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iam:AttachRolePolicy",
            "iam:CreateRole",
            "iam:GetRole"
        ],
        "Resource": "arn:aws:iam::*:role/ecsTaskExecutionRole"
        }
    ]
}
```

------

## 使用 Amazon Q 开发者版在控制台中提供建议所需的权限


 要让 Amazon Q 开发者版在 Amazon ECS 控制台中提供建议，您必须为您的 IAM 用户或角色启用正确的 IAM 权限。您必须添加 `codewhisperer:GenerateRecommendations` 权限。

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

****  

```
{
"Statement": [
      {
            "Sid": "AmazonQDeveloperPermissions",
            "Effect": "Allow",
            "Action": ["codewhisperer:GenerateRecommendations"],
            "Resource": "*"
        }
    ]
}
```

------

 要在 Amazon ECS 控制台中使用内联聊天，您必须为您的 IAM 用户或角色启用正确的 IAM 权限。您必须添加 `q:SendMessage` 权限。

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

****  

```
{
"Statement": [
    {
        "Sid": "AmazonQDeveloperInlineChatPermissions",
        "Effect": "Allow",
        "Action": ["q:SendMessage"],
        "Resource": "*"
    }
  ]
}
```

------

## 为计划任务创建 EventBridge 规则所需的权限


在计划任务并想要创建新的 CloudWatch Events 角色（`ecsEventsRole`）角色时，您需要额外的权限。

需要以下额外权限：
+ `iam`– 允许主体创建和列出 IAM 角色及其附加策略，并允许 Amazon ECS 将角色传递给其他服务以代入该角色。

**注意**  
要选择现有的 `ecsEventsRole`，您必须拥有 `iam:GetRole` 和 `iam:PassRole` 权限。

以下策略包含所需的权限，并将操作限制到 `ecsEventsRole` 角色。

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

****  

```
{
 "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iam:AttachRolePolicy",
            "iam:CreateRole",
            "iam:GetRole",
            "iam:PassRole"
        ],
        "Resource": "arn:aws:iam::*:role/ecsEventsRole"
        }
    ]
}
```

------

## 查看服务部署所需的权限


 当您遵循授予最低权限的最佳实践时，需要添加额外的权限，才能在控制台中查看服务部署。

您需要执行以下操作的权限：
+ ListServiceDeployments
+ DescribeServiceDeployments
+ DescribeServiceRevisions

您需要访问以下资源的权限：
+ 服务
+ 服务部署
+ 服务修订

以下示例策略包含所需的权限，并将操作限制到特定服务。

将 `account`、`cluster-name` 和 `service-name` 替换为您的值。

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

****  

```
{
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "ecs:ListServiceDeployments",
            "ecs:DescribeServiceDeployments",
            "ecs:DescribeServiceRevisions"
        ],
        "Resource": [
            "arn:aws:ecs:us-east-1:123456789012:service/cluster-name/service-name",
            "arn:aws:ecs:us-east-1:123456789012:service-deployment/cluster-name/service-name/*",
            "arn:aws:ecs:us-east-1:123456789012:service-revision/cluster-name/service-name/*"
            ]
        }
   ]
}
```

------

## 在 Container Insights 中查看 Amazon ECS 生命周期事件所需的权限


查看生命周期事件需要以下权限。将以下权限作为内联策略添加到该角色。有关更多信息，请参阅[添加和删除 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)
+ events:DescribeRule
+ events:ListTargetsByRule
+ logs:DescribeLogGroups

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "events:DescribeRule",
        "events:ListTargetsByRule",
        "logs:DescribeLogGroups"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 在 Container Insights 中启用 Amazon ECS 生命周期事件所需的权限


配置生命周期事件需要以下权限：
+ events:PutRule
+ events:PutTargets
+ logs:CreateLogGroup

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "events:PutRule",
        "events:PutTargets",
        "logs:CreateLogGroup"
      ],
      "Resource": "*"
    }
  ]
}
```

------

# Amazon ECS 控制台所需的 Amazon CloudFormation 权限


在使用Amazon Web Services 管理控制台创建资源之前，您需要确保拥有正确的 IAM 权限。要首先了解如何为 Amazon ECS 控制台设置权限，请参阅 [Amazon ECS 控制台所需的权限](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/console-permissions.html)。

在以下情况下，Amazon ECS 控制台由 Amazon CloudFormation 提供支持，并且需要额外的 IAM 权限：
+ 创建集群
+ 创建服务
+ 创建容量提供程序

您可以为其他权限创建策略，然后将其附加到用于访问控制台的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建 IAM 策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。

## 创建集群所需的权限


在控制台中创建集群时，您需要额外的权限来授予您管理 Amazon CloudFormation 堆栈的权限。

 需要以下额外权限：
+ `cloudformation`— 允许委托人创建和管理 Amazon CloudFormation 堆栈。这是使用 Amazon Web Services 管理控制台 创建 Amazon ECS 集群和后续管理这些集群时所必需的。
+ `ssm` – 允许 Amazon CloudFormation 引用最新的 Amazon ECS 优化型 AMI。这在使用 Amazon Web Services 管理控制台 创建 Amazon ECS 集群时为必需。

以下策略包含所需的 Amazon CloudFormation 权限，并将操作限制为在 Amazon ECS 控制台中创建的资源。

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

****  

```
{
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack",
                "cloudformation:DescribeStack*",
                "cloudformation:UpdateStack"
             ],
            "Resource": [
                "arn:*:cloudformation:*:*:stack/Infra-ECS-Cluster-*"
            ]
      },
      {
          "Effect": "Allow",
          "Action": "ssm:GetParameters",
          "Resource": [
            "arn:aws:ssm:*:*:parameter/aws/service/ecs/optimized-ami/amazon-linux-2*/*",
            "arn:aws:ssm:*:*:parameter/aws/service/ecs/optimized-ami/amazon-linux-2023*/*"
          ]
      }
   ]
}
```

------

如果您尚未创建 Amazon ECS 容器实例角色（`ecsInstanceRole`），并且正在创建使用 Amazon EC2 实例的集群，则控制台将代表您创建该角色。

此外，如果您使用自动扩缩组，则需要额外的权限，以便控制台在使用集群自动扩缩功能时可以向自动扩缩组添加标签。

需要以下额外权限：
+ `autoscaling` – 允许控制台标记 Amazon EC2 Auto Scaling 组。使用集群自动扩缩功能时，在管理 Amazon EC2 Auto Scaling 组时需要此项。该标签是 ECS 管理的标签，控制台自动将其添加到组中，以表示它是在控制台中创建的。
+ `iam`— 允许委托人列出 IAM 角色及其附加的策略。委托人还可以列出 Amazon EC2 实例可用的实例配置文件。

以下策略包含所需的 IAM 权限，并将操作限制到 `ecsInstanceRole` 角色。

自动扩缩权限不受限制。

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

****  

```
{
  "Statement": [
      {
          "Effect": "Allow",
            "Action": [
              "iam:AttachRolePolicy",
              "iam:CreateRole",
              "iam:CreateInstanceProfile",
              "iam:AddRoleToInstanceProfile",
              "iam:ListInstanceProfilesForRole",
              "iam:GetRole"
            ],
            "Resource": "arn:aws:iam::*:role/ecsInstanceRole"
        },
        {
            "Effect": "Allow",
            "Action": "autoscaling:CreateOrUpdateTags",
            "Resource": "*"
        }
    ]
}
```

------

## 创建服务所需的权限


在控制台中创建服务时，您需要额外的权限来授予您管理 Amazon CloudFormation 堆栈的权限。需要以下额外权限：
+ `cloudformation`— 允许委托人创建和管理 Amazon CloudFormation 堆栈。这是使用 Amazon Web Services 管理控制台 创建 Amazon ECS 服务和后续管理这些服务时所必需的。

以下策略包含所需的权限，并将操作限制为在 Amazon ECS 控制台中创建的资源。

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

****  

```
{
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack",
                "cloudformation:DescribeStack*",
                "cloudformation:UpdateStack"
             ],
            "Resource": [
                "arn:*:cloudformation:*:*:stack/ECS-Console-V2-Service-*"
            ]
      }
   ]
}
```

------

# Amazon ECS 蓝绿部署中 Lambda 函数所需的权限


在 Amazon ECS 蓝绿部署中将 Lambda 函数作为部署生命周期挂钩时，需要创建具有特定权限的 IAM 角色。此角色允许 Amazon ECS 在部署生命周期的各个阶段调用 Lambda 函数。

需要以下额外权限：
+ `lambda:InvokeFunction`：允许 Amazon ECS 在部署过程中调用配置为生命周期挂钩的 Lambda 函数。

对于该信任策略，您需要允许服务代入此角色：

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

****  

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

------

# Amazon ECS 服务自动扩缩所需的 IAM 权限


通过 Amazon ECS、CloudWatch 和 Application Auto Scaling API 的组合，服务自动扩缩成为可能。使用 Amazon ECS 创建和更新服务，使用 CloudWatch 创建警报，使用 Application Auto Scaling 创建扩展策略。

除了用于创建和更新服务的标准 IAM 权限外，与服务自动扩缩设置进行交互还需要以下权限。
+ `application-autoscaling:*`
+ `ecs:DescribeServices`
+ `ecs:UpdateService`
+ `cloudwatch:DescribeAlarms`
+ `cloudwatch:PutMetricAlarm`
+ `cloudwatch:DeleteAlarms`
+ `cloudwatch:DescribeAlarmHistory`
+ `cloudwatch:DescribeAlarmsForMetric`
+ `cloudwatch:GetMetricStatistics`
+ `cloudwatch:ListMetrics`
+ `cloudwatch:DisableAlarmActions`
+ `cloudwatch:EnableAlarmActions`
+ `iam:CreateServiceLinkedRole`
+ `sns:CreateTopic`
+ `sns:Subscribe`
+ `sns:Get*`
+ `sns:List*`

Application Auto Scaling 服务还需要描述 Amazon ECS 服务和 CloudWatch 警报的权限，以及代表您修改服务的预期数量的权限。`sns:` 权限用于在超过阈值时 CloudWatch 向 Amazon SNS 主题发送的通知。如果您为 Amazon ECS 服务使用自动扩展功能，它将创建一个名为 `AWSServiceRoleForApplicationAutoScaling_ECSService` 的服务相关角色。此服务相关角色授予 Application Auto Scaling 权限，以描述策略警报、监控服务的当前运行的任务数以及修改服务的所需计数。Application Auto Scaling 的原托管 Amazon ECS角色为 `ecsAutoscaleRole`，但今后已不再需要。此服务相关角色是 Application Auto Scaling 的默认角色。有关更多信息，请参阅《Application Auto Scaling 用户指南》**中的 [Application Auto Scaling 的服务相关角色](https://docs.amazonaws.cn/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html)。

如果您在 CloudWatch 指标可用于 Amazon ECS 之前已创建您的 Amazon ECS 容器实例，则可能需要添加 `ecs:StartTelemetrySession` 权限。有关更多信息，请参阅 [注意事项](cloudwatch-metrics.md#enable_cloudwatch)。

# 在创建时授予标记资源的权限
在创建过程中，为资源添加标签

以下标签创建 Amazon ECS API 操作允许您在创建资源时指定标签。如果在资源创建操作中指定了标签，则 Amazon 会执行额外的授权，以验证是否分配了正确的权限以创建标签。
+ `CreateCapacityProvider`
+ `CreateCluster`
+ `CreateService`
+ `CreateTaskSet`
+ `RegisterContainerInstance`
+ `RegisterTaskDefinition`
+ `RunTask`
+ `StartTask`

您可以使用资源标签来实现基于属性的控制（ABAC）。有关更多信息，请参阅[使用资源标签控制对 Amazon ECS 资源的访问](control-access-with-tags.md)和[为 Amazon ECS 资源添加标签](ecs-using-tags.md)。

为允许在创建时添加标签，请创建或修改策略，以包含使用创建该资源的操作（如 `ecs:CreateCluster` 或 `ecs:RunTask` 和 `ecs:TagResource`）的权限。

以下示例演示了一个策略，该策略使用户能够创建集群和在集群创建过程中添加标签。用户无权标记任何现有资源 (他们无法直接调用 `ecs:TagResource` 操作)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ecs:CreateCluster"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ecs:TagResource"
      ],
      "Resource": "*",
      "Condition": {
         "StringEquals": {
                  "ecs:CreateAction": [
                      "CreateCluster",
                      "CreateCapacityProvider",
                      "CreateService",
                      "CreateTaskSet",
                      "RegisterContainerInstance",
                      "RegisterTaskDefinition",
                      "RunTask",
                      "StartTask"
                  ]
          }
       }
    }
  ]
}
```

仅当用户在资源创建操作中应用了标签时，系统才会评估 `ecs:TagResource` 操作。因此，如果未在此请求中指定任何标签，则拥有创建资源权限（假定没有标记条件）的用户无需具备使用 `ecs:TagResource` 操作的权限。但是，如果用户不具备使用 `ecs:TagResource` 操作的权限而又试图创建带标签的资源，则请求将失败。

## Amazon ECS 控制对特定标签的访问


您可以在 IAM 策略的 `Condition` 元素中使用其他条件来控制可应用到资源的标签键和值。

以下条件键可用于上一节中的示例：
+ `aws:RequestTag`：指示请求中必须存在特定的标签键或标签键和值。也可在此请求中指定其他标签。
  + 与 `StringEquals` 条件运算符配合使用，以强制实施特定的标签键和值组合，例如强制实施标签 `cost-center`=`cc123`：

    ```
    "StringEquals": { "aws:RequestTag/cost-center": "cc123" }
    ```
  + 与 `StringLike` 条件运算符配合使用，以在请求中强制实施特定的标签键；如强制实施标签键 `purpose`：

    ```
    "StringLike": { "aws:RequestTag/purpose": "*" }
    ```
+ `aws:TagKeys`：强制实施在请求中使用的标签键。
  + 与 `ForAllValues` 修饰符配合使用，以只强制实施请求中提供的特定标签键（如果在请求中指定了标签，则只允许特定的标签键；不允许任何其他标签）。例如，允许标签键 `environment` 或 `cost-center`：

    ```
    "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] }
    ```
  + 与 `ForAnyValue` 修饰符配合使用，以强制请求中至少存在一个指定的标签键。例如，强制请求中至少存在标签键 `environment` 或 `webserver` 中的一个：

    ```
    "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] }
    ```

上述条件键可应用于支持标记的资源创建操作，以及 `ecs:TagResource` 操作。要了解 Amazon ECS API 操作是否支持添加标签，请参阅 [Amazon ECS 的操作、资源和条件键](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)。

为强制用户指定标签，在创建资源时，您必须使用 `aws:RequestTag` 条件键或 `aws:TagKeys` 条件键，并在资源创建操作中使用修饰符 `ForAnyValue`。如果用户没有为资源创建操作指定标签，则不会对 `ecs:TagResource` 操作进行评估。

对于条件，条件键不区分大小写，条件值区分大小写。因此，要强制标签键区分大小写，请使用 `aws:TagKeys` 条件键，其中标签键指定为条件中的值。

 有关多值条件的更多信息，请参阅《IAM 用户指南》**中的[具有多个上下文键或值的条件](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-logic-multiple-context-keys-or-values.html)。

# 使用资源标签控制对 Amazon ECS 资源的访问


在创建向用户授予使用 Amazon ECS 资源的权限的 IAM 策略时，可以在该策略的 `Condition` 元素中包含标签信息，以根据标签控制访问权限。这称为基于属性的访问权限控制（ABAC）。ABAC 可以让您更好地控制用户可以修改、使用或删除哪些资源。有关更多信息，请参阅[什么是适用于 Amazon 的 ABAC？](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)

例如，您可以创建一个策略，允许用户删除集群，但在集群具有 `environment=production` 标签时拒绝此操作。为此，您可以使用 `aws:ResourceTag` 条件键来基于附加到资源的标签允许或拒绝对资源的访问。

```
"StringEquals": { "aws:ResourceTag/environment": "production" }
```

要了解 Amazon ECS API 操作是否支持使用 `aws:ResourceTag` 条件键控制访问，请参阅 [Amazon ECS 的操作、资源和条件键](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazonelasticcontainerservice.html)。请注意，`Describe` 操作不支持资源级权限，因此，您必须在不带条件的单独语句中指定它们。

有关示例 IAM 策略，请参阅 [Amazon ECS 示例策略](iam-policies-ecs-console.md)。

如果您基于标签允许或拒绝用户访问资源，则必须考虑显式拒绝用户对相同资源添加或删除这些标签的能力。否则，用户可能通过修改资源标签来绕过您的限制并获得资源访问权限。

# Amazon ECS 示例策略
策略示例

您可以使用 IAM 策略向用户授予在 Amazon ECS 控制台中查看和使用特定资源的权限。您可以使用上一部分中的策略；但是，这些策略设计用于使用 Amazon CLI 或 Amazon 开发工具包发出的请求。

## 示例：允许用户根据标签删除 Amazon ECS 集群


当标签的键/值对为“目的/测试”时，以下策略允许用户删除集群。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ecs:DeleteCluster"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:ecs:us-east-1:111122223333:cluster/*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/Purpose": "Testing"
                }
            }
        }
    ]
}
```

------

# 对 Amazon Elastic Container Service 标识和访问进行故障排除
问题排查

可以使用以下信息，帮助您诊断和修复在使用 Amazon ECS 和 IAM 时可能遇到的常见问题。

**Topics**
+ [

## 我无权在 Amazon ECS 中执行操作
](#security_iam_troubleshoot-no-permissions)
+ [

## 我无权执行 iam:PassRole
](#security_iam_troubleshoot-passrole)
+ [

## 我希望允许我的 Amazon Web Services 账户 以外的人访问我的 Amazon ECS 资源
](#security_iam_troubleshoot-cross-account-access)
+ [

## 我的 Amazon ECS 托管实例实例配置文件有问题
](#security_iam_instance-profile)
+ [

## 其他故障排除资源
](#security_iam_troubleshoot-additional-errors)

## 我无权在 Amazon ECS 中执行操作


如果您收到错误提示，指明您无权执行某个操作，则必须更新策略以允许执行该操作。

当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `my-example-widget` 资源的详细信息，但不拥有虚构 `ecs:GetWidget` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: ecs:GetWidget on resource: my-example-widget
```

在此情况下，必须更新 `mateojackson` 用户的策略，以允许使用 `ecs:GetWidget` 操作访问 `my-example-widget` 资源。

如果您需要帮助，请联系 Amazon 管理员。您的管理员是提供登录凭证的人。

## 我无权执行 iam:PassRole


如果您收到一个错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给 Amazon ECS。

有些 Amazon Web Services 服务 允许将现有角色传递到该服务，而不是创建新服务角色或服务关联角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 Amazon ECS 中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系 Amazon 管理员。您的管理员是提供登录凭证的人。

## 我希望允许我的 Amazon Web Services 账户 以外的人访问我的 Amazon ECS 资源


您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表（ACL）的服务，您可以使用这些策略向人员授予对您的资源的访问权。

要了解更多信息，请参阅以下内容：
+ 要了解 Amazon ECS 是否支持这些功能，请参阅 [如何将 Amazon Elastic Container Service 与 IAM 结合使用](security_iam_service-with-iam.md)。
+ 要了解如何为您拥有的 Amazon Web Services 账户中的资源提供访问权限，请参阅《IAM 用户指南》**中的[为您拥有的另一个 Amazon Web Services 账户中的 IAM 用户提供访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)。
+ 要了解如何为第三方 Amazon Web Services 账户 提供您的资源的访问权限，请参阅《IAM 用户指南》**中的[为第三方拥有的 Amazon Web Services 账户 提供访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)。
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 我的 Amazon ECS 托管实例实例配置文件有问题


如果您使用 Amazon ECS 提供的 `AmazonECSInfrastructureRolePolicyForManagedInstances` 托管策略，则实例配置文件必须将 `ecsInstanceRole` 作为前缀。原因是托管策略仅有权传递具有此前缀的角色。

## 其他故障排除资源


以下页面提供了有关错误代码的信息：
+  [Amazon ECS 已停止任务错误消息](stopped-task-error-codes.md) 
+  [查看 Amazon ECS 服务事件消息](service-event-messages.md) 

# Amazon ECS 的 IAM 最佳实践
IAM 最佳实践

您可以使用 Amazon Identity and Access Management（IAM）通过基于规则的策略来管理和控制对您的 Amazon 服务和资源的访问权限，以实现身份验证和授权目的。更具体地说，通过此服务，您可以使用应用于用户、组或角色的策略来控制对 Amazon 资源的访问权限。在这三者中，用户是可以访问您的资源的账户。IAM 角色是一组可由经过身份验证的身份承担的权限，该身份与 IAM 之外的特定身份无关。有关更多信息，请参阅[访问管理的 Amazon ECS 概览：权限和策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_access-management.html)。

## 遵循最低权限访问策略


创建限定范围的策略，以允许用户执行其规定的工作。例如，如果开发者需要定期停止某项任务，请创建一个仅允许该特定操作的策略。以下示例仅允许用户在具有特定 Amazon 资源名称（ARN）的集群上停止属于特定 `task_family` 的任务。在条件中引用 ARN 也是使用资源级权限的一个示例。您可以使用资源级权限来指定要向其应用操作的资源。有关更多信息，请参阅 [Amazon ECS 的策略资源](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/security_iam_service-with-iam.html#security_iam_service-with-iam-id-based-policies-resources)。

## 将集群资源作为管理边界


范围过于狭窄的策略可能会导致角色激增并增加管理开销。与其创建仅限于特定任务或服务的角色，不如创建限制于集群的角色并将该集群用作您的主要管理边界。

## 创建自动化管道将最终用户与 API 隔离开来


您可以通过创建管道来限制用户可以使用的操作，这些管道会自动打包应用程序并将其部署到 Amazon ECS 集群上。这会有效地将创建、更新和删除任务的工作委托给管道。有关更多信息，请参阅《Amazon CodePipeline 用户指南》**中的[教程：使用 CodePipeline 进行 Amazon ECS 标准部署](https://docs.amazonaws.cn/codepipeline/latest/userguide/ecs-cd-pipeline.html)。

## 使用策略条件来增加一层安全性


当您需要增加安全层时，请在策略中添加一个条件。如果您正在执行特权操作或需要限制可对特定资源执行的一组操作，则这可能很有用。以下示例策略在删除集群时需要多因素授权。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:DeleteCluster"
      ],
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": "true"
        }
      },
    "Resource": ["*"]
    }
  ]
}
```

------

应用于服务的标签会传播到属于该服务的所有任务。因此，您可以创建仅限于具有特定标签的 Amazon ECS 资源的角色。在以下策略中，IAM 主体启动和停止标签键为 `Department`、标签值为 `Accounting` 的所有任务。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:StartTask",
                "ecs:StopTask",
                "ecs:RunTask"
            ],
            "Resource": "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster",
            "Condition": {
                "StringEquals": {"ecs:ResourceTag/Department": "Accounting"}
            }
        }
    ]
}
```

------

## 定期审核对 API 的访问权限


用户可能会更改角色。在他们更改角色后，之前授予他们的权限可能不再适用。请务必审核谁有权访问 Amazon ECS API，以及该访问权限是否仍有保障。考虑将 IAM 与用户生命周期管理解决方案集成，该解决方案可在用户离开组织时自动撤消访问权限。有关更多信息，请参阅《Amazon Identity and Access Management 用户指南》**中的 [Amazon 安全审核指南](https://docs.amazonaws.cn/IAM/latest/UserGuide/security-audit-guide.html)。