

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在建立期間授予標籤 Amazon EC2 資源的許可
<a name="supported-iam-actions-tagging"></a>

有些資源建立 Amazon EC2 API 動作可讓您在建立資源時指定標籤。您可以使用資源標籤來實作以屬性為基礎的控制 (ABAC)。如需詳細資訊，請參閱[標記您的 資源](Using_Tags.md#tag-resources)及[使用屬性型存取控制存取](iam-policies-for-amazon-ec2.md#control-access-with-tags)。

使用者若要在建立時標記資源，他們必須具備建立資源動作 (如 `ec2:RunInstances` 或 `ec2:CreateVolume`) 的使用許可。若標籤於資源建立動作指定，Amazon 會針對 `ec2:CreateTags` 動作執行其他授權，以確認使用者具備建立標籤的許可。因此，使用者必須同時具備使用 `ec2:CreateTags` 動作的明確許可。

在 `ec2:CreateTags` 動作的 IAM 政策定義中，搭配 `ec2:CreateAction` 條件金鑰使用 `Condition` 元素，將標記許可給與建立資源的動作。

下列範例示範一個政策，其允許使用者啟動執行個體，並在啟動期間將標籤套用至執行個體與磁碟區。使用者沒有標記現有資源的權限 (他們不能直接呼叫 `ec2:CreateTags` 動作)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

同樣的，下列政策允許使用者建立磁碟區，並在磁碟區建立期間將標籤套用至該磁碟區。使用者沒有標記現有資源的權限 (他們不能直接呼叫 `ec2:CreateTags` 動作)。

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateVolume"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "CreateVolume"
          }
       }
    }
  ]
}
```

只有在資源建立動作中套用了標籤時，才評估 `ec2:CreateTags` 動作。因此，在沒有標記條件的情況下，若請求中未指定標籤，則具備資源建立許可的使用者不需要使用 `ec2:CreateTags` 動作的許可。然而，若該使用者試圖建立具有標籤的資源卻未具備使用 `ec2:CreateTags` 動作的許可，則該請求會失敗。

如果在啟動範本中提供標籤，也會評估 `ec2:CreateTags` 動作。如需政策範例，請參閱 [啟動範本中的標籤](ExamplePolicies_EC2.md#iam-example-tags-launch-template)。

## 控制對特定標籤的存取
<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"] }
    ```

這些條件鍵可套用於支援標記的資源建立動作，以及 `ec2:CreateTags` 和 `ec2:DeleteTags` 動作。若要了解 Amazon EC2 API 動作是否支援標記，請參閱 [Amazon EC2 的動作、資源和條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)。

若要強制使用者在建立資源時指定標籤，您必須在資源建立動作內，搭配 `aws:RequestTag` 修飾詞使用 `aws:TagKeys` 條件金鑰或 `ForAnyValue` 條件金鑰。若使用者未針對資源建立動作指定標籤，則不會評估 `ec2:CreateTags` 動作。

以條件而言，條件金鑰不區分大小寫，而條件值會區分大小寫。因此，欲強制標籤鍵區分大小寫，請使用 `aws:TagKeys` 條件索引鍵，其中標籤鍵指定為條件值。

如需 IAM 政策的範例，請參閱[控制 Amazon EC2 API 存取的政策範例](ExamplePolicies_EC2.md)。如需了解詳細資訊，請參閱 *IAM 使用者指南*中的[具有多個關聯內容索引鍵或值的條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-logic-multiple-context-keys-or-values.html)。