跨多个位置管理政策标记

本文档介绍了如何跨区域位置管理政策标记,以便在 BigQuery 中实现列级安全性和动态数据遮盖。

BigQuery 通过政策标记为敏感表列提供精细访问权限控制动态数据遮盖,支持基于类型的数据分类。

创建“数据分类”分类并将政策标记应用于数据后,您可以进一步跨多个位置管理政策标记。

位置注意事项

与 BigQuery 数据集和表一样,分类是区域级资源。创建分类时,您可以为分类指定区域或位置

您可以创建分类并将政策标记应用于提供 BigQuery 的所有区域中的表。但是,如需将分类中的政策标记应用于表列,分类和表必须位于同一区域位置。

虽然您无法将政策标记应用于位于不同位置的表列,但您可以通过明确在其他位置复制分类将其复制到该位置。

跨多个位置使用分类

您可以明确将分类及其政策标记定义复制到其他位置,而不必在每个位置都手动创建新分类。复制分类时,您可以在多个位置对列级别安全性使用相同的政策标记,从而简化管理操作。

复制分类时,分类和政策标记在每个位置都保留相同的 ID。

您可以再次同步分类和政策标记,以使其在多个位置保持一致。通过调用 Data Catalog API 可以显式复制分类。已复制分类未来的同步使用相同的 API 命令,该命令会覆盖之前的分类。

为了方便分类同步,您可以使用 Cloud Scheduler 定期跨区域同步分类,您既可以根据设置的时间表也可以手动按下按钮进行同步。如需使用 Cloud Scheduler,您需要设置服务账号。

在新位置复制分类

所需权限

复制分类的用户凭据或服务账号必须具有 Data Catalog Policy Tags Admin 角色。

如需详细了解如何授予 Policy Tags Admin 角色,请参阅使用 BigQuery 列级安全性限制访问权限

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

要跨多个位置复制分类,请执行以下操作:

API

调用 Data Catalog API 的 projects.locations.taxonomies.import 方法,发出 POST 请求并在 HTTP 字符串中提供目标项目的名称和位置。

POST https://datacatalog.googleapis.com/{parent}/taxonomies:import

parent 路径参数是您要在其中复制分类的目标项目和位置。例如:projects/MyProject/locations/eu

同步已复制的分类

要同步已跨多个位置复制的分类,请按照在新位置复制分类中所述的说明来重复进行 Data Catalog API 调用。

您也可以使用服务账号和 Cloud Scheduler 按指定的时间表来同步分类。在 Cloud Scheduler 中设置服务账号还可让您通过 Google Cloud 控制台中的 Cloud Scheduler 页面或使用 Google Cloud CLI 触发按需(临时)同步。

将已复制的分类与 Cloud Scheduler 同步

如需使用 Cloud Scheduler 跨多个位置同步已复制的分类,您需要一个服务账号。

服务账号

您可以为现有服务账号授予复制同步的权限,也可以创建新的服务账号。

如需创建新的服务账号,请参阅创建服务账号

所需权限

  1. 同步分类的服务账号必须具有 Data Catalog Policy Tags Admin 角色。如需了解详情,请参阅授予 Policy Tags Admin 角色

  2. 启用 Cloud Scheduler API

设置一个分类与 Cloud Scheduler 同步

要使用 Cloud Scheduler 跨多个位置同步已复制的分类,请执行以下操作:

控制台

首先,创建同步作业及其时间表。

  1. 按照说明在 Cloud Scheduler 中创建作业

  2. 对于频率,填写希望在两次自动同步之间的时间间隔。

  3. 对于目标,请参阅创建具有身份验证的调度器作业中的说明。

    创建调度器作业第 2 部分

接下来,添加计划的同步所需的身份验证。

  1. 点击展开以显示身份验证字段。

  2. 对于身份验证标头,选择“添加 OAuth 令牌”。

  3. 添加您的服务账号的信息。

  4. 对于范围,请输入 https://www.googleapis.com/auth/cloud-platform。

  5. 点击创建以保存计划的同步。

    创建调度器作业第 2 部分

现在,测试作业是否正确配置。

  1. 创建作业后,点击立即运行以测试作业是否正确配置。随后,Cloud Scheduler 会根据您指定的时间表触发 HTTP 请求。

    测试调度器作业

gcloud

语法:

  gcloud scheduler jobs create http "JOB_ID" --schedule="FREQUENCY" --uri="URI" --oath-service-account-email="CLIENT_SERVICE_ACCOUNT_EMAIL" --time-zone="TIME_ZONE" --message-body-from-file="MESSAGE_BODY"
  

替换以下内容:

  1. ${JOB_ID} 是作业的名称。此名称在项目中必须唯一。 请注意,即使删除项目关联的作业后,您也不可在其中重新使用作业名称。
  2. ${FREQUENCY} 是时间表(也称为作业间隔),是指作业应运行的频率。例如,“每 3 小时”。您在此处提供的字符串可以是任何与 Crontab 兼容的字符串。熟悉旧版 App Engine cron 的开发者也可以使用 App Engine cron 语法。
  3. ${URI} 是端点的完全限定网址。
  4. --oauth-service-account-email 定义令牌类型。请注意,*.googleapis.com 上托管的 Google API 需要使用 OAuth 令牌。
  5. ${CLIENT_SERVICE_ACCOUNT_EMAIL} 是客户端服务账号的电子邮件地址。
  6. ${MESSAGE_BODY} 是包含 POST 请求正文的文件的路径。

此外还有其他一些选项参数可供您利用,相关介绍请参见 Google Cloud CLI 命令行参考

示例:

  gcloud scheduler jobs create http cross_regional_copy_to_eu_scheduler --schedule="0 0 1 * *" --uri="https://datacatalog.googleapis.com/v1/projects/my-project/locations/eu/taxonomies:import" --oauth-service-account-email="policytag-manager-service-acou@my-project.iam.gserviceaccount.com" --time-zone="America/Los_Angeles" --message-body-from-file=request_body.json
  

后续步骤