

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

# 标签在 AWS KMS
<a name="tagging-keys"></a>

*标签*是您可以为 AWS 资源分配（或 AWS 可以分配）的可选元数据标签。每个标签都包含一个*标签键*和一个*标签值*，它们都是区分大小写的字符串。标签值可为空 (null) 字符串。资源上的每个标签必须具有不同的标签密钥，但您可以为多个 AWS 资源添加相同的标签。每个资源最多可以有 50 个用户创建的标签。

不要在标签键或标签值中包含机密或敏感信息。许多人都可以访问标签 AWS 服务，包括账单。

在中 AWS KMS，您可以在创建 KMS 密钥时向客户托管密钥添加标签，也可以标记或取消标记现有 KMS 密钥，除非这些密钥处于[待删除状态](key-state.md)。您不能在其他 AWS 账户中标记别名、自定义密钥存储库 AWS 托管式密钥、AWS 拥有的密钥、或 KMS 密钥。标签是可选的，但它们可能非常有用。

例如，您可以添加一个 `"Project"="Alpha"` 标签添加到您用于 Alpha 项目的所有 KMS 密钥和 Amazon S3 存储桶。

```
TagKey   = "Project"
TagValue = "Alpha"
```

有关标签的一般信息，包括格式和语法，请参阅中的[*Amazon Web Services 一般参考*标记 AWS 资源](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。

标签可帮助您：
+ 识别和整理您的 AWS 资源。许多 AWS 服务都支持标记，因此您可以为来自不同服务的资源分配相同的标签，以表明这些资源是相关的。例如，您可以为 KMS 密钥和亚马逊弹性区块存储 (Amazon EBS) 存储卷或密钥分配相同的标签。 AWS Secrets Manager 您还可以使用标签来标识 KMS 密钥以实现自动化。
+ 追踪您的 AWS 成本。向 AWS 资源添加标签时， AWS 会生成一份成本分配报告，其中包含按标签汇总的使用量和成本。您可以使用此功能来跟踪 AWS KMS 项目、应用程序或成本中心的成本。

  有关对成本分配使用标签的更多信息，请参阅 *AWS Billing 用户指南*中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。有关适用于标签键和标签值的规则的信息，请参阅 *AWS Billing 用户指南*中的[用户定义的标签限制](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html)。
+ 控制对 AWS 资源的访问权限。根据标签允许和拒绝访问 KMS 密钥是 AWS KMS 支持基于[属性的访问控制](abac.md) (ABAC) 的一部分。有关 AWS KMS keys 根据标签控制访问权限的信息，请参阅[使用标签控制对 KMS 密钥的访问](tag-authorization.md)。有关使用标签控制 AWS 资源访问权限的更多一般信息，请参阅 *IAM 用户指南*中的[使用 AWS 资源标签控制对资源的访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

AWS KMS 当您使用、或[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html)操作时 [TagResource](ct-tagresource.md)，[UntagResource](ct-untagresource.md)会在 AWS CloudTrail 日志中写入一个条目。

**Topics**
+ [控制对标签的访问](tag-permissions.md)
+ [向 KMS 密钥添加标签](add-tags.md)
+ [编辑与 KMS 密钥关联的标签](edit-tags.md)
+ [删除与 KMS 密钥关联的标签](remove-tags.md)
+ [查看与 KMS 密钥关联的标签](view-tags.md)
+ [使用标签控制对 KMS 密钥的访问](tag-authorization.md)

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

要在 AWS KMS 控制台中或使用 API 添加、查看和删除标签，委托人需要标记权限。您可以在[密钥策略](key-policies.md)中提供这些权限。您还可以在 IAM policy（包括 [VPC 端点策略](https://docs.aws.amazon.com/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 密钥进行标记、取消标记和列出标签。

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

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

有关示例策略和更多信息，请参阅 *IAM 用户指南*中的[根据标签键控制访问](https://docs.aws.amazon.com/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.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作的 Tags 参数向 KMS 密钥添加标签。](https://docs.aws.amazon.com/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.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)
+ a@@ [ws:ResourceTag/*tag-key（仅*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)限 IAM 策略）
+ [aws：TagKeys](https://docs.aws.amazon.com/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.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) 条件指定`ForAllValues`或`ForAnyValue`设置运算符。`ForAnyValue` 运算符要求请求中至少有一个标签键与策略中的其中一个标签键匹配。`ForAllValues` 运算符要求请求中所有的标签键与策略中的其中一个标签键匹配。`true`如果请求中没有标签，则`ForAllValues`运算符也会返回，但 TagResource 如果未指定标签，则会 UntagResource失败。有关集合运算符的详细信息，请参阅 *IAM 用户指南*中的[使用多个键和值](https://docs.aws.amazon.com/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"}
      }
    }
  ]
}
```

------

# 向 KMS 密钥添加标签
<a name="add-tags"></a>

标签有助于识别和整理您的 AWS 资源。您可以在[创建 KMS 密钥](create-keys.md)时向客户托管密钥添加标签，或者向现有的 KMS 密钥添加标签。您无法标记 AWS 托管式密钥。

以下过程演示如何使用 AWS KMS 控制台和 AWS KMS API 向客户托管密钥添加标签。 AWS KMS API 示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何支持的编程语言。

**Topics**
+ [创建 KMS 密钥时添加标签](#tag-on-create)
+ [向现有的 KMS 密钥添加标签](#tag-exisiting)

## 创建 KMS 密钥时添加标签
<a name="tag-on-create"></a>

在使用 AWS KMS 控制台或[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作创建密钥时，可以向 KMS 密钥添加标签。要在创建 KMS 密钥时添加标签，除了创建 KMS 密钥所需的权限之外，您还必须具有 IAM 策略中的 `kms:TagResource` 权限。权限至少必须涵盖账户和区域中的所有 KMS 密钥。有关更多信息，请参阅 [控制对标签的访问](tag-permissions.md)。

### 使用控制 AWS KMS 台
<a name="tag-on-create-console"></a>

要在控制台中创建 KMS 密钥时添加标签，除了添加标签和创建 KMS 密钥所需的权限之外，您还必须具有在控制台中查看 KMS 密钥所需的权限。权限至少必须涵盖账户和区域中的所有 KMS 密钥。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。（您无法管理 AWS 托管式密钥的标签）

1. 选择密钥类型，然后选择 **Next**（下一步）。

1. 输入别名和可选的描述。

1. 输入一个标签键和可选的标签值。要添加其他标签，请选择 **Add tag**（添加标签）。要删除标签，请选择 **Remove**（删除）。完成新 KMS 密钥的标记后，选择 **Next**（下一步）。

1. 完成 KMS 密钥的创建。

### 使用 AWS KMS API
<a name="tagging-keys-create-key"></a>

要在使用[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作创建密钥时指定标签，请使用操作的`Tags`参数。

`CreateKey` 的 `Tags` 参数的值是区分大小写的标签键和标签值对的集合。KMS 密钥上的每个标签都必须具有不同的标签名称。标签值可为 null 或空字符串。

例如，以下 AWS CLI 命令创建带有`Project:Alpha`标签的对称加密 KMS 密钥。指定多个键值对时，请使用空格分隔每个对。

```
$ aws kms create-key --tags TagKey=Project,TagValue=Alpha
```

当此命令成功时，它会返回一个 `KeyMetadata` 对象以及有关新 KMS 密钥的信息。但是，`KeyMetadata` 不包括标签。要获取标签，请使用[ListResourceTags](view-tags.md#tagging-keys-list-resource-tags)操作。

## 向现有的 KMS 密钥添加标签
<a name="tag-exisiting"></a>

您可以在 AWS KMS 控制台中或使用[TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)操作为现有的客户托管 KMS 密钥添加标签。要添加标签，您需要具有向 KMS 密钥添加标签的权限。您可以从 KMS 密钥的密钥策略中获取此权限，或者如果密钥策略允许，还可以从包含 KMS 密钥的 IAM policy 获取此权限。

### 使用控制 AWS KMS 台
<a name="tag-existing-console"></a>

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。（您无法管理 AWS 托管式密钥的标签）

1. 您可以使用表筛选条件仅显示带有特定标签的 KMS 密钥。有关详细信息，请参阅[使用 AWS KMS 控制台查看标签](view-tags.md#view-tag-console)。

1. 选中 KMS 密钥的别名旁的复选框。

1. 选择 **Key actions**、**Add or edit tags**。

1. 在 KMS 密钥的详细信息页面上，选择 **Tags**（标签）选项卡。
   + 要创建您的第一个标签，请选择 **Create tag**（创建标签），键入标签键（必需）和标签值（可选），然后选择 **Save**（保存）。

     如果将标签值留空，则实际标签值为 null 或空字符串。
   + 要添加标签，请选择 **Edi**（编辑），选择 **Add tag**（添加标签），键入标签键和标签值，然后选择 **Save**（保存）。

1. 要保存您的更改，请选择**保存更改**。

### 使用 AWS KMS API
<a name="tagging-keys-tag-resource"></a>

该[TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)操作将向 KMS 密钥添加一个或多个标签。此操作不能用于在不同的 AWS 账户中添加标签。您也可以使用该 TagResource 操作来编辑现有标签。有关更多信息，请参阅 [编辑与 KMS 密钥关联的标签](edit-tags.md)。

要添加标签，请指定新标签键和标签值。KMS 密钥上的每个标签都必须具有不同的标签键。标签值可为 null 或空字符串。

例如，以下命令将 **Purpose** 和 **Department** 标签添加到示例 KMS 密钥中。

```
$ aws kms tag-resource \
         --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
         --tags TagKey=Purpose,TagValue=Pretest TagKey=Department,TagValue=Finance
```

此命令成功执行后，不会返回任何输出。要查看 KMS 密钥上的标签，请使用[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html)操作。

# 编辑与 KMS 密钥关联的标签
<a name="edit-tags"></a>

标签有助于识别和整理您的 AWS 资源。您可以在 AWS KMS 控制台中或使用[TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)操作来编辑与客户托管的 KMS 密钥关联的标签。您无法编辑的标签 AWS 托管式密钥。

以下过程演示如何编辑与 KMS 密钥关联的标签。 AWS KMS API 示例使用 [AWS Command Line Interface （AWS CLI）](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

## 使用控制 AWS KMS 台
<a name="edit-tag-console"></a>

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。（您无法编辑的标签 AWS 托管式密钥）

1. 您可以使用表筛选条件仅显示带有特定标签的 KMS 密钥。有关详细信息，请参阅[使用 AWS KMS 控制台查看标签](view-tags.md#view-tag-console)。

1. 选中 KMS 密钥的别名旁的复选框。

1. 选择 **Key actions**、**Add or edit tags**。

1. 在 KMS 密钥的详细信息页面上，选择 **Tags**（标签）选项卡。
   + 要更改标签的名称或值，请选择 **Edit (编辑)**，进行更改，然后选择 **Save (保存)**。

1. 要保存您的更改，请选择**保存更改**。

## 使用 AWS KMS API
<a name="tag-existing-api"></a>

该[TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)操作向客户托管密钥添加一个或多个标签；。但是，您也可以使用 **TagResource** 来更改现有标签的标签值。此操作不能用于添加或编辑不同 AWS 账户中的标签。

要编辑标签，请指定现有标签键和新标签值。KMS 密钥上的每个标签都必须具有不同的标签键。标签值可为 null 或空字符串。

例如，此命令会将 `Purpose` 标签的值从 `Pretest` 更改为 `Test`。

```
$ aws kms tag-resource \
         --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
         --tags TagKey=Purpose,TagValue=Test
```

# 删除与 KMS 密钥关联的标签
<a name="remove-tags"></a>

标签有助于识别和整理您的 AWS 资源。您可以在 AWS KMS 控制台中或使用[UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html)操作删除与客户托管的 KMS 密钥关联的标签。您无法编辑或移除的标签 AWS 托管式密钥。

以下过程演示了如何删除 KMS 密钥的标签。 AWS KMS API 示例使用 [AWS Command Line Interface （AWS CLI）](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

## 使用控制 AWS KMS 台
<a name="delete-tag-console"></a>

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。（您无法管理 AWS 托管式密钥的标签）

1. 您可以使用表筛选条件仅显示带有特定标签的 KMS 密钥。有关详细信息，请参阅[使用 AWS KMS 控制台查看标签](view-tags.md#view-tag-console)。

1. 选中 KMS 密钥的别名旁的复选框。

1. 选择 **Key actions**、**Add or edit tags**。

1. 在 KMS 密钥的详细信息页面上，选择 **Tags**（标签）选项卡。
   + 要删除标签，请选择 **Edit (编辑)**。在标签行上，选择 **Remove (删除)**，然后选择 **Save (保存)**。

1. 要保存您的更改，请选择**保存更改**。

## 使用 AWS KMS API
<a name="tagging-keys-untag-resource"></a>

该[UntagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_UntagResource.html)操作会从 KMS 密钥中删除标签。要标识要删除的标签，请指定标签键。此操作不能用于从其他 AWS 账户中的 KMS 密钥中删除标签。

当它成功时，`UntagResource` 操作不返回任何输出。此外，如果在 KMS 密钥上未找到指定的标签键，则不会抛出异常或返回响应。要确认操作是否奏效，请使用该[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html)操作。

例如，此命令将从指定的 KMS 密钥中删除 **Purpose** 标签及其值。

```
$ aws kms untag-resource --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --tag-keys Purpose
```

# 查看与 KMS 密钥关联的标签
<a name="view-tags"></a>

标签有助于识别和整理您的 AWS 资源。您可以在 AWS KMS 控制台中或使用[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html)操作查看与客户托管的 KMS 密钥关联的标签。

以下过程演示如何查找与特定 KMS 密钥关联的标签。 AWS KMS API 示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何支持的编程语言。

## 使用控制 AWS KMS 台
<a name="view-tag-console"></a>

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。（您无法管理 AWS 托管式密钥的标签）

1. 您可以使用表筛选条件仅显示带有特定标签的 KMS 密钥。

   要仅显示具有特定标签的 KMS 密钥，请选择筛选框，选择标签键，然后从实际标签值中进行选择。还可以键入全部或部分标签值。

   生成的表格将显示带有所选标签的所有 KMS 密钥。但是，它不显示标签。要查看标签，请选择 KMS 密钥的密钥 ID 或别名，然后在其详细信息页面上选择 **Tags**（标签）选项卡。别名显示在 **General configuration**（常规配置）部分下。

   此筛选条件同时需要标签键和标签值。它不会通过仅键入标签键或仅键入标签值来找到 KMS 密钥。要按全部或部分标签键或值筛选标签，请使用[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html)操作获取带标签的 KMS 密钥，然后使用您的编程语言的筛选功能。

1. 选中 KMS 密钥的别名旁的复选框。

1. 选择 **Key actions**、**Add or edit tags**。

1. 在 KMS 密钥的详细信息页面上，选择 **Tags**（标签）选项卡。

## 使用 AWS KMS API
<a name="tagging-keys-list-resource-tags"></a>

该[ListResourceTags](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListResourceTags.html)操作获取 KMS 密钥的标签。`KeyId` 参数是必需的。此操作不能用于查看其他 AWS 账户中的 KMS 密钥上的标签。

例如，以下命令获取示例 KMS 密钥的标签。

```
$ aws kms list-resource-tags --key-id 1234abcd-12ab-34cd-56ef-1234567890ab
       
  "Truncated": false,
  "Tags": [
      {
        "TagKey": "Project",
        "TagValue": "Alpha"
     },
     {
       "TagKey": "Purpose",
       "TagValue": "Test"
     },
     {
       "TagKey": "Department",
       "TagValue": "Finance"
     }
  ]
}
```

# 使用标签控制对 KMS 密钥的访问
<a name="tag-authorization"></a>

您可以 AWS KMS keys 根据 KMS 密钥上的标签控制对的访问权限。例如，您可以编写 IAM policy，以允许委托人仅启用和禁用具有特定标签的 KMS 密钥。或者，您可以使用 IAM policy 防止委托人在加密操作中使用 KMS 密钥，除非 KMS 密钥具有特定标签。

此功能是对[基于属性的访问控制](abac.md) (ABAC) 的 AWS KMS 支持的一部分。有关使用标签控制 AWS 资源访问的信息，请参阅 [ABAC 有什么用 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)？ 以及[使用 *IAM 用户指南*中的资源标签控制对资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)权限。 AWS 要获取有关解决与 ABAC 相关的访问问题的帮助，请参阅 [对 ABAC 进行故障排除 AWS KMS](troubleshooting-tags-aliases.md)。

**注意**  
标签和别名的更改最多可能需要 5 分钟的时间才能影响 KMS 密钥授权。最近的更改可能会在 API 操作中显示，然后才会影响授权。

AWS KMS 支持 aws[:ResourceTag/*tag-key*](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) [全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)，它允许您根据 KMS 密钥上的标签控制对 KMS 密钥的访问。由于多个 KMS 密钥可以具有相同的标签，此功能可使您将权限应用于一组选定的 KMS 密钥。您还可以通过更改 KMS 密钥的标签轻松更改集合中的 KMS 密钥。

在中 AWS KMS，`aws:ResourceTag/tag-key`条件密钥仅在 IAM 策略中受支持。密钥策略（仅适用于一个 KMS 密钥）或不使用特定 KMS 密钥的操作（例如[ListKeys](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListKeys.html)或[ListAliases](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListAliases.html)操作）不支持它。

使用标签控制访问提供了一种简单、可扩展且灵活的方式来管理权限。但是，如果设计和管理不当，它可能会无意中允许或拒绝对您的 KMS 密钥的访问。如果您使用标签来控制访问，请考虑以下做法。
+ 使用标签来强化[最低权限访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)的最佳实践。仅为 IAM 委托人授予他们对必须使用或管理的 KMS 密钥的所需权限。例如，使用标签来标记用于项目的 KMS 密钥。然后授予项目团队仅使用带有项目标签的 KMS 密钥的权限。
+ 谨慎为委托人提供 `kms:TagResource` 和 `kms:UntagResource` 权限，以允许他们添加、编辑和删除标签。当您使用标签控制对 KMS 密钥的访问时，更改标签可以授予委托人使用他们没有权限使用的 KMS 密钥的权限。它还可以拒绝对其他委托人执行其工作所需的 KMS 密钥的访问。不具有更改密钥策略或创建授权权限的密钥管理员可以控制对 KMS 密钥的访问，前提是他们有权管理标签。

  如有可能，请使用策略条件，例如 `aws:RequestTag/tag-key` 或 `aws:TagKeys`，以[将委托人的标记权限限制](tag-permissions.md#tag-permissions-conditions)为特定 KMS 密钥上的特定标签或标签模式。
+ 查看您中当前拥有标记和取消标记权限 AWS 账户 的委托人，并在必要时对其进行调整。例如，控制台[密钥管理员的默认密钥策略](key-policy-default.md#key-policy-default-allow-administrators)包括对该 KMS 密钥的 `kms:TagResource` 和 `kms:UntagResource` 权限。IAM policy 可能允许对所有 KMS 密钥的标记和取消标记权限。例如，[AWSKeyManagementServicePowerUser](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSKeyManagementServicePowerUser)托管策略允许委托人标记、取消标记和列出所有 KMS 密钥上的标签。
+ 在设置依赖于标签的策略之前，请查看您的 KMS 密钥上的标签 AWS 账户。请确保您的策略仅适用于您要包含的标签。使用[CloudTrail 日志](logging-using-cloudtrail.md)和[CloudWatch 警报](monitoring-overview.md)提醒您注意可能影响您的 KMS 密钥访问权限的标签更改。
+ 基于标签的策略条件使用模式匹配；它们不绑定到标签的特定实例。使用基于标签的条件键的策略会影响与模式匹配的所有新标签和现有标签。如果删除并重新创建与策略条件匹配的标签，则该条件将应用于新标签，就像对旧标签一样。

例如，请考虑以下 IAM policy。它允许委托人仅对您账户中位于亚太（新加坡）地区[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)且有标签的 KMS 密钥调用和[解](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)密操作。`"Project"="Alpha"`您可以将此策略附加到示例 Alpha 项目中的角色。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMPolicyWithResourceTag",
      "Effect": "Allow",
      "Action": [
        "kms:GenerateDataKeyWithoutPlaintext",
        "kms:Decrypt"
      ],
      "Resource": "arn:aws:kms:ap-southeast-1:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Project": "Alpha"
        }
      }
    }
  ]
}
```

------

以下示例 IAM policy 允许委托人使用账户中的 KMS 密钥执行特定加密操作。但它禁止主体对具有 `"Type"="Reserved"` 标签或不包含 `"Type"` 标签的 KMS 密钥使用这些加密操作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IAMAllowCryptographicOperations",
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*"
    },
    {
      "Sid": "IAMDenyOnTag",
      "Effect": "Deny",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Type": "Reserved"
        }
      }
    },
    {
      "Sid": "IAMDenyNoTag",
      "Effect": "Deny",
      "Action": [
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:Decrypt",
        "kms:ReEncrypt*"
      ],
      "Resource": "arn:aws:kms:*:111122223333:key/*",
      "Condition": {
        "Null": {
          "aws:ResourceTag/Type": "true"
        }
      }
    }
  ]
}
```

------