

# 在创建时授予标记资源的权限
<a name="supported-iam-actions-tagging"></a>

以下标签创建 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 控制对特定标签的访问
<a name="control-tagging"></a>

您可以在 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)。