管理资源标记


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

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

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

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

准备工作

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.
    3. REST

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

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

权限

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

支持的资源

Compute Engine 支持为以下资源添加标记:

  • 仅在创建资源后

    • 托管实例组 (MIG)
    • 图片
    • 快照
    • 大多数网络资源,例如网络、子网、防火墙和健康检查资源。
  • 在创建资源期间和之后:虚拟机 (VM) 实例和磁盘

向资源添加标记

您可以将现有标记附加到特定资源。创建资源后,请按照以下说明将标记附加到该资源。

控制台

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

  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:包含目标资源的区域;在此示例中,即虚拟机实例所在的区域
  • TAGVALUE_ID:标记值的数字 ID
  • PROJECT_NUMBER:包含目标资源的项目的数字 ID
  • ZONE:包含目标资源的可用区;在此示例中,即虚拟机实例所在的可用区
  • VM_ID虚拟机实例 ID

REST

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

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

POST https://LOCATION_NAME-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_NAME:包含目标资源的区域;在此示例中,即虚拟机实例所在的区域
  • PROJECT_NUMBER:包含目标资源的项目的数字 ID
  • ZONE:包含目标资源的可用区;在此示例中,即虚拟机实例所在的可用区
  • VM_ID虚拟机实例 ID
  • TAGVALUE_ID:所附加的标记值的永久 ID,例如 4567890123
  • TAGVALUE_NAMESPACED_NAME:所附加的标记值的命名空间名称,采用以下格式:parentNamespace/tagKeyShortName/tagValueShortName

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

在某些情况下,您可能需要在创建资源期间标记资源,而不是在创建资源之后。

控制台

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

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

    转到虚拟机实例

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

  3. 点击创建实例。系统会显示创建实例页面,并显示机器配置窗格。

  4. 在导航菜单中,点击高级。在显示的高级窗格中,执行以下操作:

    1. 展开 管理标记和标签部分。
    2. 点击 添加标记
    3. 在打开的标记窗格中,按照说明为实例添加标记。
    4. 点击保存
  5. 为实例指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项

  6. 要创建并启动该虚拟机,请点击创建

gcloud

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

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

替换以下内容:

  • INSTANCE_NAME:虚拟机实例的名称
  • ZONE:包含虚拟机实例的可用区
  • TAGKEY_ID:标记键编号数字 ID
  • TAGVALUE_ID:所附加的标记值的永久数字 ID,例如 4567890123

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

REST

对下面的网址发出 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-a
  • TAGVALUE_ID:标记键的数字 ID
  • PROJECT_NUMBER:包含目标资源的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • VM_ID:虚拟机实例的数字 ID

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

REST

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

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

替换以下内容:

  • LOCATION:资源的区域端点,例如 us-central1
  • TAGBINDINGS_NAME:TagBinding 的永久 ID;例如 tagBindings/%2F%2Fcloudresourcemanager.googleapis.com%2Fprojects%2F1234567890/tagValues/567890123456

查看附加到资源的标记

如需查看有关如何列出标记的详细说明,请参阅 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-a
  • 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 且被省略。

REST

如需列出附加到区域级资源(例如 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

后续步骤