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 条件搭配使用,以实现以下目的:
创建标记值后,您可以将标记值绑定到资源。然后,您可以创建 IAM 政策,其中包含根据标记键是否已绑定到 资源来识别资源的条件。如需了解如何使用标记和 IAM 条件,请参阅 标记和条件式访问权限。
标记变更的影响
如果您使用标记来有条件地授予或拒绝访问权限,或者限定组织政策的范围,那么将标记绑定到资源或从资源取消绑定标记可能会改变这些政策的影响。
例如,假设您有一组开发者需要管理 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 条件搭配使用时,建议您为 IAM 条件使用的每个标记键创建一个安全的默认标记值。通过将该标记值绑定到组织来应用安全的默认标记值,以便组织内的所有资源都继承该标记值。仅通过显式替换相关资源上继承的绑定来更改标记值。
例如,假设您有一个 IAM Condition,该条件依赖于 enforcement 标记键的标记值 on,并且该标记键还具有 off 标记值。将标记值 enforcement: off 绑定到组织,以创建一个安全的默认值,该默认值由组织内的所有资源继承。
仅将标记值 enforcement: on 绑定到组织内选定的资源。
然后,您可以编写政策来解决 enforcement 标记键,其中的
条件将影响资源(如果资源为 enforcement: on 或
enforcement: off),如果资源为 enforcement: default,则为安全情况。如果 enforcement 标记键已从资源中移除,则该资源随后会从其父资源继承 enforcement 的标记值。如果没有父资源
具有 enforcement 标记键,则该资源将从组织资源继承 enforcement: default
。
使用安全的默认标记可能会有所帮助,但是为了防止意外行为,我们建议您在移动资源或移除标记之前查看标记和有条件的政策。
删除标记键和值
您必须先删除使用标记值的所有资源绑定,然后才能删除标记值。
防止标记值被删除
您可以为标记值附加标记保留,从而为标记值创建额外的保护层。与标记绑定一样,标记保留可防止用户删除标记值。
某些资源会自动为附加到资源的每个标记值创建标记保留。您必须先移除此标记保留,然后才能删除标记值。