AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

标记您的 AWS IoT Greengrass 资源

标签可以帮助您组织和管理您的 AWS IoT Greengrass 组。您可以使用标签将元数据分配给组、批量部署以及添加到组的核心、设备和其他资源。 也可以在 IAM 策略中使用标签定义对 Greengrass 资源的条件访问。

注意

目前,AWS IoT 账单组或成本分配报告不支持 Greengrass 资源标签。

有关标签的基本知识

标签可让您按各种标准(例如用途、所有者和环境)对 AWS IoT Greengrass 资源进行分类。当您具有相同类型的许多资源时,可以根据附加到资源的标签来快速识别资源。标签包含您定义的一个键和一个可选值。我们建议您为每个资源类型设计一组标签键。使用一组连续的标签键,管理资源时会更加轻松。例如,您可以为组定义一组标签来以帮助您跟踪核心设备的出厂位置。有关更多信息,请参阅 AWS 标记策略

AWS IoT Greengrass API 中的标记支持

您必须使用 AWS IoT Greengrass API 为支持标记的 AWS IoT Greengrass 资源创建和管理标签。

  • 要在资源创建期间添加标签,请在资源的 tags 属性中定义这些标签。

  • 要在创建资源后添加标签或更新标签值,请使用 TagResource 操作。

  • 要从资源中删除标签,请使用 UntagResource 操作。

  • 要检索与资源关联的标签,请使用 ListTagsForResource 操作或获取资源并检查其 tags 属性。

下表列出了您可以在 AWS IoT Greengrass API 中标记的资源及其相应的 CreateGet 操作。

使用以下操作可为支持标记的资源列出和管理标签:

您可以随时在资源中添加或删除标签要更改标签键的值,请将标签添加到定义相同的键和新值的资源。新值将覆盖旧值。您可以将值设为空的字符串,但不能将值设为空值。

在删除一项资源时,与该资源关联的标签也将被删除。

注意

请勿将资源标签与可分配给 AWS IoT 事物的属性混淆。虽然 Greengrass 核心是 AWS IoT 事物,但本主题中描述的资源标签将附加到 CoreDefinition 而不是核心事物。

结合使用标签和 IAM 策略

在 IAM 策略中,您可以使用资源标签来控制用户访问和权限。例如,策略可以允许用户仅创建那些具有特定标签的资源。策略还可以限制用户创建或修改具有特定标签的资源。您可以在创建期间标记资源(称作在创建时标记),因此,您稍后无需运行自定义标记脚本。当启动带标签的新环境时,系统会自动应用相应的 IAM 权限。

可以在策略的 Condition 元素(也称作 Condition 块)中使用以下条件上下文密钥和值。

greengrass:ResourceTag/tag-key: tag-value

允许或拒绝带特定标签的资源上的用户操作。

aws:RequestTag/tag-key: tag-value

要求在发出创建或修改可标记资源的标签的 API 请求时使用(或不使用)特定标签。

aws:TagKeys: [tag-key, ...]

要求在发出创建或修改可标记资源的 API 请求时使用(或不使用)一组特定标签键。

只能在对可标记资源执行的 AWS IoT Greengrass 操作中使用的条件上下文密钥和值。这些操作将资源作为必需参数。例如,可以在 GetGroupVersion 上设置条件访问。无法在 AssociateServiceRoleToAccount 上设置条件访问,因为请求中未引用可标记资源(例如,组、核心定义或设备定义)。

有关更多信息,请参阅 IAM 用户指南 中的使用标签控制访问IAM JSON 策略参考。JSON 策略参考包含 IAM 中的 JSON 策略的元素、变量和评估逻辑的详细语法、描述和示例。

示例 IAM 策略

以下示例策略应用基于标签的权限,这些权限仅允许测试用户操作测试资源。

  • 第一个语句允许 IAM 用户操作仅具有 env=beta 标签的资源。

  • 第二个语句防止 IAM 用户从资源中删除 env=beta 标签。这可以防止用户删除自己的访问权限。

    注意

    如果使用标签控制对资源的访问,则还应管理允许用户添加标签或从这些资源中删除标签的权限。否则,在某些情况下,用户将能够通过修改资源标签来绕过您的限制并获得资源访问权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "greengrass:*", "Resource": "*", "Condition": { "StringEquals": { "greengrass:ResourceTag/env": "beta" } } }, { "Effect": "Deny", "Action": "greengrass:UntagResource", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/env": "beta" } } } ] }

要允许用户在创建时添加标签,您必须向用户授予适当的权限。以下示例策略包括 greengrass:TagResourcegreengrass:CreateGroup 操作的 "aws:RequestTag/env": "beta" 条件,这使得用户仅在为具有 env=beta 的组添加标签时能够创建组。这有效地迫使用户为新组添加标签。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "greengrass:TagResource", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/env": "beta" } } }, { "Effect": "Allow", "Action": "greengrass:CreateGroup", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/env": "beta" } } } ] }

以下代码段说明了如何通过将标签键括在列表中来为其指定多个标签值:

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

标签限制

以下一般限制适用于标签:

  • 每个资源的最大标签数是 50。

  • 最大键长度为 127 个 Unicode 字符(采用 UTF-8 格式)。

  • 最大值长度为 255 个 Unicode 字符(采用 UTF-8 格式)。

  • 标签键和值要区分大小写。

  • 请勿在标签名称或值中使用 aws: 前缀,因为它专为 AWS 使用预留。您无法编辑或删除使用此前缀的标签名称或值。具有此前缀的标签不计入每个资源的标签数限制。

  • 如果在多个服务和资源中使用您的标记方案,请记住,其他服务可能对允许使用的字符有限制。通常,允许使用字母、空格和数字(可用 UTF-8 格式表示),以及以下特殊字符:+ - = . _ : / @