标记是可附加到Google Cloud 资源的键值对,用于为资源添加注释并有条件地强制执行政策。这种条件性强制执行功能可让您对 Google Cloud 资源层次结构中的资源进行精细控制。
Google Cloud 资源层次结构将资源整理成树结构,以帮助您大规模管理资源。不过,此层次结构仅可建立少量业务维度的模型,包括组织结构、区域、工作负载类型和成本中心。标记可让您灵活地在整个层次结构中将多个业务维度层叠放置。
标记和标签
标签是为资源创建注解的另一种方式。下表列出了标记和标签之间的一些区别:
| 标记 | 标签 | |
|---|---|---|
| 资源结构 | 标记键、标记值和标记绑定都是离散资源 | 本身不是资源,而是资源的元数据 |
| 定义 | 在组织或项目级层定义 | 由每个资源定义 |
| 访问权限控制 | 管理和附加标记需要 Identity and Access Management (IAM) 角色 | 附加标签需要 IAM 角色,这些角色因服务资源而异 |
| 附加的前提条件 | 必须先定义标记键和标记值,然后才能将标记附加到资源 | 连接没有前提条件 |
| 可否继承 | 资源的子级会继承 Google Cloud 层次结构中的标记绑定 | 不会由资源的子级继承 |
| 删除要求 | 除非该标记不存在任何标记绑定,否则无法删除标记 | 可随时从资源中移除 |
| 命名要求 | 标记值和标记键的要求 | 标签要求 |
| 键值对名称长度 | 最多 256 个字符 | 最多 63 个字符 |
| 允许和拒绝政策支持 | 允许政策条件和拒绝政策条件可以引用标记 | 不支持允许和拒绝政策 |
| 组织政策支持 | 组织政策条件限制可以引用某些资源上的标记 | 不支持组织政策 |
| Cloud Billing 集成 | 执行退款、审核和其他费用分配分析,将 Cloud Billing 费用数据导出到 BigQuery | 在 Cloud Billing 中按标签过滤资源,将 Cloud Billing 数据导出到 BigQuery |
如需详细了解标签,请参阅创建和管理标签。
语义标记
语义标记是一个键值对,可为您的资源提供有意义的元数据,并具有由 OpenTelemetry (OTel) 惯例支持的强大、标准化的语义。
您可以将语义标记与 App Hub 资源搭配使用。当您在 App Hub 中为服务和工作负载设置属性时,App Hub 会自动将这些属性作为只读系统语义标记复制到直接底层资源。
系统语义标记是只读的。您无法直接使用 Tags API 或 Google Cloud 控制台修改或移除这些系统标记。标记管理在 App Hub 中进行。
App Hub 复制的语义标记
如果您使用 App Hub,则在服务或工作负载上设置的环境和重要性属性会自动复制为专用命名空间 google:AppHub 下的只读系统语义标记。
支持的系统标签包括:
google:AppHub/environment:派生自 App Hub 的值,例如PRODUCTION或STAGING。google:AppHub/criticality:派生自 App Hub 的值,例如MISSION_CRITICAL或HIGH。
将 App Hub 上下文显示为系统标记可确保下游服务(例如 Google Cloud 控制台)使用权威元数据来强制执行治理和安全政策,而不会产生与手动配置相关的风险。
如需详细了解如何管理语义标记,请参阅查看和管理语义标记。
语义目录
语义目录提供了可用语义及其与 OpenTelemetry (OTel) 支持的属性的映射列表。您可以在 Google Cloud 控制台中浏览此目录,也可以使用 API 查看详细信息。
如需详细了解如何访问目录,请参阅查看语义目录。
| 语义键 | OTel 属性键 | 语义值 | OTel 属性值 |
|---|---|---|---|
ENVIRONMENT |
deployment.environment.name |
PRODUCTION |
production |
STAGING |
staging |
||
TEST |
test |
||
DEVELOPMENT |
development |
||
CRITICALITY |
service.criticality |
MISSION_CRITICAL |
critical |
HIGH |
high |
||
MEDIUM |
medium |
||
LOW |
low |
语义标记的限制
语义标记具有以下限制:
- 自定义绑定:您无法通过 Tags API 将
ENVIRONMENT或CRITICALITY语义标记直接绑定到资源或 Resource Manager 节点(项目、文件夹或组织)。 - 用户定义的语义:不支持将现有标记升级为语义标记。
- 仅限直接资源:同步仅适用于在 App Hub 中注册的直接资源。它不会传播到服务或工作负载中的嵌套或间接资源(例如,MIG 中的单个虚拟机)。
创建标记
标记采用键值对结构。您可以在组织或项目资源下创建标记键资源,而标记值是附加到键的资源,例如,具有值 production 和 development 的标记键 environment。
代码管理
管理员可以通过限制哪些人可以创建、更新、删除标记以及将标记附加到资源来控制标记的使用。他们可以选择一个单独的标记进行修改,例如添加或移除值,以及更新说明。这样,您就可以对代码进行精细控制。
标记可以选择性地添加说明,该说明会在检索到标记的相关信息时显示。该说明可帮助将标记附加到资源的用户了解标记的用途。
在父级项目或组织中,每个标记键都必须是唯一的。这可确保每个标记值在绑定到资源时,都会与其标记键创建唯一的配对。
政策和标记
您可以将标记和 IAM Condition 结合使用,以实现以下目的:
创建标记值后,您可以将标记值绑定到资源。然后,您可以创建具有条件的 IAM 政策,这些政策会根据标记键是否已绑定到资源来识别资源。如需了解如何使用标记和 IAM Condition,请参阅标记和条件式访问。
代码更改的影响
如果您使用标记有条件地授予或拒绝访问权限,或限定组织政策的范围,则从资源绑定或解除绑定标记可能会改变这些政策的影响。
例如,假设您有一组开发者需要管理 Compute Engine 实例,但仅限于用于开发的实例:
- 标记定义:您有一个标记键
123456789012/env,其值为dev和prod。 - 条件访问权限:您向开发者群组授予 Compute Instance Admin 角色 (
roles/compute.instanceAdmin)。您向角色绑定添加一个条件,以便仅当资源具有标记env: dev时才允许访问。 - 变更的影响:
- 绑定标记:您将标记
env: dev附加到实例。现在,条件角色绑定会向开发者授予管理实例的权限。 - 解除绑定标记:之后,同一实例被提升到生产环境。您解绑
env: dev标记并绑定env: prod标记。条件角色绑定不再向开发者授予管理此实例的权限。
- 绑定标记:您将标记
代码更改通常会在 2 分钟内生效。不过,更改可能需要长达 7 分钟才能在整个系统中完全传播。此传播延迟时间适用于授予或撤消访问权限的速度,或在绑定或解除绑定标记后组织政策生效的速度。
使用组织政策实现强制性标记
您可以使用自定义组织政策在资源上实现强制性标记。强制执行强制性标记后,您只能创建符合组织标记政策的资源,即资源会与政策中指定的强制性标记键的标记值绑定。如需了解详情,请参阅设置自定义限制条件以强制执行标记。
以下资源类型支持强制执行必需标记:
- Resource Manager 项目和文件夹
- Filestore 实例
- AlloyDB for PostgreSQL 集群和备份资源
- Workflows 工作流
- Compute Engine 资源:
- 实例
- 磁盘
- 外部 VPN 网关
- VPN 网关
- 目标 VPN 网关
- VPN 隧道
- 互连
- 互连连接
- 后端服务
- 区域级后端服务
- 后端存储桶
- VPC 资源:
- 网络
- 子网
- 防火墙规则
- 路线
标记继承
将标记值附加到资源后,默认情况下,该资源的所有后代都会继承相同的标记值。您可以替换后代资源上继承的标记值。如需替换继承的标记值,请将其他标记值绑定到后代资源。不同的标记值必须使用与继承的标记值相同的标记键。
例如,假设您将标记 environment: development 应用于某个文件夹,并且该文件夹有两个名为 team-a 和 team-b 的子文件夹。您还可以将其他标记 environment: test 应用于 team-b 文件夹。因此,team-a 文件夹中的项目和其他资源会继承标记 environment: development,而 team-b 文件夹中的项目和其他资源会继承标记 environment: test:
如果您从 team-b 文件夹中移除 environment: test 标记,则该文件夹及其资源会继承 environment: development 标记。
附加到资源并由资源继承的所有标记统称为有效标记。资源的有效标记是直接附加到该资源的标记以及附加到整个层次结构中该资源的所有祖先级资源的所有标记的组合。
将标记与 IAM Condition 搭配使用时,我们建议您为 IAM Condition 使用的每个标记键创建一个安全的默认标记值。通过将安全默认标记值绑定到您的组织,应用该标记值,以便组织内的所有资源都继承该标记值。仅通过在相关资源上明确替换继承的绑定来更改标记值。
例如,假设您有一个 IAM Condition,该条件取决于 enforcement 标记键的 on 标记值,并且该标记键还具有 off 标记值。将标记值 enforcement: off 绑定到组织,以创建由组织内的所有资源继承的安全默认值。仅将标记值 enforcement: on 绑定到组织内的所选资源。
然后,您可以编写针对 enforcement 标记键的政策,其中包含在资源为 enforcement: on 或 enforcement: off 时影响该资源的条件,以及在资源为 enforcement: default 时安全的情况。如果从资源中移除了 enforcement 标记键,则该资源可以从其父级资源继承 enforcement 的标记值。如果没有任何父级资源具有 enforcement 标记键,则资源会从组织资源继承 enforcement: default。
使用安全的默认标记会有所帮助,但为了防止出现意外行为,我们建议您在移动资源或移除标记之前,先查看标记和政策以及相关条件。
删除标记键和值
您必须先删除使用标记值的所有资源绑定,然后才能删除标记值。
防止标记值被删除
您可以通过将标记冻结附加到标记值,为标记值创建额外的保护层。与标记绑定一样,标记保全可防止用户删除标记值。
某些资源会自动对附加到资源的每个标记值创建标记保留。您必须先移除此标记冻结,然后才能删除标记值。