遮盖列数据

本文档介绍如何实现数据遮盖,以便有选择地遮盖敏感数据。通过实现数据遮盖,您可以为不同的用户组提供不同级别的可见性。如需了解一般信息,请参阅数据遮盖简介

您可以通过向列添加数据政策来实现数据遮盖。要向列添加数据遮盖政策,您必须完成以下步骤:

  1. 创建至少包含一个政策标记的分类。
  2. 可选:向您创建的一个或多个政策标记上的一个或多个主账号授予 Data Catalog Fine-Grained Reader 角色。
  3. 为政策标记创建最多三个数据政策,以将遮盖规则和(表示用户或组的)主账号映射到该标记。
  4. 为列设置政策标记。这会将与政策标记关联的数据政策映射到选定的列。
  5. 将有权访问遮盖数据的用户分配给 BigQuery Masked Reader 角色。 最佳实践是在数据政策级层分配 BigQuery Masked Reader 角色。如果在项目级层或更高级层分配该角色,则用户将获得项目下所有数据政策的权限,这可能会导致权限多余而造成的问题。

您可以使用 Google Cloud 控制台或 BigQuery Data Policy API 来处理数据政策。

完成这些步骤后,根据列运行查询的用户会收到未遮盖的数据、遮盖的数据或访问遭拒错误,具体取决于他们所属的群组以及授予的角色。如需了解详情,请参阅 Masked Reader 和 Fine-Grained Reader 角色如何交互

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Data Catalog and BigQuery Data Policy APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Data Catalog and BigQuery Data Policy APIs.

    Enable the APIs

  8. 新项目中会自动启用 BigQuery;但对于已存在的项目,您可能需要手动激活 BigQuery。

    Enable the BigQuery API.

    Enable the API

  9. 如果您要创建引用自定义遮盖例程的数据政策,请创建关联的遮盖 UDF,以便可在以下步骤中使用。

创建分类

您必须为需要创建分类的用户或服务账号授予 Data Catalog Policy Tag Admin 角色。

控制台

  1. 在 Google Cloud 控制台中打开政策标记分类页面。

    打开“政策标记分类”页面

  2. 点击创建分类
  3. 新建分类页面上,执行以下操作:

    1. 对于分类名称,输入您要创建的分类的名称。
    2. 对于说明,输入一项说明。
    3. 视需要更改项目下列出的项目。
    4. 视需要更改位置下列出的位置。
    5. 政策标记下,输入政策标记名称和说明。
    6. 如需为政策标记添加子政策标记,请点击添加子标记
    7. 如需添加另一个与政策标记级别相同的新政策标记,请点击 + 添加政策标记
    8. 根据需要继续为您的分类添加政策标记和子政策标记。
    9. 为层次结构创建了政策标记后,点击创建

API

如需使用现有分类,请调用 taxonomies.import,而无需执行以下过程中的前两个步骤。

  1. 调用 taxonomies.create 以创建分类。
  2. 调用 taxonomies.policytag.create 以创建政策标记。

使用政策标记

如需详细了解如何使用政策标记(例如如何查看或更新政策标记),请参阅使用政策标记。如需了解最佳实践,请参阅在 BigQuery 中使用政策标记的最佳实践

创建数据政策

创建数据政策的用户或服务账号必须具有 bigquery.dataPolicies.createbigquery.dataPolicies.setIamPolicydatacatalog.taxonomies.get 权限。

如果您要创建引用自定义遮盖例程的数据政策,还需要例程权限

BigQuery Admin 和 BigQuery Data Owner 角色均拥有这些权限。

您最多可以为一个政策标记创建 9 个数据政策。其中一个政策预留用于列级访问权限控制设置

控制台

  1. 在 Google Cloud 控制台中打开政策标记分类页面。

    打开“政策标记分类”页面

  2. 点击要打开的分类的名称。
  3. 选择一个政策标记。
  4. 点击管理数据政策
  5. 数据政策名称部分,输入数据政策的名称。数据政策名称在数据政策所在的项目中必须是唯一的。
  6. 遮盖规则部分,选择一个预定义的遮盖规则或自定义遮盖例程。如果您要选择自定义屏蔽例程,请确保您在项目级别拥有 bigquery.routines.getbigquery.routines.list 权限。
  7. 主账号部分,输入要授予其对该列的遮盖访问权限的一个或多个用户或群组的名称。请注意,您在此处输入的所有用户和群组均会被授予 BigQuery Masked Reader 角色。
  8. 点击提交

API

  1. 调用 create 方法。传入满足以下要求的 DataPolicy 资源:

    • dataPolicyType 字段设置为 DATA_MASKING_POLICY
    • dataMaskingPolicy 字段标识要使用的遮盖数据规则或例程。
    • dataPolicyId 字段提供数据政策的名称,该名称在数据政策所在的项目中是唯一的。
  2. 调用 setIamPolicy 方法并传入 PolicyPolicy 必须标识被授予遮盖数据访问权限的主账号,并为 role 字段指定 roles/bigquerydatapolicy.maskedReader

为列设置政策标记

通过将与数据政策关联的政策标记附加到列,对列设置数据政策。

设置政策标记的用户或服务账号需要具有 datacatalog.taxonomies.getbigquery.tables.setCategory 权限。Data Catalog Policy Tags Admin 和 Project Viewer 角色均包含 datacatalog.taxonomies.get。BigQuery Admin (roles/bigquery.admin) 和 BigQuery Data Owner (roles/bigquery.dataOwner) 角色均包含 bigquery.tables.setCategory

如需在 Google Cloud 控制台中查看组织中所有项目的分类和政策标记,用户需要 resourcemanager.organizations.get 权限,该权限包含在 Organization Viewer 角色中。

控制台

使用 Google Cloud 控制台修改架构,以便设置政策标记。

  1. 在 Google Cloud 控制台中打开 BigQuery 页面。

    转到 BigQuery 页面

  2. 在 BigQuery Explorer 中,找到并选择要更新的表。系统会打开该表的表架构。

  3. 点击修改架构

  4. 当前架构屏幕中,选择目标列,然后点击添加政策标记

  5. 添加政策标记屏幕中,找到并选择要应用于该列的政策标记。

  6. 点击选择。屏幕应类似于如下所示:

    修改架构。

  7. 点击保存

bq

  1. 将架构写入本地文件。

    bq show --schema --format=prettyjson \
       project-id:dataset.table > schema.json

    其中:

    • project-id 是您的项目 ID。
    • dataset 是要更新的表所属的数据集的名称。
    • table 是要更新的表的名称。
  2. 修改 schema.json 以便为列设置政策标记。对于 policyTagsnames 字段的值,请使用政策标记资源名称

    [
     ...
     {
       "name": "ssn",
       "type": "STRING",
       "mode": "REQUIRED",
       "policyTags": {
         "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"]
       }
     },
     ...
    ]
  3. 更新架构。

    bq update \
       project-id:dataset.table schema.json

API

对于现有表,请调用 tables.patch;对于新表,则调用 tables.insert。使用您传入的 Table 对象的 schema 属性在架构定义中设置政策标记。请参阅命令行示例架构,了解如何设置政策标记。

使用现有表时,首选 tables.patch 方法,因为 tables.update 方法会替换整个表资源。

执行访问权限控制

为政策标记创建数据政策时,系统会自动强制执行访问权限控制。应用了该政策标记的所有列都会返回遮盖数据,以响应具有 Masked Reader 角色的用户的查询。

如需停止强制执行访问权限控制,您必须先删除与分类中的政策标记关联的所有数据政策。如需了解详情,请参阅强制执行访问权限控制

检查数据政策的 IAM 权限

要查看您对数据政策拥有的权限,请调用 testIamPermissions 方法。

更新数据政策

更新数据政策的用户或服务账号必须具有 bigquery.dataPolicies.update 权限。 如果要更新与数据政策关联的政策标记,则还需要 datacatalog.taxonomies.get 权限。

如果要更新与数据政策关联的主账号,则需要 bigquery.dataPolicies.setIamPolicy 权限。

BigQuery Admin 和 BigQuery Data Owner 角色拥有 bigquery.dataPolicies.updatebigquery.dataPolicies.setIamPolicy 权限。Data Catalog Admin 和 Data Catalog Viewer 角色具有 datacatalog.taxonomies.get 权限。

控制台

  1. 在 Google Cloud 控制台中打开政策标记分类页面。

    打开“政策标记分类”页面

  2. 点击要打开的分类的名称。
  3. 选择一个政策标记。
  4. 点击管理数据政策
  5. (可选)更改遮盖规则。
  6. 可选:添加或移除主账号。
  7. 点击提交

API

如需更改数据遮盖规则,请调用 patch 方法并通过更新后的 dataMaskingPolicy 字段传入 DataPolicy 资源。

要更改与数据政策关联的主账号,请调用 setIamPolicy 方法并传入 Policy 以更新被授予遮盖数据访问权限的主账号。

删除数据政策

创建数据政策的用户或服务账号必须具有 bigquery.dataPolicies.delete 权限。BigQuery Admin 和 BigQuery Data Owner 角色均拥有这项权限。

控制台

  1. 在 Google Cloud 控制台中打开政策标记分类页面。

    打开“政策标记分类”页面

  2. 点击要打开的分类的名称。
  3. 选择一个政策标记。
  4. 点击管理数据政策
  5. 点击要删除的数据政策旁边的
  6. 点击提交
  7. 点击确认

API

要删除数据政策,请调用 delete 方法。