

# 标记 Amazon EC2 资源
标记资源

为了方便您管理实例、映像以及其他 Amazon EC2 资源，您可通过*标签* 的形式为每个资源分配元数据。标签可让您按各种标准（例如用途、所有者或环境）对 Amazon 资源进行分类。这在您具有相同类型的很多资源时会很有用 – 您可以根据分配给特定资源的标签快速识别该资源。本主题介绍标签并说明如何创建标签。

**警告**  
很多不同的 API 调用返回标签键及其值。拒绝访问 `DescribeTags` 不会自动拒绝访问其他 API 返回的标签。作为最佳实践，我们建议您不要在标签中包含敏感数据。

**Topics**
+ [

## 有关标签的基本知识
](#tag-basics)
+ [

## 标记 资源
](#tag-resources)
+ [

## 标签限制
](#tag-restrictions)
+ [

## 标签和访问管理
](#tag-resources-access-management)
+ [

## 为资源添加标签以便于进行计费
](#tag-resources-for-billing)
+ [资源标记权限](supported-iam-actions-tagging.md)
+ [添加或删除标签](Using_Tags_Console.md)
+ [按标签筛选资源](filtering-the-list-by-tag.md)
+ [使用实例元数据来查看标签](work-with-tags-in-IMDS.md)

## 有关标签的基本知识


标签是为Amazon资源分配的标记。每个标签都包含您定义的一个*键* 和一个可选*值*。

标签可让您按各种标准（例如用途、所有者或环境）对 Amazon 资源进行分类。例如，您可以为账户中的 Amazon EC2 实例定义一组标签，以跟踪每个实例的所有者和堆栈级别。

下图说明了标签的工作方式。在此示例中，您为每个实例分配了两个标签 — 一个标签使用键 `Owner`，另一个使用键 `Stack`。每个标签都拥有相关的值。

![\[标签示例\]](http://docs.amazonaws.cn/AWSEC2/latest/UserGuide/images/Tag_Example.png)


我们建议您针对每类资源设计一组标签，以满足您的需要。使用一组连续的标签键，管理 资源时会更加轻松。您可以根据添加的标签搜索和筛选资源。有关如何实施有效资源标记策略的更多信息，请参阅 [标记最佳实践 Amazon 白皮书](https://docs.amazonaws.cn/whitepapers/latest/tagging-best-practices/tagging-best-practices.html)。

标签对 Amazon EC2 没有任何语义意义，应严格按字符串进行解析。同时，标签不会自动分配至您的资源。您可以修改标签的密钥和值，还可以随时删除资源的标签。您可以将标签的值设为空的字符串，但是不能将其设为空值。如果您添加的标签的值与该实例上现有标签的值相同，新的值就会覆盖旧值。如果删除资源，资源的所有标签也会被删除。

**注意**  
删除资源后，其标签可能会在短时间内在控制台、API 和 CLI 输出中仍保持可见。这些标签将逐步解除与资源的关联，并永久删除。

## 标记 资源


当您使用 Amazon EC2 控制台时，可以使用相关资源屏幕上的**标签**选项卡或 Amazon Resource Groups 控制台中的**标签编辑器**，将标签应用到资源。在您创建资源时，某些资源屏幕能让您为资源指定标签；例如，具有 `Name` 键并且具有您指定的值的标签。在大多数情况下，控制台会在资源创建后 (而不是在资源创建期间) 立即应用标签。控制台可能根据 `Name` 标签对资源进行组织，但此标签对于 Amazon EC2 服务没有任何语义意义。

如果使用的是 Amazon EC2 API、Amazon CLI 或 Amazon 软件开发工具包，则您可以使用 `CreateTags` EC2 API 操作向现有资源应用标签。此外，某些资源创建操作允许您在创建资源时为其指定标签。如果无法在资源创建期间应用标签，系统会回滚资源创建过程。这样可确保要么创建带有标签的资源，要么根本不创建资源，即任何时候都不会创建出未标记的资源。通过在创建时标记资源，您不需要在资源创建后运行自定义标记脚本。有关允许用户在创建时标记资源的更多信息，请参阅 [在创建过程中授予标记 Amazon EC2 资源的权限](supported-iam-actions-tagging.md)。

对于支持在创建时进行标记的 Amazon EC2 API 操作，您可以在 IAM policies 中应用基于标签的资源级权限，以对可在创建时标记资源的用户和组实施精细控制。您的资源从创建开始会受到适当的保护 — 标签会立即用于您的资源，因此控制资源使用的任何基于标签的资源级权限都会立即生效。可以更准确地对您的资源进行跟踪和报告。您可以强制对新资源使用标记，可以控制对资源设置哪些标签键和值。

此外，您还可以在 IAM policies 中对 `CreateTags` 和 `DeleteTags` Amazon EC2 API 操作应用资源级权限，从而控制对现有资源设置哪些标签键和值。有关更多信息，请参阅[示例：标记资源](ExamplePolicies_EC2.md#iam-example-taggingresources)。

有关标记资源以便于计费的更多信息，请参阅 *Amazon Billing 用户指南*中的[使用成本分配标签](https://docs.amazonaws.cn/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

## 标签限制


下面是适用于标签的基本限制：
+ 每个资源的标签数上限：50
+ 对于每个资源，每个标签键都必须是唯一的，每个标签键只能有一个值。
+ 最大键长度：128 个 Unicode 字符（采用 UTF-8 格式）
+ 最大值长度：256 个 Unicode 字符 (采用 UTF-8 格式)
+ 允许使用的字符
  + 虽然 EC2 允许在其标签中使用任何字符，但其他 Amazon 服务具有更严格的限制。允许在所有 Amazon 服务中使用的字符包括：可以使用 UTF-8 表示的字母（`a-z`、`A-Z`）、数字（`0-9`）和空格以及以下字符：`+ - = . _ : / @`。
  + 如果在实例元数据中启用实例标签，实例标签*键*只能使用字母 (`a-z`、`A-Z`)、数字 (`0-9`) 及以下字符：`+ - = . , _ : @`。实例标签 *keys* 不能包含空格或 `/`，也不能只包含 `.`（一个句号）、`..`（两个句号）或 `_index`。有关更多信息，请参阅 [使用实例元数据来查看 EC2 实例的标签](work-with-tags-in-IMDS.md)。
+ 标签键和值区分大小写。
+ `aws:` 前缀专门预留供 Amazon 使用。如果某个标签具有带有此标签键，则您无法编辑该标签的键或值。具有 `aws:` 前缀的标签不计入每个资源的标签数限制。

您不能仅依据标签终止或删除资源，而必须指定资源的标识符。例如，要删除您使用名为 `DeleteMe` 的标签键标记的快照，您必须将 `DeleteSnapshots` 操作与快照的资源标识符 (如 `snap-1234567890abcdef0`) 结合使用。

当您为公有或共享资源添加标签时，您分配的标签仅对您的 Amazon 账户可用；其他 Amazon 账户无权访问这些标签。为了对共享资源进行基于标签的访问控制，每个 Amazon 账户必须分配自己的一组标签来控制对资源的访问。

## 标签和访问管理


如果您使用的是 Amazon Identity and Access Management (IAM)，则可以控制Amazon账户中的哪些用户拥有创建、编辑或删除标签的权限。有关更多信息，请参阅[在创建过程中授予标记 Amazon EC2 资源的权限](supported-iam-actions-tagging.md)。

您还可以使用资源标签来实现基于属性的控制 (ABAC)。您可以创建 IAM policies，基于资源标签允许操作。有关更多信息，请参阅[使用基于属性的访问控制访问权限](iam-policies-for-amazon-ec2.md#control-access-with-tags)。

## 为资源添加标签以便于进行计费


您也可以使用标签来组织您的 Amazon 账单，使其反映您的成本结构。要执行此操作，请注册以获取包含标签键值的 Amazon 账户账单。有关设置带有标签的成本分配报告的更多信息，请参阅 *Amazon Billing 用户指南*中的[月度成本分配报告](https://docs.amazonaws.cn/awsaccountbilling/latest/aboutv2/configurecostallocreport.html)。如需查看组合资源的成本，请按具有相同标签键值的资源组织您的账单信息。例如，您可以将特定的应用程序名称用作几个资源的标签，然后组织账单信息，以查看在数个服务中的使用该应用程序的总成本。有关更多信息，请参阅 *Amazon Billing 用户指南*中的[使用成本分配标签](https://docs.amazonaws.cn/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

**注意**  
如果您已启用报告，则可以在 24 小时后查看当月的数据。

成本分配标签可指示哪些资源导致产生成本，而删除或停用资源并不总是能降低成本。例如，即使删除包含原始数据的快照，其他快照引用的快照数据也将保留。有关更多信息，请参阅 *Amazon Billing 用户指南*中的 [Amazon Elastic Block Store 卷和快照](https://docs.amazonaws.cn/awsaccountbilling/latest/aboutv2/checklistforunwantedcharges.html#checkebsvolumes)。

**注意**  
标记的弹性 IP 地址不会显示在成本分配报告中。

# 在创建过程中授予标记 Amazon EC2 资源的权限
资源标记权限

某些资源创建 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 策略定义中，使用带有 `Condition` 条件键的 `ec2:CreateAction` 元素，为创建资源的操作授予添加标签的权限。

例如，下面的策略允许用户启动实例并在启动期间向实例和卷应用任何标签。用户无权标记任何现有资源 (他们无法直接调用 `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)。

## 控制对特定标签的访问


您可以在 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.amazonaws.cn/service-authorization/latest/reference/list_amazonec2.html)。

为强制用户指定标签，在创建资源时，您必须使用 `aws:RequestTag` 条件键或 `aws:TagKeys` 条件键，并在资源创建操作中使用修饰符 `ForAnyValue`。如果用户没有为资源创建操作指定标签，则不会对 `ec2:CreateTags` 操作进行评估。

对于条件，条件键不区分大小写，条件值区分大小写。因此，要强制标签键区分大小写，请使用 `aws:TagKeys` 条件键，其中标签键指定为条件中的值。

有关示例 IAM policies，请参阅 [用于控制访问 Amazon EC2 API 的示例策略](ExamplePolicies_EC2.md)。有关更多信息，请参阅《IAM 用户指南》**中的[具有多个上下文键或值的条件](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-logic-multiple-context-keys-or-values.html)。

# 添加或删除 Amazon EC2 资源的标签
添加或删除标签

在创建 Amazon EC2 资源（例如 Amazon EC2 实例）时，可以指定要添加到资源的标签。Amazon EC2 控制台可用于显示特定 Amazon EC2 资源的标签。您也可以在现有的 Amazon EC2 资源中添加或删除标签。

使用 Amazon Resource Groups 控制台中的**标签编辑器**，可以查看、添加或删除所有区域中所有 Amazon 资源的标签。您可以同时将标签应用到多个类型的资源，也可以同时从多个类型的资源删除标签。有关更多信息，请参阅 [标记 Amazon 资源用户指南](https://docs.amazonaws.cn/tag-editor/latest/userguide/tagging.html)。

**Topics**
+ [

## 使用控制台添加标签
](#adding-or-deleting-tags)
+ [

## 使用 Amazon CLI 添加标签
](#create-tag-examples)
+ [

## 使用 PowerShell 添加标签
](#powershell-add-tag-specifications)
+ [

## 使用 CloudFormation 添加标签
](#cloudformation-add-tag-specifications)

## 使用控制台添加标签


您可以从资源页面直接为现有的资源添加标签。

**向现有资源添加标签**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 从导航栏中选择资源所在的区域。

1. 在导航窗格中，选择资源类型 (例如，**Instances**)。

1. 从列表中选择相应资源。

1. 从**标签**选项卡中选择**管理标签**。

1. 选择**添加新标签**，然后输入标签键和标签值。

1. 选择**保存**。

## 使用 Amazon CLI 添加标签


您可以在创建资源时添加标签，也可以向现有资源添加标签。

**在创建资源时添加标签**  
使用 `-tag-specifications` 选项在创建资源时标记资源。标签规范规定了要标记的资源类型、标签键和标签值。以下示例会创建一个标签并将其添加到标签规范中。

```
--tag-specifications 'ResourceType=instance,Tags=[{Key=stack,Value=production}]'
```

**向现有资源添加标签**  
以下示例演示了如何使用 [create-tags](https://docs.amazonaws.cn/cli/latest/reference/ec2/create-tags.html) 命令向现有资源添加标签。

**Example 示例：将标签添加到资源**  
以下示例将标签 **Stack=production** 添加到指定的映像，或者覆盖该 AMI 的现有标签（其中标签键为 stack）。如果命令成功，则不返回任何输出。  

```
aws ec2 create-tags \
    --resources ami-0abcdef1234567890 \
    --tags Key=stack,Value=production
```

**Example 示例：将标签添加到多个资源**  
此示例为 AMI 和实例添加（或覆盖）两个标签。其中一个标签仅包含键 (webserver)，不包含值（我们将值设置为空字符串）。另一个标签则包含键 (stack) 和值 (**Production**)。如果命令成功，则不返回任何输出。  

```
aws ec2 create-tags \
    --resources ami-0abcdef1234567890 i-1234567890abcdef0 \
    --tags Key=webserver,Value=  Key=stack,Value=Production
```

**Example 示例：使用特殊字符添加标签**  
此示例将标签 [Group]=test 添加到实例。方括号（[ 和 ]）是特殊字符，必须对其进行转义。  
如果您使用的是 Linux 或 OS X，要转义特殊字符，请用双引号 (") 将具有特殊字符的元素引起来，然后用单引号 (') 将整个键和值结构引起来。  

```
aws ec2 create-tags \
    --resources i-1234567890abcdef0 \
    --tags 'Key="[Group]",Value=test'
```
如果您使用的是 Windows，要转义特殊字符，请用双引号 (") 将具有特殊字符的元素引起来，然后在每个双引号字符前面添加反斜杠 (**\$1**)，如下所示：  

```
aws ec2 create-tags ^
    --resources i-1234567890abcdef0 ^
    --tags Key=\"[Group]\",Value=test
```
如果您使用的是 Windows PowerShell，要转义特殊字符，请用双引号 (**"**) 将具有特殊字符的值引起来，在每个双引号字符前面添加反斜杠 (**\$1**)，然后用单引号 (**'**) 将整个键和值结构引起来，如下所示：  

```
aws ec2 create-tags `
    --resources i-1234567890abcdef0 `
    --tags 'Key=\"[Group]\",Value=test'
```

## 使用 PowerShell 添加标签


您可以在创建资源时添加标签，也可以向现有资源添加标签。

**在创建资源时添加标签**  
使用 `-TagSpecification` 参数在创建资源时标记资源。标签规范规定了要标记的资源类型、标签键和标签值。以下示例会创建一个标签并将其添加到标签规范中。

```
$tag = @{Key="stack"; Value="production"}
$tagspec = new-object Amazon.EC2.Model.TagSpecification
$tagspec.ResourceType = "instance"
$tagspec.Tags.Add($tag)
```

以下示例会在 `-TagSpecification` 参数中指定此标签。

```
-TagSpecification $tagspec
```

**向现有资源添加标签**  
使用 [New-EC2Tag](https://docs.amazonaws.cn/powershell/latest/reference/items/New-EC2Tag.html) cmdlet。您必须指定资源、标签键和标签值。

```
New-EC2Tag `
    -Resource i-1234567890abcdef0 `
    -Tag @{Key="purpose"; Value="production"}
```

## 使用 CloudFormation 添加标签
使用 CloudFormation 添加标签

对于 Amazon EC2 资源类型，您可以使用 `Tags` 或 `TagSpecifications` 属性指定标签。

以下示例使用其 `Tags` 属性将标签 **Stack=Production** 添加到 [AWS::EC2::Instance](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-instance.html)。

**Example 示例：YAML 中的 Tags**  

```
Tags:
  - Key: "Stack"
    Value: "Production"
```

**Example 示例：JSON 中的 Tags**  

```
"Tags": [
    {
        "Key": "Stack",
        "Value": "Production"
    }
]
```

以下示例使用其 `TagSpecifications` 属性将标签 **Stack=Production** 添加到 [AWS::EC2::LaunchTemplate LaunchTemplateData](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata.html)。

**Example 示例：YAML 中的 TagSpecifications**  

```
TagSpecifications:
  - ResourceType: "instance"
    Tags:
    - Key: "Stack"
      Value: "Production"
```

**Example 示例：JSON 中的 TagSpecifications**  

```
"TagSpecifications": [
    {
        "ResourceType": "instance",
        "Tags": [
            {
                "Key": "Stack",
                "Value": "Production"
            }
        ]
    }
]
```

# 按标签筛选 Amazon EC2 资源
按标签筛选资源

添加标签后，即可基于标签键和标签值来筛选 Amazon EC2 资源。

------
#### [ Console ]

**按标签筛选资源**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择资源类型 (例如，**Instances**)。

1. 选择搜索字段。

1. 在列表中的**标签**下，选择标签键。

1. 从列表中选择相应的标签值。

1. 完成后，删除筛选条件。

有关在 Amazon EC2 控制台中使用筛选条件的更多信息，请参阅 [查找 Amazon EC2 资源](Using_Filtering.md)。

------
#### [ Amazon CLI ]

**描述具有指定标签键的单个类型的资源**  
将以下筛选条件添加到 `describe` 命令中，来描述具有 Stack 标签的该类型资源，无论标签值为何。

```
--filters Name=tag-key,Values=Stack
```

**描述具有指定标签的单个类型的资源**  
将以下筛选条件添加到 `describe` 命令中，来描述具有标签 Stack=production 的该类型资源。

```
--filters Name=tag:Stack,Values=production
```

**描述具有指定标签值的单个类型的资源**  
将以下筛选条件添加到 `describe` 命令中，来描述具有值为 production 的标签的该类型资源，无论标签键为何。

```
--filters Name=tag-value,Values=production
```

**描述具有指定标签的所有 EC2 资源**  
将以下筛选条件添加到 [describe-tags](https://docs.amazonaws.cn/cli/latest/reference/ec2/describe-tags.html) 命令中，来描述具有标签 Stack=test 的所有 EC2 资源。

```
--filters Name=key,Values=Stack Name=value,Values=test
```

------
#### [ PowerShell ]

**按标签键筛选单个类型的资源**  
将以下筛选条件添加到 `Get` cmdlet 中，来描述具有 Stack 标签的该类型资源，无论标签值为何。

```
-Filter @{Name="tag-key"; Values="Stack"}
```

**按标签筛选单个类型的资源**  
将以下筛选条件添加到 `Get` cmdlet 中，来描述具有标签 Stack=production 的该类型资源。

```
-Filter @{Name="tag:Stack"; Values="production"}
```

**按标签值筛选单个类型的资源**  
将以下筛选条件添加到 `Get` 命令中，来描述具有值为 production 的标签的该类型资源，无论标签键的值为何。

```
-Filter @{Name="tag-value"; Values="production"}
```

**按标签筛选所有 EC2 资源**  
将以下筛选条件添加到 [Get-EC2Tag](https://docs.amazonaws.cn/powershell/latest/reference/items/Get-EC2Tag.html) cmdlet 中，来描述具有标签 Stack=test 的所有 EC2 资源。

```
-Filter @{Name="tag:Stack"; Values="test"}
```

------

# 使用实例元数据来查看 EC2 实例的标签
使用实例元数据来查看标签

您可以从实例元数据访问实例的标签。通过从实例元数据访问标签，您无需再使用 `DescribeInstances` 或 `DescribeTags` API 调用来检索标签信息，这可以减少每秒的 API 事务量，并允许您的标签检索随您控制的实例数量扩展。此外，在实例上运行的本地进程可以直接从实例元数据中查看实例的标签信息。

默认情况下，实例元数据中不提供标签；您必须明确允许访问。您可以在实例启动时或启动后在正在运行或停止的实例上允许访问。您还可以通过在启动模板中指定标签来允许访问标签。使用模板启动的实例允许访问实例元数据中的标签。

如果您添加或移除实例标签，则实例元数据将在实例运行期间更新，无需停止后再启动实例。

**Topics**
+ [

## 启用对实例元数据中标签的访问权限
](#allow-access-to-tags-in-IMDS)
+ [

## 从实例元数据中检索标签
](#retrieve-tags-from-IMDS)
+ [

## 禁用对实例元数据中标签的访问权限
](#turn-off-access-to-tags-in-IMDS)

## 启用对实例元数据中标签的访问权限


默认情况下，无法访问实例元数据中的实例标签。对于每个实例，您必须显式启用访问权限。

**注意**  
如果您允许访问实例元数据中的标签，则实例标签*键*存在特定的限制。不合规将导致新实例启动失败或现有实例出错。这些限制包括：  
只能包含字母（`a-z`、`A-Z`）、数字 (`0-9`) 和以下字符：`+ - = . , _ : @`。
不能包含空格或 `/`。
不能只包含 `.`（一个句点）、`..`（两个句点）或 `_index`。
有关更多信息，请参阅 [标签限制](Using_Tags.md#tag-restrictions)。

------
#### [ Console ]

**在实例启动期间启用对实例元数据中标签的访问权限**

1. 按照程序[启动实例](ec2-launch-instance-wizard.md)。

1. 展开**高级详细信息**，对于**允许元数据中的标签**，选择**启用**。

1. 在 **Summary**（摘要）面板中查看实例配置，然后选择 **Launch instance**（启动实例）。有关更多信息，请参阅 [使用控制台中的启动实例向导来启动 EC2 实例](ec2-launch-instance-wizard.md)。

**在实例启动后启用对实例元数据中标签的访问权限**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择**操作**、**实例设置**、**允许实例元数据中的标签**。

1. 要允许访问实例元数据中的标签，请选择**允许**复选框。

1. 选择**保存**。

------
#### [ Amazon CLI ]

**在实例启动期间启用对实例元数据中标签的访问权限**  
使用 [run-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/run-instances.html) 命令并添加以下 `--metadata-options` 选项。

```
--metadata-options "InstanceMetadataTags=enabled"
```

**在实例启动后启用对实例元数据中标签的访问权限**  
使用以下 [modify-instance-metadata-options](https://docs.amazonaws.cn/cli/latest/reference/ec2/modify-instance-metadata-options.html) 命令。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --instance-metadata-tags enabled
```

**验证对实例元数据中标签的访问权限已启用**  
使用 [describe-instances](https://docs.amazonaws.cn/cli/latest/reference/ec2/describe-instances.html) 命令并检查 `InstanceMetadataTags` 的值。

```
aws ec2 describe-instances \
    --instance-ids i-1234567890abcdef0 \
    --query "Reservations[*].Instances[].MetadataOptions[].InstanceMetadataTags"
```

下面是示例输出。该值为 `enabled` 或 `disabled`。

```
[
    "enabled"
]
```

------
#### [ PowerShell ]

**在实例启动期间启用对实例元数据中标签的访问权限**  
使用 [New-EC2Instance](https://docs.amazonaws.cn/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 并添加以下 `-MetadataOptions_InstanceMetadataTags` 参数。

```
-MetadataOptions_InstanceMetadataTags enabled
```

**在实例启动后启用对实例元数据中标签的访问权限**  
使用 [Edit-EC2InstanceMetadataOption](https://docs.amazonaws.cn/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet。

```
Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -InstanceMetadataTags enabled
```

**验证对实例元数据中标签的访问权限已启用**  
使用 [Get-EC2Instance](https://docs.amazonaws.cn/cli/latest/reference/ec2/Get-EC2Instance.html) cmdlet 并检查 `InstanceMetadataTags` 的值。

```
(Get-EC2Instance `
    -InstanceId i-1234567890abcdef0).Instances.MetadataOptions.InstanceMetadataTags.Value
```

下面是示例输出。该值为 `enabled` 或 `disabled`。

```
enabled
```

------

## 从实例元数据中检索标签


在允许访问实例元数据中的实例标签后，您可以从实例元数据访问 `tags/instance` 类别。有关更多信息，请参阅 [访问 EC2 实例的实例元数据](instancedata-data-retrieval.md)。

------
#### [ IMDSv2 ]

**Linux**  
在 Linux 实例中运行以下命令，列出该实例的所有标签键。

```
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。

```
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

**Windows**  
在 Windows 实例中运行以下 cmdlet，列出该实例的所有标签键。

```
$token = Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} `
    -Method PUT -Uri http://169.254.169.254/latest/api/token
```

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。IMDSv2 请求使用在前面的示例中使用命令中创建的存储令牌。令牌不得过期。

```
Invoke-RestMethod `
    -Headers @{"X-aws-ec2-metadata-token" = $token} `
    -Method GET -Uri http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

------
#### [ IMDSv1 ]

**Linux**  
在 Linux 实例中运行以下命令，列出该实例的所有标签键。

```
curl http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。

```
curl http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

**Windows**  
在 Windows 实例中运行以下 cmdlet，列出该实例的所有标签键。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/tags/instance
```

此示例会获取上一示例中获取的键的值。

```
Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/tags/instance/tag-key
```

------

## 禁用对实例元数据中标签的访问权限


您可以禁用对实例元数据中实例标签的访问权限。您无需在启动时禁用对实例元数据中实例标签的访问权限，因此在默认情况下已禁用此权限。

------
#### [ Console ]

**禁用对实例元数据中标签的访问权限**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择实例，然后依次选择** Actions**（操作）、**Instance settings**（实例设置）、**Allow tags in instance metadata**（允许实例元数据中的标签）。

1. 要关闭对实例元数据中的标签的访问，请清除**允许**复选框。

1. 选择**保存**。

------
#### [ Amazon CLI ]

**禁用对实例元数据中标签的访问权限**  
使用以下 [modify-instance-metadata-options](https://docs.amazonaws.cn/cli/latest/reference/ec2/modify-instance-metadata-options.html) 命令。

```
aws ec2 modify-instance-metadata-options \
    --instance-id i-1234567890abcdef0 \
    --instance-metadata-tags disabled
```

------
#### [ PowerShell ]

**禁用对实例元数据中标签的访问权限**  
使用 [Edit-EC2InstanceMetadataOption](https://docs.amazonaws.cn/powershell/latest/reference/items/Edit-EC2InstanceMetadataOption.html) cmdlet。

```
Edit-EC2InstanceMetadataOption `
    -InstanceId i-1234567890abcdef0 `
    -InstanceMetadataTag disabled
```

------