遮盖列数据
本文档介绍如何实现数据遮盖,以便有选择地遮盖敏感数据。通过实现数据遮盖,您可以为不同的用户组提供不同级别的可见性。如需了解一般信息,请参阅数据遮盖简介。
您可以通过向列添加数据政策来实现数据遮盖。要向列添加数据遮盖政策,您必须完成以下步骤:
- 创建至少包含一个政策标记的分类。
- 可选:向您创建的一个或多个政策标记上的一个或多个主账号授予 Data Catalog Fine-Grained Reader 角色。
- 为政策标记创建最多三个数据政策,以将遮盖规则和(表示用户或组的)主账号映射到该标记。
- 为列设置政策标记。这会将与政策标记关联的数据政策映射到选定的列。
- 将有权访问遮盖数据的用户分配给 BigQuery Masked Reader 角色。 最佳实践是在数据政策级层分配 BigQuery Masked Reader 角色。如果在项目级层或更高级层分配该角色,则用户将获得项目下所有数据政策的权限,这可能会导致权限多余而造成的问题。
您可以使用 Cloud de Confiance 控制台或 BigQuery Data Policy API 来处理数据政策。
完成这些步骤后,根据列运行查询的用户会收到未遮盖的数据、遮盖的数据或访问遭拒错误,具体取决于他们所属的群组以及授予的角色。如需了解详情,请参阅 Masked Reader 和 Fine-Grained Reader 角色如何交互。
或者,您也可以直接对列应用数据政策(预览版)。如需了解详情,请参阅直接对列使用数据政策遮盖数据。
使用政策标记遮盖数据
使用政策标记有选择性地遮盖敏感数据。
准备工作
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
-
Enable the Data Catalog and BigQuery Data Policy APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 新项目中会自动启用 BigQuery;但对于已存在的项目,您可能需要手动激活 BigQuery。
Enable the BigQuery API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - 如果您要创建引用自定义遮盖例程的数据政策,请创建关联的遮盖 UDF,以便可在以下步骤中使用。
- 在Cloud de Confiance 控制台中打开政策标记分类页面。
- 点击创建分类。
在新建分类页面上,执行以下操作:
- 对于分类名称,输入您要创建的分类的名称。
- 对于说明,输入一项说明。
- 视需要更改项目下列出的项目。
- 视需要更改位置下列出的位置。
- 在政策标记下,输入政策标记名称和说明。
- 如需为政策标记添加子政策标记,请点击添加子标记。
- 如需添加另一个与政策标记级别相同的新政策标记,请点击 + 添加政策标记。
- 根据需要继续为您的分类添加政策标记和子政策标记。
- 为层次结构创建了政策标记后,点击创建。
- 调用
taxonomies.create以创建分类。 - 调用
taxonomies.policytag.create以创建政策标记。 - 在Cloud de Confiance 控制台中打开政策标记分类页面。
- 点击要打开的分类的名称。
- 选择一个政策标记。
- 点击管理数据政策。
- 在数据政策名称部分,输入数据政策的名称。数据政策名称在数据政策所在的项目中必须是唯一的。
- 在遮盖规则部分,选择一个预定义的遮盖规则或自定义遮盖例程。如果您要选择自定义屏蔽例程,请确保您在项目级别拥有
bigquery.routines.get和bigquery.routines.list权限。 - 在主账号部分,输入要授予其对该列的遮盖访问权限的一个或多个用户或群组的名称。请注意,您在此处输入的所有用户和群组均会被授予 BigQuery Masked Reader 角色。
- 点击提交。
调用
create方法。传入满足以下要求的DataPolicy资源:dataPolicyType字段设置为DATA_MASKING_POLICY。dataMaskingPolicy字段标识要使用的遮盖数据规则或例程。dataPolicyId字段提供数据政策的名称,该名称在数据政策所在的项目中是唯一的。
调用
setIamPolicy方法并传入Policy。Policy必须标识被授予遮盖数据访问权限的主账号,并为role字段指定roles/bigquerydatapolicy.maskedReader。在 Cloud de Confiance 控制台中打开 BigQuery 页面。
在 BigQuery Explorer 中,找到并选择要更新的表。系统会打开该表的表架构。
点击修改架构。
在当前架构屏幕中,选择目标列,然后点击添加政策标记。
在添加政策标记屏幕中,找到并选择要应用于该列的政策标记。
点击选择。屏幕应类似于如下所示:
点击保存。
将架构写入本地文件。
bq show --schema --format=prettyjson \ project-id:dataset.table > schema.json
其中:
- project-id 是您的项目 ID。
- dataset 是要更新的表所属的数据集的名称。
- table 是要更新的表的名称。
修改 schema.json 以便为列设置政策标记。对于
policyTags的names字段的值,请使用政策标记资源名称。[ ... { "name": "ssn", "type": "STRING", "mode": "REQUIRED", "policyTags": { "names": ["projects/project-id/locations/location/taxonomies/taxonomy-id/policyTags/policytag-id"] } }, ... ]
更新架构。
bq update \ project-id:dataset.table schema.json
- 在Cloud de Confiance 控制台中打开政策标记分类页面。
- 点击要打开的分类的名称。
- 选择一个政策标记。
- 点击管理数据政策。
- (可选)更改遮盖规则。
- 可选:添加或移除主账号。
- 点击提交。
- 在Cloud de Confiance 控制台中打开政策标记分类页面。
- 点击要打开的分类的名称。
- 选择一个政策标记。
- 点击管理数据政策。
- 点击要删除的数据政策旁边的 。
- 点击提交。
- 点击确认。
dataPolicyType字段设置为DATA_MASKING_POLICY或RAW_DATA_ACCESS_POLICY。dataMaskingPolicy字段标识要使用的遮盖数据规则或例程。dataPolicyId字段提供数据政策的名称,该名称在数据政策所在的项目中是唯一的。data_policy_type字段设置为DATA_MASKING_POLICY或RAW_DATA_ACCESS_POLICY。 创建数据政策后,您便无法更新此字段。masking_expression字段标识要使用的遮盖数据规则或例程。-
bigquery.tables.update -
bigquery.tables.setColumnDataPolicy -
bigquery.dataPolicies.attach - 您必须使用
v2.projects.locations.datapolicies资源。 - 您不能同时将政策标记和数据政策应用于同一列。
- 您最多可以为一列附加 8 个数据政策。
- 一个表最多可以通过其列引用 1,000 个唯一的数据政策。
- 一个查询最多可以引用 2,000 个数据政策。
- 只有在没有表列引用数据政策时,才能删除相应数据政策。
- 如果用户仅具有
maskedAccess角色,则tabledata.listAPI 调用会失败。 - 如果用户没有原始数据访问权限,则对受列数据政策保护的表执行的表复制操作会失败。
- 跨区域表复制操作不支持受列数据政策保护的表。
- 列数据政策在 BigQuery Omni 区域中不可用。
- 如果目标表具有列数据政策,则旧版 SQL 会失败。
- 加载作业不支持具有列数据政策的用户指定架构。
- 如果您覆盖目标表,系统会从该表中移除任何现有政策标记,除非您使用
--destination_schema标志指定具有列数据政策的架构。 - 默认情况下,数据遮盖不支持分区列或聚簇列。这是数据遮盖的一般限制,并非特定于列数据政策。对分区列或聚簇列进行数据遮盖可能会大幅增加查询成本。
- 您无法直接在 BigQuery 中适用于 Apache Iceberg 的 BigLake 表、对象表、非 BigLake 外部表、Apache Iceberg 外部表和 Delta Lake 的列中分配数据政策。
- 只能在数据政策级层授予精细访问权限。如需了解详情,请参阅更新数据政策。
创建分类
您必须为需要创建分类的用户或服务账号授予 Data Catalog Policy Tag Admin 角色。
控制台
API
如需使用现有分类,请调用 taxonomies.import,而无需执行以下过程中的前两个步骤。
使用政策标记
如需详细了解如何使用政策标记(例如如何查看或更新政策标记),请参阅使用政策标记。如需了解最佳实践,请参阅在 BigQuery 中使用政策标记的最佳实践。
创建数据政策
创建数据政策的用户或服务账号必须具有 bigquery.dataPolicies.create、bigquery.dataPolicies.setIamPolicy 和 datacatalog.taxonomies.get 权限。
BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色具有 bigquery.dataPolicies.create 和 bigquery.dataPolicies.setIamPolicy 权限。Data Catalog Admin 和 Data Catalog Viewer 角色具有 datacatalog.taxonomies.get 权限。
对于自定义遮盖,请向用户授予 BigQuery Admin 或 BigQuery Data Owner 角色,以确保其具有例程和数据政策所需的权限。
您最多可以为一个政策标记创建 9 个数据政策。其中一个政策预留用于列级访问权限控制设置。
控制台
API
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
为列设置政策标记
通过将与数据政策关联的政策标记附加到列,对列设置数据政策。
设置政策标记的用户或服务账号需要具有 datacatalog.taxonomies.get 和 bigquery.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。
如需在Cloud de Confiance 控制台中查看组织中所有项目的分类和政策标记,用户需要 resourcemanager.organizations.get 权限,该权限包含在 Organization Viewer 角色中。
控制台
使用Cloud de Confiance 控制台修改架构,以便设置政策标记。
bq
API
对于现有表,请调用 tables.patch;对于新表,则调用 tables.insert。使用您传入的 Table 对象的 schema 属性在架构定义中设置政策标记。请参阅命令行示例架构,了解如何设置政策标记。
使用现有表时,首选 tables.patch 方法,因为 tables.update 方法会替换整个表资源。
执行访问权限控制
为政策标记创建数据政策时,系统会自动强制执行访问权限控制。应用了该政策标记的所有列都会返回遮盖数据,以响应具有 Masked Reader 角色的用户的查询。
如需停止强制执行访问权限控制,您必须先删除与分类中的政策标记关联的所有数据政策。如需了解详情,请参阅强制执行访问权限控制。
获取数据政策
如需获取有关数据政策的信息,请按照以下步骤操作:
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
检查数据政策的 IAM 权限
请按照以下步骤获取数据政策的 IAM 政策:
API
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
列出数据政策
请按照以下步骤列出数据政策:
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
更新数据政策
更新数据政策的用户或服务账号必须具有 bigquery.dataPolicies.update 权限。
如果要更新与数据政策关联的政策标记,则还需要 datacatalog.taxonomies.get 权限。
如果要更新与数据政策关联的主账号,则需要 bigquery.dataPolicies.setIamPolicy 权限。
BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色具有 bigquery.dataPolicies.update 和 bigquery.dataPolicies.setIamPolicy 权限。Data Catalog Admin 和 Data Catalog Viewer 角色具有 datacatalog.taxonomies.get 权限。
控制台
API
如需更改数据遮盖规则,请调用 patch 方法并通过更新后的 dataMaskingPolicy 字段传入 DataPolicy 资源。
要更改与数据政策关联的主账号,请调用 setIamPolicy 方法并传入 Policy 以更新被授予遮盖数据访问权限的主账号。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
删除数据政策
创建数据政策的用户或服务账号必须具有 bigquery.dataPolicies.delete 权限。BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色具有此权限。
控制台
API
要删除数据政策,请调用 delete 方法。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为客户端库设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN 环境变量设置为 s3nsapis.fr。
通过将数据政策应用于列来遮盖数据
除了创建政策标记,您还可以创建数据政策并将其直接应用于列。
处理数据政策
您可以使用 BigQuery Data Policy API 创建、更新和删除数据政策。如需直接对列应用数据政策,您无法使用 Cloud de Confiance 控制台中的政策标记分类页面。
如需使用数据政策,请使用 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 角色,以确保其具有例程和数据政策所需的权限。
API
如需创建数据政策,请调用 create 方法。传入满足以下要求的 DataPolicy 资源:
SQL
如需创建具有遮盖访问权限的数据政策,请使用 CREATE DATA_POLICY 语句并将 data_policy_type 的值设置为 DATA_MASKING_POLICY:
CREATE[ OR REPLACE] DATA_POLICY [IF NOT EXISTS] `myproject.region-us.data_policy_name` OPTIONS ( data_policy_type="DATA_MASKING_POLICY", masking_expression="ALWAYS_NULL" );
如需创建具有原始访问权限的数据政策,请使用 CREATE DATA_POLICY 语句并将 data_policy_type 的值设置为 RAW_DATA_ACCESS_POLICY:
CREATE[ OR REPLACE] DATA_POLICY [IF NOT EXISTS] `myproject.region-us.data_policy_name` OPTIONS (data_policy_type="RAW_DATA_ACCESS_POLICY");
如果未指定 data_policy_type 的值,则默认值为 RAW_DATA_ACCESS_POLICY。
CREATE[ OR REPLACE] DATA_POLICY [IF NOT EXISTS] myproject.region-us.data_policy_name;更新数据政策
更新数据政策的用户或服务账号必须具有 bigquery.dataPolicies.update 权限。
BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色具有 bigquery.dataPolicies.update 权限。
API
如需更改数据遮盖规则,请调用 patch 方法并通过更新后的 dataMaskingPolicy 字段传入 DataPolicy 资源。
SQL
使用 ALTER DATA_POLICY 语句更新数据遮盖规则。例如:
ALTER DATA_POLICY `myproject.region-us.data_policy_name` SET OPTIONS ( data_policy_type="DATA_MASKING_POLICY", masking_expression="SHA256" );
您还可以授予针对数据政策的精细访问权限控制访问权限。
用于授予针对数据政策的精细访问权限控制访问权限和用于管理数据政策的权限是不同的。如需控制精细访问权限控制权限,您必须更新数据政策的 grantees 字段。如需控制对数据政策的访问权限,请使用 setIamPolicy 方法设置 IAM 角色。
如需为数据政策设置授权对象,请使用 v2 patch 方法。如需管理数据政策权限,请使用 v1 setIamPolicy 方法。
API
如需授予针对数据政策的精细访问权限控制访问权限,请调用 patch 方法,并传入包含更新后的 grantees 字段的 DataPolicy 资源。
SQL
如需授予针对数据政策的精细访问权限控制访问权限,请使用 GRANT FINE_GRAINED_READ 语句添加 grantees。
例如:
GRANT FINE_GRAINED_READ ON DATA_POLICY `myproject.region-us.data_policy_name` TO "principal://goog/subject/user1@example.com","principal://goog/subject/user2@example.com"
如需撤销数据政策的精细访问权限控制访问权限,请使用 REVOKE FINE_GRAINED_READ 语句移除 grantees。
例如:
REVOKE FINE_GRAINED_READ ON DATA_POLICY `myproject.region-us.data_policy_name` FROM "principal://goog/subject/user1@example.com","principal://goog/subject/user2@example.com"
删除数据政策
创建数据政策的用户或服务账号必须具有 bigquery.dataPolicies.delete 权限。BigQuery Data Policy Admin、BigQuery Admin 和 BigQuery Data Owner 角色具有此权限。
API
要删除数据政策,请调用 delete 方法。
SQL
使用 DROP DATA_POLICY 语句删除数据政策:
DROP DATA_POLICY `myproject.region-us.data_policy_name`;
直接对列分配数据政策
您可以直接对列分配数据政策,而无需使用政策标记。
准备工作
如需获得直接对列分配数据政策所需的权限,请让您的管理员为您授予表的 BigQuery Data Policy Admin (roles/bigquerydatapolicy.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含直接对列分配数据政策所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限才能直接对列分配数据政策:
分配数据政策
如需直接对列分配数据政策,请执行以下操作之一:
SQL
如需将数据政策附加到列,请使用 CREATE
TABLE、ALTER TABLE ADD
COLUMN 或 ALTER 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 方法,并使用适用的数据政策更新表架构。
取消分配数据政策
如需直接对列取消分配数据政策,请执行以下操作之一:
SQL
如需将数据政策从列中分离,请使用 ALTER COLUMN SET
OPTIONS DDL 语句。
以下示例使用 ALTER COLUMN SET OPTIONS 从表的现有列中移除所有数据政策:
ALTER TABLE myproject.table1 ALTER COLUMN column_name SET OPTIONS ( data_policies = []);
以下示例使用 ALTER COLUMN SET OPTIONS 替换表的现有列中的数据政策:
ALTER TABLE myproject.table1 ALTER COLUMN column_name SET OPTIONS ( data_policies = ["{'name':'myproject.region-us.new_data_policy_name'}"]);
API
如需取消为列分配数据政策,请对表调用 patch 方法,并使用空数据政策或更新后的数据政策更新表架构。
限制
直接对列分配数据政策会受到以下限制: