遮盖列数据

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

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

  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. Verify 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. Verify 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。
  9. Enable the BigQuery API.

    Enable the API

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

    您必须为需要创建分类的用户或服务账号授予 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 Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色拥有 bigquery.dataPolicies.createbigquery.dataPolicies.setIamPolicy 权限。Data Catalog Admin 和 Data Catalog Viewer 角色具有 datacatalog.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 Data Policy Admin、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 Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色均拥有这项权限。

    控制台

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

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

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

    API

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

    通过将数据政策应用于列来遮盖数据

    除了创建政策标记之外,您还可以创建数据政策并将其直接应用于列。

    使用数据政策

    您可以使用 BigQuery Data Policy API 创建、更新和删除数据政策。如需直接对列应用数据政策,您无法使用 Google Cloud 控制台中的政策标记分类页面。

    如需使用数据政策,请使用 v2.projects.locations.datapolicies 资源。

    创建数据政策

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

    BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色均拥有 bigquery.dataPolicies.create 权限。Data Catalog Admin 和 Data Catalog Viewer 角色具有 datacatalog.taxonomies.get 权限。

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

    如果您使用自定义遮盖,请向用户授予 BigQuery Data Owner 角色,以确保他们拥有对例程和数据政策的必要权限。

    如需创建数据政策,请调用 create 方法。传入满足以下要求的 DataPolicy 资源:

    • dataPolicyType 字段设置为 DATA_MASKING_POLICYRAW_DATA_ACCESS_POLICY
    • dataMaskingPolicy 字段标识要使用的遮盖数据规则或例程。
    • dataPolicyId 字段提供数据政策的名称,该名称在数据政策所在的项目中是唯一的。

    更新数据政策

    更新数据政策的用户或服务账号必须具有 bigquery.dataPolicies.update 权限。

    BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色均拥有 bigquery.dataPolicies.update 权限。

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

    您还可以向数据政策授予精细的访问权限控制访问权限。

    授予精细的访问权限控制权限以访问数据政策和管理数据政策的权限是不同的。如需控制细化访问权限控制权限,您必须更新数据政策的 grantees 字段。如需控制对数据政策的访问权限,请使用 setIamPolicy 方法设置 IAM 角色。

    如需为数据政策设置被授予者,请使用 v2 patch 方法。如需管理数据政策权限,请使用 v1 setIamPolicy 方法。

    如需授予对数据政策的精细访问权限控制访问权限,请调用 patch 方法,并通过更新后的 grantees 字段传入 DataPolicy 资源。

    删除数据政策

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

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

    直接为列分配数据政策

    您可以直接在列上分配数据政策,而无需使用政策标记。

    准备工作

    如需获得直接在列上分配数据政策所需的权限,请让您的管理员为您授予表的 BigQuery Data Policy Admin (roles/bigquerydatapolicy.admin) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    此预定义角色包含直接在列上分配数据政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:

    所需权限

    如需直接在列上分配数据政策,您需要具备以下权限:

    • bigquery.tables.update
    • bigquery.tables.setColumnDataPolicy
    • bigquery.dataPolicies.get

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

    分配数据政策

    如需直接在列上分配数据政策,请执行以下操作之一:

    SQL

    如需将数据政策附加到列,请使用 CREATE TABLEALTER TABLE ADD COLUMNALTER COLUMN SET OPTIONS DDL 语句。

    以下示例使用 CREATE TABLE 语句并为列设置数据政策:

        CREATE TABLE myproject.table1 (
        name INT64 OPTIONS (data_policies=["{'name':'myproject.region-us.data_policy_name1'}",
                                          "{'name':'myproject.region-us.data_policy_name2'}"])
        );

    以下示例使用 ALTER COLUMN SET OPTIONS 向表的现有列添加数据政策:

    ALTER TABLE myproject.table1
    ALTER COLUMN column_name SET OPTIONS (
      data_policies += ["{'name':'myproject.region-us.data_policy_name1'}",
                        "{'name':'myproject.region-us.data_policy_name2'}"]);

    API

    如需为列分配数据政策,请对表调用 patch 方法,并使用适用的数据政策更新表架构。

    限制

    直接在列上分配数据政策会受到以下限制:

    • 您必须使用 v2.projects.locations.datapolicies 资源。
    • 您不能同时将政策标记和数据政策应用于同一列。
    • 您最多可以为一列附加 8 个数据政策。
    • 一个表最多可以通过其列引用 1,000 个唯一的数据政策。
    • 您不能同时将政策标记和数据政策应用于同一列。
    • 一个查询最多可以引用 2,000 个数据政策。
    • 只有在没有表列引用数据政策时,才能删除该数据政策。
    • 如果用户仅具有 maskedAccess 角色,则 tabledata.list API 调用会失败。
    • 如果用户没有原始数据访问权限,则对受列数据政策保护的表执行的表复制操作会失败。
    • 跨区域表复制操作不支持受列数据政策保护的表。
    • BigQuery Omni 区域不支持列数据政策。
    • 如果目标表具有列数据政策,则旧版 SQL 会失败。
    • 加载作业不支持包含列数据政策的用户指定架构。
    • 如果您覆盖目标表,系统会从该表中移除任何现有政策标记,除非您使用 --destination_schema 标志指定具有列数据政策的架构。
    • 默认情况下,数据遮盖不支持分区列或聚簇列。这是数据遮盖的一般限制,并非特定于列数据政策。对分区列或聚簇列进行数据遮盖可能会大幅增加查询费用。