

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

# 为资源添加 AWS IoT 标签
<a name="tagging-iot"></a>

为了帮助您管理和组织事物组、事物类型、主题规则、任务、计划的审核和安全配置文件，您可以选择将自己的元数据以标签的形式分配给其中每个资源。本部分介绍标签并说明如何创建标签。

为了帮助您管理与事物相关的成本，您可以创建包含事物的[账单组](tagging-iot-billing-groups.md)。然后，可以将包含您的元数据的标签分配给其中每个账单组。本部分还讨论账单组以及可用于创建和管理它们的命令。

## 标签基本知识
<a name="tagging-iot-basics"></a>

您可以使用标签以不同的方式对 AWS IoT 资源进行分类（例如，按用途、所有者或环境）。这在您具有相同类型的许多资源时会很有用 - 您可以根据分配给资源的标签快速识别资源。每个标签都包含您定义的一个键和一个可选值。例如，您可以为事物类型定义一组标签来帮助您按类型跟踪设备。我们建议您为每类资源创建一组可满足您的需求的标签键。使用一组连续的标签键，管理 资源时会更加轻松。

您可以根据添加或应用的标签搜索和筛选资源。您还可以使用账单组标签对成本进行分类和跟踪。您还可以使用标签控制对资源的访问，如 [在 IAM 策略中使用标签](tagging-iot-iam.md) 中所述。

为便于使用， AWS 管理控制台中的标签编辑器提供了一种集中、统一的方式来创建和管理标签。有关更多信息，请参阅[使用[AWS 管理控制台中的使用](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/getting-started.html)标签编辑器](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html)。

您也可以使用 AWS CLI 和 AWS IoT API 处理标签。当您在以下命令中使用 `Tags` 字段创建标签时，可以将标签与事物组、事物类型、主题规则、任务、安全配置文件、策略、账单组以及与事物关联的软件包和版本相关联：
+ [CreateBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateBillingGroup)
+ [CreateDestination](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_CreateDestination.html)
+ [CreateDeviceProfile](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_CreateDeviceProfile.html)
+ [CreateDynamicThingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDynamicThingGroup)
+ [CreateJob](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateJob)
+ [创建OTAUpdate](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateOTAUpdate)
+ [CreatePolicy](https://docs.aws.amazon.com//iot/latest/apireference/API_CreatePolicy.html)
+ [CreateScheduledAudit](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateScheduledAudit)
+ [CreateSecurityProfile](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateSecurityProfile)
+ [CreateServiceProfile](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_CreateServiceProfile.html)
+ [CreateStream](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateStream)
+ [CreateThingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateThingGroup)
+ [CreateThingType](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateThingType)
+ [CreateTopicRule](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateTopicRule)
+ [CreateWirelessGateway](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_CreateWirelessGateway.html)
+ [CreateWirelessDevice](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_CreateWirelessDevice.html)

您可以使用以下命令为支持标记的现有资源添加、修改或删除标签：
+ [TagResource](https://docs.aws.amazon.com//iot/latest/apireference/API_TagResource)
+ [ListTagsForResource](https://docs.aws.amazon.com//iot/latest/apireference/API_ListTagsForResource)
+ [UntagResource](https://docs.aws.amazon.com//iot/latest/apireference/API_UntagResource)

您可以修改标签的键和值，还可以随时删除资源的标签。您可以将标签的值设为空的字符串，但是不能将其设为空值。如果添加的标签的键与该资源上现有标签的键相同，新值就会覆盖旧值。如果删除资源，则所有与资源相关的标签都将被删除。

### 标签限制
<a name="tagging-iot-restrict"></a>

下面是适用于 标签的基本限制：
+ 每个资源的最大标签数 - 50
+ 最大密钥长度 - 127 个 Unicode 字符（采用 UTF-8 格式）
+ 最大值长度 - 255 个 Unicode 字符（采用 UTF-8 格式）
+ 标签键和值区分大小写。
+ 请勿在标签名称或值中使用 `aws:` 前缀。它是保留供 AWS 使用的。您无法编辑或删除带此前缀的标签名称或值。具有此前缀的标签不计入每个资源的标签数限制。
+ 如果在多个服务和资源中使用您的标记方案，请记住，其他服务可能对允许使用的字符有限制。允许使用的字符包括：可用 UTF-8 格式表示的字母、空格和数字以及以下特殊字符：\$1 - = . \$1 : / @。

# 在 IAM 策略中使用标签
<a name="tagging-iot-iam"></a>

可以在用于 AWS IoT API 操作的 IAM 策略中应用基于标签的资源级权限。这可让您更好地控制用户可创建、修改或使用哪些资源。在 IAM 策略中将 `Condition` 元素（也称作 `Condition` 块）与以下条件上下文键和值结合使用来基于资源标签控制用户访问（权限）：
+ 使用 `aws:ResourceTag/tag-key: tag-value` 可允许或拒绝带特定标签的资源上的用户操作。
+ 使用 `aws:RequestTag/tag-key: tag-value` 可要求在发出创建或修改允许标签的资源的 API 请求时使用（或不使用）特定标签。
+ 使用 `aws:TagKeys: [tag-key, ...]` 可要求在发出创建或修改允许标签的资源的 API 请求时使用（或不使用）一组特定标签键。

**注意**  
IAM 策略中的条件上下文密钥和值仅适用于那些以可标记的资源的标识符为必填参数的 AWS IoT 操作。例如，根据条件上下文键和值，[DescribeEndpoint](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeEndpoint)不允许或拒绝使用，因为此请求中未引用任何可标记的资源（事物组、事物类型、主题规则、作业或安全配置文件）。有关可标记 AWS IoT 资源及其支持的条件键的更多信息，请阅读的[操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiot.html)。 AWS IoT

有关使用标签的更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[使用标签控制访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。该指南的 [IAM JSON 策略参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)一部分包含 IAM 中的 JSON 策略的元素、变量和评估逻辑的详细语法、描述和示例。

以下示例策略应用 `ThingGroup` 操作两个基于标签的限制。受此策略限制的 IAM 用户：
+ 无法创建标签 “env=prod” 的事物组（在示例中，请参阅行 `"aws:RequestTag/env" : "prod"`)。
+ 无法修改或访问具有现有标签“env=prod”的资源（在示例中，请参阅行 `"aws:ResourceTag/env" : "prod"`）。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "iot:CreateThingGroup",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/env": "prod"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "iot:CreateThingGroup",
        "iot:DeleteThingGroup",
        "iot:DescribeThingGroup",
        "iot:UpdateThingGroup"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/env": "prod"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:CreateThingGroup",
        "iot:DeleteThingGroup",
        "iot:DescribeThingGroup",
        "iot:UpdateThingGroup"
      ],
      "Resource": "*"
    }
  ]
}
```

您还可以为给定标签键指定多个标签值，方法是将它们括在列表中，如下所示：

```
            "StringEquals" : {
              "aws:ResourceTag/env" : ["dev", "test"]
            }
```

**注意**  
如果您基于标签允许或拒绝用户访问资源，则必须考虑显式拒绝用户对相同资源添加或删除这些标签的能力。否则，用户可能通过修改资源标签来绕过您的限制并获得资源访问权限。

# 账单组
<a name="tagging-iot-billing-groups"></a>

AWS IoT 不允许你直接将标签应用于单个内容，但它确实允许你将内容放在账单组中并对这些内容应用标签。对于 AWS IoT，基于标签的成本和使用量数据仅限于账单组。

AWS IoT Core 对于 LoRa WAN 资源，例如无线设备和网关，无法添加到账单组。但是，它们可以与 AWS IoT 事物关联，可以将其添加到账单组中。

提供了以下命令：
+ [AddThingToBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_AddThingToBillingGroup) 将事物添加到账单组。
+ [CreateBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateBillingGroup) 创建账单组。
+ [DeleteBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_DeleteBillingGroup) 删除账单组。
+ [DescribeBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeBillingGroup) 返回有关账单组的信息。
+ [ListBillingGroups](https://docs.aws.amazon.com//iot/latest/apireference/API_ListBillingGroups) 列出您已创建的账单组。
+ [ListThingsInBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_ListThingsInBillingGroup) 列出您已添加到给定账单组的事物。
+ [RemoveThingFromBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_RemoveThingFromBillingGroup) 从账单组删除给定事物。
+ [UpdateBillingGroup](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateBillingGroup) 更新有关账单组的信息。
+ [CreateThing](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateThing) 允许您在创建事物时为其指定账单组。
+ [DescribeThing](https://docs.aws.amazon.com//iot/latest/apireference/API_DescribeThing) 返回事物（包括事物所属的账单组，如果有）的描述。

 AWS IoT 无线 API 提供这些操作来将无线设备和网关与 AWS IoT 事物关联起来。
+ [AssociateWirelessDeviceWithThing](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_AssociateWirelessDeviceWithThing.html)
+ [AssociateWirelessGatewayWithThing](https://docs.aws.amazon.com//iot-wireless/latest/apireference/API_AssociateWirelessGatewayWithThing.html)

## 查看成本分配和使用率数据
<a name="tagging-iot-billing-groups-costs"></a>

您可以使用账单组标签对成本进行分类和跟踪。当您将标签应用于账单组（以及它们所包含的内容）时， AWS 会生成以逗号分隔值 (CSV) 文件形式的成本分配报告，其中包含按标签汇总的使用量和成本。您可以设置代表业务类别（例如成本中心、应用程序名称或所有者）的标签，以便整理多种服务的成本。有关将标签用于成本分配的更多信息，请参阅《[AWS 账单和成本管理用户指南](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/)》中的[使用成本分配标签](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。

**注意**  
要准确地将使用率和成本数据与您放入账单组的那些事物相关联，每个设备或应用程序必须：  
注册为事物 AWS IoT. 有关更多信息，请参阅 [使用管理设备 AWS IoT](iot-thing-management.md)。
仅使用事物的名称作为客户端 ID 通过 MQTT 连接到 AWS IoT 消息代理。有关更多信息，请参阅 [设备通信协议](protocols.md)。如果您的客户端 ID 与事物名称不匹配，您可以启用独占事物附件以建立关联。有关更多信息，请参阅 [将 AWS IoT 事物关联到 MQTT 客户端连接](exclusive-thing.md)。
使用与事物关联的客户端证书进行身份验证。

为账单组提供了以下定价维度（基于与账单组关联的事物的活动）：
+ 连接（基于要连接的用作客户端 ID 的事物名称）。
+ 消息收发（基于事物的入站和出站消息；仅限 MQTT）。
+ 影子操作（基于其消息触发了影子更新的事物）。
+ 触发的规则（基于其入站消息触发规则的事物；不适用于 MQTT 生命周期事件触发的那些规则）。
+ 事物索引更新（基于添加到索引的事物）。
+ 远程操作（基于已更新的事物）。
+ [AWS IoT Device Defender 检测](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/device-defender-detect.html)报告（基于报告其活动的事物）。

（为账单组报告的）基于标签的成本和使用率数据不会反映以下活动：
+ 设备注册表操作（包括更新事物、事物组和事物类型）。有关更多信息，请参阅 [使用管理设备 AWS IoT](iot-thing-management.md)）。
+ 事物组索引更新（在添加事物组时）。
+ 索引搜索查询。
+ [设备预调配](iot-provision.md).
+ [AWS IoT Device Defender 审核](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/device-defender-audit.html)报告 