管理资源标记


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

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

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

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

准备工作

  • 阅读 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. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    REST

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

      安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

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

所需的角色

如需获得为 Compute Engine 资源创建和管理标记所需的权限,请让管理员向您授予组织或项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色可提供创建和管理 Compute Engine 资源的标记所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建和管理 Compute Engine 资源的标记,需要具备以下权限:

  • 查看标记:
    • resourcemanager.tagKeys.get
    • resourcemanager.tagKeys.list
    • resourcemanager.tagValues.list
    • resourcemanager.tagValues.get
    • compute.instances.listTagBindings
    • compute.instances.listEffectiveTags
    • resourcemanager.projects.get
  • 创建标记:
    • resourcemanager.tagKeys.create
    • resourcemanager.tagValues.create
    • resourcemanager.tagKeys.setIamPolicy
    • resourcemanager.tagValues.setIamPolicy
  • 管理标记:
    • resourcemanager.tagKeys.update
    • resourcemanager.tagValues.update
    • resourcemanager.tagKeys.delete
    • resourcemanager.tagValues.delete
    • resourcemanager.tagKeys.getIamPolicy
    • resourcemanager.tagValues.getIamPolicy
    • resourcemanager.tagKeys.setIamPolicy
    • resourcemanager.tagValues.setIamPolicy
  • 为计算实例添加或移除标记:
    • compute.instances.createTagBinding
    • compute.instances.deleteTagBinding
    • resourcemanager.tagValueBindings.create
    • resourcemanager.tagValueBindings.delete

您也可以使用自定义角色或其他预定义角色来获取这些权限。

支持的资源

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

将标记与防火墙规则搭配使用

如需安全地允许网络流量流向特定 Compute Engine 实例,您可以为该实例应用网络标记或安全标记。然后,您可以创建针对该标记的防火墙规则。这有助于大规模管理对实例的访问权限。

例如,假设您有一个运行 Web 服务器的计算实例,并且您创建了一个新的 Web 应用,该应用需要通过标准 HTTP 端口 (80) 向公众开放。您可以使用网络标记或安全标记来实现防火墙规则,该规则仅向运行Web 服务器的计算实例授予 HTTP 访问权限。

如需了解如何创建可在防火墙政策中使用的标记,请参阅以下内容:

  • 如需将网络标记与 VPC 防火墙规则搭配使用,请参阅添加网络标记
  • 如需将安全标记与分层防火墙政策、全球和区域级网络防火墙政策搭配使用,或与使用 VPC 网络对等互连连接的来源搭配使用,请参阅创建和管理安全标记

如需了解是使用服务账号还是网络标记来定义网络入站规则的目标和来源,请参阅按服务账号过滤与按网络标记过滤

从资源分离标记

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

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

控制台

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

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

    转到虚拟机实例

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

  3. 名称列中,点击要移除标记的实例的名称。

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

    1. 点击修改
    2. 对于资源管理器标记,请在基本信息部分中点击管理标记。移除实例的相应标记。 您只能移除直接添加到实例的标记。
    3. 对于网络标记,请在网络部分中,从网络标记列表中移除相应标记。
    4. 点击保存

gcloud

如需从计算实例中分离标记,请使用 resource-manager tags bindings delete 命令

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

替换以下内容:

  • LOCATION_NAME:目标资源所在的可用区,例如 us-central1-a
  • TAGVALUE_ID:标记键的数字 ID
  • PROJECT_NUMBER:包含目标资源的项目的数字 ID
  • ZONE:可用区名称,例如 us-central1-a
  • INSTANCE_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

后续步骤