为表、视图和数据集添加标记

本文档介绍了如何使用标记有条件地将 Identity and Access Management (IAM) 政策应用于 BigQuery 表、视图和数据集。

标记是一种键值对,您可以将标记直接附加到表、视图或数据集,也可以让表、视图或数据集从其他 Google Cloud 资源继承标记。您可以根据资源是否具有特定标记来有条件地应用政策。例如,您可以有条件地向主账号授予带有 environment:dev 标记的任何数据集的 BigQuery Data Viewer 角色。

如需详细了解如何在 Google Cloud 资源层次结构中使用标记,请参阅标记概览

如需同时向多个相关 BigQuery 资源(包括尚不存在的资源)授予权限,请考虑使用 IAM Conditions

准备工作

您需要授予 IAM 角色,以便为用户提供执行本文档中每项任务所需的权限。您还需要创建要附加到资源的标记键和标记值。

所需权限

如需在 BigQuery 中使用标记,您需要具有以下权限:

  • 如需将标记附加到表或视图,您需要拥有该表或视图的 bigquery.tables.createTagBinding IAM 权限以及要附加的标记值的项目级 resourcemanager.tagValueBindings.create 权限。
  • 如需将标记附加到数据集,您需要拥有该数据集的 bigquery.datasets.createTagBinding IAM 权限以及要附加的标记值的项目级 resourcemanager.tagValueBindings.create 权限。
  • 如需从表或视图中移除标记,您需要拥有相应表或视图的 bigquery.tables.deleteTagBinding IAM 权限以及要删除的标记值的项目级 resourcemanager.tagValueBindings.delete 权限。
  • 如需从数据集中移除标记,您需要拥有该数据集的 bigquery.datasets.deleteTagBinding IAM 权限以及要删除的标记值的项目级 resourcemanager.tagValueBindings.delete 权限。
  • 如需在表、视图或数据集的修改详细信息面板中列出与父级组织或项目关联的标记键,您需要拥有该标记键父级的 resourcemanager.tagKeys.list 权限以及每个标记键的 resourcemanager.tagKeys.get 权限。
  • 如需在表、视图或数据集的修改详细信息面板中列出与父级组织或项目关联的键的标记值,您需要拥有该标记值父级的 resourcemanager.tagValues.list 权限以及每个标记值的 resourcemanager.tagValues.get 权限。

如果您将标记与 Cloud Resource Manager API 或 gcloud 结合使用,则还需要以下权限:

  • 如需使用 Cloud Resource Manager API 或 gcloud CLI 列出附加到表或视图的标记,您需要拥有 bigquery.tables.listTagBindings IAM 权限。
  • 如需列出表或视图的有效标记,您需要拥有 bigquery.tables.listEffectiveTags IAM 权限。
  • 如需使用 Cloud Resource Manager API 或 gcloud CLI 列出附加到数据集的标记,您需要拥有 bigquery.datasets.listTagBindings IAM 权限。
  • 如需列出数据集的有效标记,您需要拥有 bigquery.datasets.listEffectiveTags IAM 权限。

以下两个预定义的 IAM 角色均具有所有必要的 BigQuery 权限:

  • BigQuery Data Owner (roles/bigquery.dataOwner)
  • BigQuery Admin (roles/bigquery.admin)

Resource Manager 权限包含在 Tag User 角色 (roles/resourcemanager.tagUser) 中。

您还可以使用标记,通过 IAM 政策有条件地拒绝对 BigQuery 表、视图和数据集的访问预览版)。如需了解详情,请参阅拒绝政策

创建标记键和标记值

在附加标记之前,您需要创建标记并配置其值。如需创建标记键和标记值,请参阅创建标记添加标记值

标记表

以下部分介绍了如何将标记附加到新表和现有表、列出附加到表的标记,以及从表中分离标记。

在创建新表时附加标记

创建标记后,您可以将其附加到新表。对于任何给定的标记键,您只能将一个标记值附加到表。您最多可以为一个表附加 50 个标记。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,展开您的项目,然后选择数据集。

  3. 数据集信息部分中,点击 创建表

  4. 输入新表的信息。如需了解详情,请参阅创建和使用表

  5. 标记部分中,选择要添加到新表的标记。

  6. 点击创建表

bq

使用带有 --add_tags 标志的 bq mk --table 命令

bq mk --table \
    --schema=SCHEMA \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

替换以下内容:

  • SCHEMA内嵌架构定义
  • TAG:要附加到新表的标记。多个标记之间以英文逗号分隔。例如 556741164180/env:prod,myProject/department:sales。每个标记必须具有命名空间键名称和值简称
  • PROJECT_ID:要在其中创建表的项目的 ID。
  • DATASET_ID:要在其中创建表的数据集的 ID。
  • TABLE_ID:要创建的新表的 ID。

Terraform

使用 google_bigquery_table 资源。

如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证

以下示例会创建一个名为 mytable 的表,然后通过填充 resource_tags 字段将标记附加到该表:


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env3"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department3"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "MyDataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days
}

# Create a table
resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "mytable"
  description         = "table description"
  deletion_protection = false # set to "true" in production

  # Attach tags to the table
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

API

使用定义的表资源调用 tables.insert 方法。在 resource_tags 字段中添加相应标记。

将标记附加到现有表

创建标记后,您可以将其附加到现有表。对于任何给定的标记键,您只能将一个标记值附加到表。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,展开您的项目和数据集,然后选择表。

  3. 详细信息标签页中,点击 修改详细信息

  4. 标记部分中,选择要添加到表格的标记。

  5. 点击保存

bq

使用带有 --add_tags 标志的 bq update 命令

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

替换以下内容:

  • TAG:要附加到表的标记。多个标记之间以英文逗号分隔。例如 556741164180/env:prod,myProject/department:sales。每个标记必须具有命名空间键名称和值简称
  • PROJECT_ID:包含表的项目的 ID。
  • DATASET_ID:包含表的数据集的 ID。
  • TABLE_ID:您要更新的表的 ID。

gcloud

如需使用命令行将标记附加到表,请使用 gcloud resource-manager tags bindings create 命令创建标记绑定资源:

gcloud resource-manager tags bindings create \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

替换以下内容:

  • TAGVALUE_NAME:要附加的标记值的永久 ID 或命名空间名称,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:表的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/)。例如,//bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table
  • LOCATION:表的位置

Terraform

向表的 resource_tags 字段添加标记,然后使用 google_bigquery_table 资源应用更新后的配置。如需了解详情,请参阅在创建新表时附加标记中的 Terraform 示例。

API

使用定义的表资源调用 tables.update 方法。在 resource_tags 字段中添加相应标记。

列出附加到表的标记

您可以列出直接附加到表的标记。此过程不会列出从父级资源继承的标记。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,展开您的项目和数据集,然后选择表。

    这些标记会显示在详细信息标签页中。

bq

使用 bq show 命令,然后查找 tags 列。如果表中没有标记,则不会显示 tags 列。

bq show \
    PROJECT_ID:DATASET_ID.TABLE_ID

替换以下内容:

  • PROJECT_ID:包含表的项目的 ID。
  • DATASET_ID:包含表的数据集的 ID。
  • TABLE_ID:表的 ID。

gcloud

如需获取附加到资源的标记绑定的列表,请使用 gcloud resource-manager tags bindings list 命令

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

替换以下内容:

  • RESOURCE_ID:表的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/)。例如 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table

  • LOCATION:您的数据集所在的位置

输出类似于以下内容:

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

使用 terraform state show 命令列出表的属性,包括 resource_tags 字段。在运行表的 Terraform 配置文件的目录中运行此命令。

terraform state show google_bigquery_table.default

API

使用定义的表资源调用 tables.get 方法,并查找 resource_tags 字段。

视图

使用 INFORMATION_SCHEMA.TABLE_OPTIONS 视图

例如,以下查询会显示附加到数据集中所有表的所有标记。此查询会返回一个表,其中的列包括 schema_name(数据集名称)、option_name(始终为 'tags')、object_type(始终为 ARRAY<STRUCT<STRING, STRING>>)和 option_value,该表包含 STRUCT 对象数组,表示与每个数据集关联的标记。对于未分配标记的表,option_value 列会返回一个空数组。

SELECT * from DATASET_ID.INFORMATION_SCHEMA.TABLE_OPTIONS
WHERE option_name='tags'

DATASET_ID 替换为包含表的数据集的 ID。

从表中分离标记

您可以通过删除标记绑定,从表中移除标记关联。如果您需要删除标记,应先分离该标记。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,展开您的项目和数据集,然后选择表。

  3. 详细信息标签页中,点击 修改详细信息

  4. 标记部分中,移除要从表中分离的标记。

  5. 点击保存

bq

如需从表中移除某些标记,请将 bq update 命令--remove_tags 标志结合使用:

bq update \
    --remove_tags=TAG_KEYS \
    PROJECT_ID:DATASET_ID.TABLE_ID

替换以下内容:

  • TAG_KEYS:要从表中分离的标记键,以英文逗号分隔。例如 556741164180/env,myProject/department。每个标记键都必须具有命名空间键名称
  • PROJECT_ID:包含表的项目的 ID。
  • DATASET_ID:包含表的数据集的 ID。
  • TABLE_ID:您要更新的表的 ID。

如需从表中移除所有标记,请将 bq update 命令--clear_all_tags 标志结合使用:

bq update \
    --clear_all_tags \
    PROJECT_ID:DATASET_ID.TABLE_ID

gcloud

如需使用命令行从表中移除标记关联,请使用 gcloud resource-manager tags bindings delete 命令删除标记绑定:

gcloud resource-manager tags bindings delete \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

替换以下内容:

  • TAGVALUE_NAME:要删除的标记值的永久 ID 或命名空间名称,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:表的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/)。例如 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table
  • LOCATION:您的数据集所在的位置

Terraform

从表的 resource_tags 字段中移除标记,然后使用 google_bigquery_table 资源应用更新后的配置。

API

使用定义的表资源调用 tables.update 方法,并移除 resource_tags 字段中的标记。如需移除所有标记,请移除 resource_tags 字段。

标记数据集

以下部分介绍了如何将标记附加到新数据集和现有数据集、列出附加到数据集的标记,以及从数据集中分离标记。

在创建新数据集时附加标记

创建标记后,您可以将其附加到新的 BigQuery 数据集。对于任何给定的标记键,您只能将一个标记值附加到数据集。您最多可以为一个数据集附加 50 个标记。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,选择您要在其中创建数据集的项目。

  3. 依次点击 查看操作 > 创建数据集

  4. 标记菜单中,点击选择范围

  5. 选择标记的范围。

  6. 选择要添加到数据集中的标记并将其添加到数据集中。

  7. 点击创建数据集

bq

使用带有 --add_tags 标志的 bq mk --dataset 命令

bq mk --dataset \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

替换以下内容:

  • TAG:要附加到新数据集的标记。多个标记之间以英文逗号分隔。例如 556741164180/env:prod,myProject/department:sales。每个标记必须具有命名空间键名称和值简称
  • PROJECT_ID:您要在其中创建数据集的项目的 ID。
  • DATASET_ID:您要创建的新数据集的 ID。

Terraform

使用 google_bigquery_dataset 资源。

如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证

以下示例会创建一个名为 my_dataset 的数据集,然后通过填充 resource_tags 字段将标记附加到该数据集:


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env2"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department2"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "my_dataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  # Attach tags to the dataset
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

API

调用 datasets.insert 方法,并将标记添加到 resource_tags 字段。

将标记附加到现有数据集

创建标记后,您可以将其附加到现有数据集。对于任何给定的标记键,您只能将一个标记值附加到数据集。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 浏览器窗格中,展开您的项目,然后选择数据集。

  3. 数据集信息部分中,点击 修改详细信息

  4. 标记部分中,选择要添加到数据集中的标记。

  5. 点击保存

bq

使用带有 --add_tags 标志的 bq update 命令

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

替换以下内容:

  • TAG:要附加到数据集的标记。多个标记之间以英文逗号分隔。例如 556741164180/env:prod,myProject/department:sales。每个标记必须具有命名空间键名称和值简称
  • PROJECT_ID:现有数据集所在项目的 ID。
  • DATASET_ID:现有数据集的 ID。

gcloud

如需使用命令行将标记附加到数据集,请使用 gcloud resource-manager tags bindings create 命令创建标记绑定资源:

gcloud resource-manager tags bindings create \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

替换以下内容:

  • TAGVALUE_NAME:要附加的标记值的永久 ID 或命名空间名称,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:数据集的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/),例如 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
  • LOCATION:您的数据集所在的位置

Terraform

向数据集的 resource_tags 字段添加标记,然后使用 google_bigquery_dataset 资源应用更新后的配置。如需了解详情,请参阅在创建新数据集时附加标记中的 Terraform 示例。

API

调用 datasets.get 方法以获取数据集资源,包括 resource_tags 字段。将标记添加到 resource_tags 字段,然后使用 datasets.update 方法传递回更新后的数据集资源。

列出附加到数据集的标记

通过执行以下步骤,您可以获得直接附加到数据集的标记绑定的列表;执行这些步骤不会返回从父级资源继承的任何标记。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 浏览器窗格中,展开您的项目,然后选择数据集。

    标记会显示在数据集信息部分中。

bq

如需列出附加到数据集的标记,请使用 bq show 命令

bq show PROJECT_ID:DATASET_ID

替换以下内容:

  • PROJECT_ID:包含数据集的项目的 ID。
  • DATASET_ID:要为其列出标记的数据集的 ID。

gcloud

如需获取附加到资源的标记绑定的列表,请使用 gcloud resource-manager tags bindings list 命令

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

替换以下内容:

  • RESOURCE_ID:数据集的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/),例如 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset

  • LOCATION:您的数据集所在的位置

输出类似于以下内容:

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

使用 terraform state show 命令列出数据集的属性,包括 resource_tags 字段。在运行数据集的 Terraform 配置文件的目录中运行此命令。

terraform state show google_bigquery_dataset.default

API

调用 datasets.get 方法以获取数据集资源。数据集资源包含 resource_tags 字段中附加到数据集的标记。

视图

使用 INFORMATION_SCHEMA.SCHEMATA_OPTIONS 视图

例如,以下查询会显示附加到某个区域中所有数据集的所有标记。此查询会返回一个表,其中的列包括 schema_name(数据集名称)、option_name(始终为 'tags')、object_type(始终为 ARRAY<STRUCT<STRING, STRING>>)和 option_value,该表包含 STRUCT 对象数组,表示与每个数据集关联的标记。对于未分配标记的数据集,option_value 列会返回一个空数组。

SELECT * from region-REGION.INFORMATION_SCHEMA.SCHEMATA_OPTIONS
WHERE option_name='tags'

替换以下内容:

  • REGION:您的数据集所在的区域

从数据集分离标记

您可以通过删除标记绑定资源,从资源分离标记。 如果您需要删除标记,您应首先分离该标记。

控制台

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 浏览器窗格中,展开您的项目,然后选择数据集。

  3. 数据集信息部分中,点击 修改详细信息

  4. 标记部分中,点击要删除的标记旁边的 删除项

  5. 点击保存

bq

使用带有 --remove_tags 标志的 bq update 命令

bq update \
    --remove_tags=REMOVED_TAG \
    PROJECT_ID:DATASET_ID

替换以下内容:

  • REMOVED_TAG:您要从数据集中移除的标记。多个标记之间以英文逗号分隔。仅接受不含值对的键。例如 556741164180/env,myProject/department。 每个标记都必须具有命名空间键名称
  • PROJECT_ID:包含数据集的项目的 ID。
  • DATASET_ID:要从中分离标记的数据集的 ID。

或者,如果您想从数据集中移除所有标记,请将 bq update 命令--clear_all_tags 标志结合使用:

bq update \
    --clear_all_tags
    PROJECT_ID:DATASET_ID

gcloud

如需使用命令行从数据集中分离标记,请使用 gcloud resource-manager tags bindings delete 命令删除标记绑定:

gcloud resource-manager tags bindings delete \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

替换以下内容:

  • TAGVALUE_NAME:要分离的标记值的永久 ID 或命名空间名称,例如 tagValues/45678901231234567/my_tag_key/my_tag_value
  • RESOURCE_ID:数据集的完整 ID,包括用于标识资源类型的 API 域名 (//bigquery.googleapis.com/),例如 //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
  • LOCATION:您的数据集所在的位置

Terraform

从数据集的 resource_tags 字段中移除标记,然后使用 google_bigquery_dataset 资源应用更新后的配置。

API

调用 datasets.get 方法以获取数据集资源,包括 resource_tags 字段。从 resource_tags 字段中移除标记,然后使用 datasets.update 方法传递回更新后的数据集资源。

为其他类似表格的资源添加标记

您还可以以类似的方式为 BigQuery 视图、具体化视图、克隆和快照添加标记。

删除标记

如果某个标记被表、视图或数据集引用,则无法删除该标记。您应该先解除所有现有标记绑定资源,然后再删除标记键或标记值本身。如需删除标记键和标记值,请参阅删除标记

示例

假设您是组织的管理员。 您的数据分析师都是群组 analysts@example.com 的成员,他们具有项目 userData 的 BigQuery Data Viewer IAM 角色。您的公司聘请了一些实习数据分析师,根据公司政策,他们只应有权查看 userData 项目中的 anonymousData 数据集。您可以使用标记来控制他们的访问权限。

  1. 使用键 employee_type 和值 intern 创建标记

    创建标记键和标记值的示例。

  2. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM

  3. 找到要限制其数据集访问权限的实习生所在的行,然后点击该行中的 修改主账号

  4. 角色菜单中,选择 BigQuery Data Viewer

  5. 点击添加条件

  6. 标题说明字段中,输入用于描述要创建的 IAM 标记条件的值。

  7. 条件构建器标签页上,点击添加

  8. 条件类型菜单中,选择资源,然后选择标记

  9. 运算符菜单中,选择包含值

  10. 值路径字段中,输入 ORGANIZATION/TAG_KEY/TAG_VALUE 格式的标记值路径,例如 example.org/employee_type/intern

    使用标记的 IAM 条件示例。

    此 IAM 标记条件会限制实习生对具有 intern 标记的数据集的访问权限。

  11. 如需保存标记条件,请点击保存

  12. 如需保存您在修改权限窗格中所做的任何更改,请点击保存

  13. 如需将 intern 标记值附加到 anonymousData 数据集,请使用命令行运行 gcloud resource-manager tags bindings create 命令:

    gcloud resource-manager tags bindings create \
    --tag-value=tagValues/4567890123 \
    --parent=//bigquery.googleapis.com/projects/userData/datasets/anonymousData \
    --location=US
    

限制

  • BigQuery Omni 表、隐藏数据集中的表或临时表不支持表标记。此外,在对其他区域中的表进行访问权限控制检查期间,BigQuery Omni 中的跨区域查询不会使用标记。

  • 您最多可以为一个表或数据集附加 50 个标记。

  • 通配符查询中引用的所有表都必须具有完全相同的标记键和标记值集。

  • 拥有对数据集或表的有条件访问权限的用户无法通过 Google Cloud 控制台修改对该资源的权限。仅支持通过 bq 工具和 BigQuery API 修改权限。

  • BigQuery 之外的某些服务无法正确验证 IAM 标记条件。如果标记条件为正(表示仅当资源具有特定标记时,用户才会在该资源上获得角色),则无论附加哪些标记,系统都会拒绝对该资源的访问。如果标记条件为负条件(表示仅当资源没有特定标记时,用户才会获得该资源的角色),则系统不会检查标记条件。

    例如,Data Catalog 无法验证 BigQuery 数据集和表的 IAM 标记条件。假设有一项条件 IAM 政策,为实习生提供具有 employee_type=intern 标记的数据集的 BigQuery Data Viewer 角色。由于这是正标记条件,因此实习生无法在 Data Catalog 中通过搜索来查看数据集,即使这些数据集确实具有 employee_type=intern 标记也是如此。如果标记条件更改为负条件,以便实习生只能查看没有 employee_type=intern 标记的数据集,则系统会完全跳过检查,并且实习生可以查看其在 BigQuery 中通常无法访问的数据集。

后续步骤