管理资源标记


本指南介绍如何创建和管理 Compute Engine 资源的标记。标记是一种可以附加到 Google Cloud Platform 资源的键值对。标记具有多种用途,包括:

  • 根据资源是否有特定标记,视条件允许或拒绝政策。
  • 在全球网络防火墙政策和区域级网络防火墙政策中定义来源和目标。
  • 按逻辑组织资源

创建标记并向该标记和资源授予相应的访问权限后,您能够以键值对的形式附加该标记。对于给定键,您只能将一个值附加到资源。例如,如果您附加了 environment: development 标记,则无法附加 environment: productionenvironment: test 标记。每个资源最多可以关联 50 个键值对。

如需将标记附加到资源,您必须创建将标记值关联到 Google Cloud 资源的 TagBinding 资源。如需详细了解标记及其工作原理,请参阅标记概览

准备工作

  • 阅读 Resource Manager 文档中的标记概览
  • 阅读 Resource Manager 文档中的创建和管理标记
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

权限

如需管理 Compute Engine 资源的标记,用户和服务账号应具有 tagUser 角色。如需详细了解 tagUser 角色,请参阅所需权限

支持的资源

以下资源仅在创建资源支持标记:

  • 虚拟机实例
  • 磁盘
  • 托管式实例组
  • 映像
  • 快照
  • 大多数网络资源,例如网络、子网、防火墙和 HealthCheck 资源。

以下资源还支持在资源创建期间进行标记:

  • 虚拟机实例
  • 磁盘

向资源添加标记

创建资源后,您可以按照以下说明将现有标记附加到某些资源。

控制台

根据资源类型,确切的步骤可能略有不同。例如,以下步骤会将标记附加到虚拟机:

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 选择您的项目并点击继续

  3. 名称列中,点击要为其添加标记的虚拟机的名称。

  4. 虚拟机实例详情页面中,完成以下步骤:

    1. 点击修改
    2. 基本部分中,点击管理标记并为实例添加所需的标记。
    3. 点击保存

gcloud

如需查看有关如何使用这些标志的详细说明,请参阅 Resource Manager 文档中的将标记附加到资源

例如,以下命令会将标记附加到虚拟机:

gcloud resource-manager tags bindings create \
    --location LOCATION_NAME \
    --tag-value=tagValues/TAGVALUE_ID \
    --parent=//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID

请替换以下内容:

  • LOCATION_NAME:目标资源所在的区域,例如 us-central1
  • TAGVALUE_ID:标记值的数字 ID
  • PROJECT_NUMBER:您的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • VM_ID:虚拟机实例的数字 ID

API

要将标记附加到资源,必须首先创建标记绑定的 JSON 表示法,其中包含标记值的永久 ID 或命名空间名称以及资源的永久 ID。如需详细了解标记绑定的格式,请参阅 TagBinding 参考文档

如需将标记附加到可用区级资源(例如虚拟机实例),请将 tagBindings.create 方法与资源所在的区域级端点配合使用。例如:

POST https://LOCATION-cloudresourcemanager.googleapis.com/v3/tagBindings

请求正文可以是以下内容之一:

{
  "parent": "//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID",
  "tagValue": "tagValue/TAGVALUE_ID"
}

或以下内容:

{
  "parent": "//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID",
  "tagValueNamespacedName": TAGVALUE_NAMESPACED_NAME
}

请替换以下内容:

  • LOCATION:目标资源所属的位置
  • PROJECT_NUMBER:您的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • VM_ID:虚拟机的数字 ID
  • TAGVALUE_ID:所附加的标记值的永久 ID,例如 4567890123
  • TAGVALUE_NAMESPACED_NAME 是所附加的标记值的命名空间名称,格式为 parentNamespace/tagKeyShortName/tagValueShortName

在创建资源期间向资源添加标记

在某些情况下,建议您在创建资源期间标记资源,而不是在创建资源之后。例如,建议您在创建 Cloud 新一代防火墙资源时为网络政策应用防火墙标记。

控制台

根据资源类型,确切的步骤可能略有不同。 以下步骤适用于虚拟机:

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 选择您的项目并点击继续

  3. 点击创建实例

  4. 点击管理标记和标签

  5. 点击添加标记

  6. 按照侧边栏中的说明选择要添加到实例的标记。

  7. 点击保存

  8. 完成创建并启动虚拟机实例中的其他步骤,以完成实例的创建。

gcloud

如需在资源创建期间将标记附加到资源,请在相应的 create 命令后添加 --resource-manager-tags 标志。例如,如需将标记附加到虚拟机,请使用以下命令:

gcloud compute instances create INSTANCE_NAME --resource-manager-tags=tagKeys/TAGKEY_ID=tagValues/TAGVALUE_ID

请替换以下内容:

  • INSTANCE_NAME:实例的名称
  • TAGKEY_ID:标记键编号数字 ID
  • TAGVALUE_ID:所附加的标记值的永久数字 ID,例如:4567890123

通过使用英文逗号分隔标记来指定多个标记,例如 TAGKEY1=TAGVALUE1,TAGKEY2=TAGVALUE2

API

对下面的网址发出 POST 请求:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances

添加以下请求 JSON 正文:

{
  "name": INSTANCE_NAME,
  "params": {
    "resourceManagerTags": {
      "tagKeys/TAGKEY_ID: "tagValues/TAGVALUE_ID",
    },
  }
  // other fields omitted
}

请替换以下内容:

  • INSTANCE_NAME:实例的名称
  • TAGKEY_ID:标记键编号数字 ID
  • TAGVALUE_ID:所附加的标记值的永久数字 ID,例如:4567890123

从资源分离标记

您可以通过删除标记绑定资源,从资源分离标记。

如需查看有关如何分离标记的说明,请参阅 Resource Manager 文档中的从资源分离标记

控制台

根据资源类型,确切的步骤可能略有不同。例如,以下步骤可将标记与虚拟机分离:

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 选择您的项目并点击继续

  3. 名称列中,点击要为其添加标记的虚拟机的名称。

  4. 虚拟机实例详情页面中,完成以下步骤:

    1. 点击修改
    2. 基本部分中,点击管理标记并为实例移除所需标记。
    3. 点击保存

gcloud

以下示例使用 gcloud CLI 从虚拟机分离标记:

gcloud resource-manager tags bindings delete \
--location LOCATION_NAME \
--tag-value=tagValues/TAGVALUE_ID \
--parent //compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID

请替换以下内容:

  • LOCATION_NAME:目标资源所在的区域,例如 us-central1
  • TAGVALUE_ID:标记键的数字 ID
  • PROJECT_NUMBER:您的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • VM_ID:虚拟机实例的数字 ID

如需将现有标记绑定更新或替换为其他标记绑定,请分离旧标记绑定并附加新标记绑定。

API

如需删除附加到资源(例如虚拟机)的标记绑定,请将 tagBindings.delete 方法与资源所在的区域级端点配合使用。

DELETE https://LOCATION-cloudresourcemanager.googleapis.com/v3/{name=TAGBINDINGS_NAME}

其中:

  • TAGBINDINGS_NAME 是 TagBinding 的永久 ID,例如 tagBindings/%2F%2Fcloudresourcemanager.googleapis.com%2Fprojects%2F1234567890/tagValues/567890123456

  • LOCATION 是资源的区域端点,例如 us-central1

查看附加到资源的标记

如需查看有关如何列出标记的详细说明,请参阅 Resource Manager 文档中的列出附加到资源的标记

控制台

根据资源类型,确切的步骤可能略有不同。例如,以下步骤展示了如何查看虚拟机的标记:

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 选择您的项目并点击继续

  3. 名称列中,点击要查看其标记的虚拟机的名称。

  4. 虚拟机实例详情页面中的标记部分下,查找标记。

gcloud

如需获取直接附加到资源的标记绑定列表,请使用 gcloud resource-manager tags bindings list 命令。如果添加 --effective 标志,您还会返回此资源继承的标记列表。例如:

gcloud resource-manager tags bindings list \
    --location=LOCATION_NAME \
    --parent //compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID

请替换以下内容:

  • LOCATION_NAME:目标资源所在的区域,例如 us-central1
  • PROJECT_NUMBER:您的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • VM_ID:虚拟机实例的数字 ID

如果将 --effective 标志添加到 tags bindings list 命令,则也将返回此资源继承的所有标记的列表。您应该会看到如下所示的响应:

namespacedTagKey: 961309089256/environment
namespacedTagValue: 961309089256/environment/production
tagKey: tagKeys/417628178507
tagValue: tagValues/247197504380
inherited: true

如果资源上评估的所有标记都直接附加,则 inherited 字段为 false 且被省略。

API

如需列出附加到区域级资源(例如 Compute Engine 实例)的标记绑定,请使用 tagBindings.list 方法并使用资源所在的区域端点。例如:

GET https://LOCATION_NAME-cloudresourcemanager.googleapis.com/v3/tagBindings

{
    "parent": "//compute.googleapis.com/projects/PROJECT_NUMBER/zones/ZONE/instances/VM_ID"
}

请替换以下内容:

  • LOCATION_NAME:目标资源所在的区域,例如 us-central1
  • PROJECT_NUMBER:您的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • VM_ID:虚拟机实例的数字 ID

后续步骤