Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

策略结构

以下主题说明 IAM 策略的结构。

策略语法

IAM 策略是包含一个或多个语句的 JSON 文档。每个语句的结构如下:

{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}

组成语句的各个元素如下:

  • Effect:effect 可以是 AllowDeny。默认情况下 IAM 用户没有使用资源和 API 操作的权限,因此,所有请求均会被拒绝。显式允许将覆盖默认规则。显式拒绝将覆盖任何允许。

  • Actionaction 是对其授予或拒绝权限的特定 API 操作。要了解有关指定 action 的信息,请参阅 针对 Amazon ECS 的操作

  • Resource:操作影响的资源。有些 Amazon ECS API 操作允许您在策略中包括该操作可以创建或修改的特定资源。要在语句中指定资源,您需要使用其 Amazon 资源名称 (ARN)。有关指定 arn 值的更多信息,请参阅适用于 Amazon ECS 的Amazon 资源名称。有关哪些 ARN 支持哪些 API 操作的更多信息,请参阅 Amazon ECS API 操作支持的资源级权限。如果 API 操作不支持 ARN,请使用 * 通配符指定操作可以影响所有资源。

  • Condition:条件是可选的。它们可以用于控制策略生效的时间。想要了解更多有关为 Amazon ECS 指定条件的信息,请参阅 Amazon ECS 的条件密钥

想要了解更多有关 Amazon ECS 的示例 IAM 策略语句的信息,请参阅 创建 Amazon ECS IAM 策略

针对 Amazon ECS 的操作

在 IAM 策略语句中,您可以从支持 IAM 的任何服务中指定任何 API 操作。对于 Amazon ECS,请使用以下前缀为 API 操作命名:ecs:。例如:ecs:RunTaskecs:CreateCluster

要在单个语句中指定多项操作,请使用逗号将它们隔开,如下所示:

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

您也可以使用通配符指定多项操作。例如,您可以指定名称以单词“Describe”开头的所有操作,如下所示:

Copy
"Action": "ecs:Describe*"

要指定所有 Amazon ECS API 操作,请使用 * 通配符,如下所示:

Copy
"Action": "ecs:*"

有关 Amazon ECS 操作的列表,请参阅 Amazon EC2 Container Service API Reference 中的操作

适用于 Amazon ECS 的Amazon 资源名称

每个 IAM 策略语句适用于您使用资源的 ARN 指定的资源。

重要

当前,并非所有 API 操作都支持各个 ARN; 我们以后将添加针对其他 API 操作的支持以及针对其他 Amazon ECS 资源的 ARN。有关哪些 ARN 可以与哪些 Amazon ECS API 操作一起使用以及每个 ARN 支持的条件密钥的信息,请参阅 Amazon ECS API 操作支持的资源级权限

ARN 的一般语法如下:

arn:aws:[service]:[region]:[account]:resourceType/resourcePath
service

服务 (例如,ecs)。

区域

资源所在区域 (例如,us-east-1)。

账户

AWS 账户 ID,不包含连字符 (例如,123456789012)。

resourceType

资源类型 (例如,instance)。

resourcePath

识别资源的路径。您可以在路径中使用 * 通配符。

例如,您可以使用特定集群 (default) 的 ARN 在语句中指定该集群,如下所示:

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

还可以使用 * 通配符指定属于特定账户的所有集群,如下所示:

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

要指定所有资源,或者如果特定 API 操作不支持 ARN,请在 Resource 元素中使用 * 通配符,如下所示:

"Resource": "*"

下表介绍了 Amazon ECS API 操作使用的每种资源的 ARN。

资源类型 ARN

所有 Amazon ECS 资源

arn:aws:ecs:*

指定账户在指定地区拥有的所有 Amazon ECS 资源

arn:aws:ecs:region:account:*

集群

arn:aws:ecs:region:account:cluster/cluster-name

容器实例

arn:aws:ecs:region:account:container-instance/container-instance-id

任务定义

arn:aws:ecs:region:account:task-definition/task-definition-family-name:task-definition-revision-number

服务

arn:aws:ecs:region:account:service/service-name

任务

arn:aws:ecs:region:account:task/task-id

容器

arn:aws:ecs:region:account:container/container-id

许多 Amazon ECS API 操作接受多种资源。要在单个语句中指定多种资源,请使用逗号将它们隔开,如下所示:

"Resource": ["arn1", "arn2"]

更多有关 ARN 的一般信息,请参阅 Amazon Web Services 一般参考 中的 Amazon 资源名称 (ARN) 和 AWS 服务命名空间主题。

Amazon ECS 的条件密钥

在策略语句中,您可以选择性指定控制策略生效时间的条件。每个条件都包含一个或多个键值对。条件键不区分大小写。我们已经定义了 AWS 范围内的条件密钥以及其他特定于服务的条件密钥。

如果您指定了多个条件或在单一条件中指定了多个密钥,我们将通过逻辑 AND 操作对其进行评估。如果您在单一条件中指定了一个具有多个值的密钥,我们将通过逻辑 OR 操作对其进行评估。必须匹配所有条件才能授予权限。

在指定条件时,您也可使用占位符。有关更多信息,请参阅 IAM 用户指南 中的策略变量

Amazon ECS 会实施 AWS 范围内的条件密钥(请参阅可用密钥)以及以下服务特定的条件密钥。(我们将在以后为 Amazon ECS 添加其他服务特定的条件密钥支持。)

条件键 键值对 评估类型

ecs:cluster

"ecs:cluster":"cluster-arn"

其中 cluster-arn 是 Amazon ECS 集群的 ARN

ARN,Null

ecs:container-instances

"ecs:container-instances":"container-instance-arns"

其中 container-instance-arns 是一个或多个容器实例 ARN。

ARN,Null

有关那个条件密钥可以与那些 Amazon ECS 资源一起使用的信息(根据操作流程),请参阅 Amazon ECS API 操作支持的资源级权限。有关适用于 Amazon ECS 的策略语句示例,请参阅 创建 Amazon ECS IAM 策略

检查用户是否具有所需权限

在您创建 IAM 策略后,建议您检查它是否允许用户使用策略生效前所需的特定 API 操作和资源。

首先,创建一个用于测试目的的 IAM 用户,然后将您创建的 IAM 策略与该测试用户关联起来。然后,以测试用户身份提出请求。您可以在控制台中提出测试请求,也可以使用 AWS CLI 提出测试请求。

注意

您也可以使用 IAM 策略模拟器测试您的策略。有关策略模拟器的更多信息,请参阅 IAM 用户指南 中的使用 IAM 策略模拟器

如果您测试的操作创建或修改了一种资源,您在提交请求时应该使用 DryRun 参数(或运行带有 --dry-run 选项的 AWS CLI 命令)。在这种情况下,调用会完成身份验证检查,但是不会完成该操作。例如,您可以检查用户能否终止特定实例,但不会真的终止它。如果测试用户具有所需的权限,请求会返回 DryRunOperation;否则,它会返回 UnauthorizedOperation

如果策略未授予用户您所期望的权限,您可以根据需要调节策略并重新测试,直到您获得预期的结果。

重要

在其生效之前,它需要几分钟时间将策略更改为适合状态。因此,我们建议您在测试策略更新前,等候五分钟的时间。

如果身份验证检查失败,该请求将返回一个带有诊断信息的代码消息。您可以使用 DecodeAuthorizationMessage 操作对消息进行解码。有关更多信息,请参阅 AWS Security Token Service API Reference中的 DecodeAuthorizationMessage,以及 AWS Command Line Interface Reference中的 decode-authorization-message