

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 控制对标签的访问
<a name="tag-permissions"></a>

要在 Amazon KMS 控制台中或使用 API 添加、查看和删除标签，委托人需要标记权限。您可以在[密钥策略](key-policies.md)中提供这些权限。您还可以在 IAM policy（包括 [VPC 端点策略](https://docs.amazonaws.cn/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)）中提供这些权限，但仅当[密钥策略允许](key-policy-default.md#allow-iam-policies)时。[AWSKeyManagementServicePowerUser](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSKeyManagementServicePowerUser)托管策略允许委托人对账户可以访问的所有 KMS 密钥进行标记、取消标记和列出标签。

您也可以通过对标签使用 Amazon 全局条件键来限制这些权限。在中 Amazon KMS，这些条件可以控制对标记操作（例如[TagResource](https://docs.amazonaws.cn/kms/latest/APIReference/API_TagResource.html)和 [UntagResource](https://docs.amazonaws.cn/kms/latest/APIReference/API_UntagResource.html)）的访问权限。

**注意**  
请谨慎授予委托人管理标签和别名的权限。更改标签或别名可以允许或拒绝对客户托管密钥的权限。有关详细信息，请参阅 [ABAC for Amazon KMS](abac.md) 和 [使用标签控制对 KMS 密钥的访问](tag-authorization.md)。

有关示例策略和更多信息，请参阅 *IAM 用户指南*中的[根据标签键控制访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

用于创建和管理标签的权限如下所示。

**kms: TagResource**  
允许委托人添加或编辑标签。要在创建 KMS 密钥时添加标签，委托人必须在 IAM policy 中具有不限于特定 KMS 密钥的权限。

**kms: ListResourceTags**  
允许委托人查看 KMS 密钥上的标签。

**kms: UntagResource**  
允许委托人从 KMS 密钥中删除标签。

## 标记策略中的权限
<a name="tag-permission-examples"></a>

您可以在密钥策略或 IAM policy 中提供权限标记。例如，以下示例密钥策略向选定用户授予标记 KMS 密钥的权限。它为所有可以担任示例管理员或开发人员角色的用户授予查看标签的权限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "example-key-policy",
  "Statement": [
    { 
      "Sid": "EnableIAMUserPermissions",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowAllTaggingPermissions",
      "Effect": "Allow",
      "Principal": {"AWS": [
        "arn:aws:iam::111122223333:user/LeadAdmin",
        "arn:aws:iam::111122223333:user/SupportLead"
      ]},
      "Action": [
          "kms:TagResource",
          "kms:ListResourceTags",
          "kms:UntagResource"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowRolesViewTags",
      "Effect": "Allow",
      "Principal": {"AWS": [
        "arn:aws:iam::111122223333:role/Administrator",
        "arn:aws:iam::111122223333:role/Developer"
      ]},
      "Action": "kms:ListResourceTags",
      "Resource": "*"
    }
  ]
}
```

------

要授予委托人对多个 KMS 密钥的标记权限，您可以使用 IAM policy。为使此策略生效，每个 KMS 密钥的密钥策略都必须允许账户使用 IAM policy 来控制对 KMS 密钥的访问。

例如，以下 IAM policy 允许委托人创建 KMS 密钥。它还允许他们在指定账户中的所有 KMS 密钥上创建和管理标签。[这种组合允许委托人在创建 KMS 密钥时使用[CreateKey](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateKey.html)操作的 Tags 参数向 KMS 密钥添加标签。](https://docs.amazonaws.cn/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-Tags)

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyCreateKeys",
      "Effect": "Allow",
      "Action": "kms:CreateKey",
      "Resource": "*"
    },
    {
      "Sid": "IAMPolicyTags",
      "Effect": "Allow",
      "Action": [
        "kms:TagResource",
        "kms:UntagResource",
        "kms:ListResourceTags"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    }    
  ]
}
```

------

## 限制标签权限
<a name="tag-permissions-conditions"></a>

您可以通过使用[策略条件](policy-conditions.md)限制标记权限。以下策略条件可应用于 `kms:TagResource` 和 `kms:UntagResource` 权限。例如，您可以使用 `aws:RequestTag/tag-key` 条件来允许委托人仅添加特定标签，或阻止委托人添加具有特定标签键的标签。或者，您可以使用 `kms:KeyOrigin` 条件来防止委托人标记或取消标记具有[导入密钥材料](importing-keys.md)的 KMS 密钥。
+ [aws：RequestTag](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)
+ a@@ [ws:ResourceTag/*tag-key（仅*](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)限 IAM 策略）
+ [aws：TagKeys](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tag-keys)
+ [kms: CallerAccount](conditions-kms.md#conditions-kms-caller-account)
+ [kms: KeySpec](conditions-kms.md#conditions-kms-key-spec)
+ [kms: KeyUsage](conditions-kms.md#conditions-kms-key-usage)
+ [kms: KeyOrigin](conditions-kms.md#conditions-kms-key-origin)
+ [kms: ViaService](conditions-kms.md#conditions-kms-via-service)

作为使用标签控制对 KMS 密钥的访问的最佳实践，请使用 `aws:RequestTag/tag-key` 或 `aws:TagKeys` 条件键来确定允许哪些标签（或标签键）。

例如，以下 IAM policy 与上一个类似。但是，此策略允许主体为具有 `Project` 标签键的标签创建标签 (`TagResource`) 并删除标签 `UntagResource`。

由于`TagResource`和`UntagResource`请求可以包含多个标签，因此您必须使用 aws[: TagKeys](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) 条件指定`ForAllValues`或`ForAnyValue`设置运算符。`ForAnyValue` 运算符要求请求中至少有一个标签键与策略中的其中一个标签键匹配。`ForAllValues` 运算符要求请求中所有的标签键与策略中的其中一个标签键匹配。`true`如果请求中没有标签，则`ForAllValues`运算符也会返回，但 TagResource 如果未指定标签，则会 UntagResource失败。有关集合运算符的详细信息，请参阅 *IAM 用户指南*中的[使用多个键和值](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_multi-value-conditions.html#reference_policies_multi-key-or-value-conditions)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyCreateKey",
      "Effect": "Allow",
      "Action": "kms:CreateKey",
      "Resource": "*"
    },
    {
      "Sid": "IAMPolicyViewAllTags",
      "Effect": "Allow",
      "Action": "kms:ListResourceTags",
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "IAMPolicyManageTags",
      "Effect": "Allow",
      "Action": [
        "kms:TagResource",
        "kms:UntagResource"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
          "ForAllValues:StringEquals": {"aws:TagKeys": "Project"}
      }
    }
  ]
}
```

------