Google Cloud Blog

Level Up Your Column-level Security: Using IAM Data Governance Tags in BigQuery

8.5内容质量

TL;DR · AI 摘要

BigQuery推出基于IAM的全局数据治理标签,实现跨区域列级安全管控与灾备自动同步。

核心要点

  • 数据治理标签支持全局定义,可在任意项目/区域复用同一tag key:value
  • 标签树支持五级深度分类(如PII>Financial>CreditCardNumber)
  • 灾备场景下标签策略会自动同步到次要区域

结构提纲

按章节快速跳转。

  1. 传统policy tags无法满足多区域灾备和集中化治理需求

  2. 基于IAM Resource Manager的全局标签系统,通过设置--purpose=DATA_GOVERNANCE创建

  3. 相比policy tags实现全局管控、灾备自动同步、五级分类体系

  4. 创建标签键→定义层级结构→绑定数据策略触发访问控制

  5. 数据分类与安全策略可分步实施,提升数据上架灵活性

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • BigQuery列级安全:IAM数据治理标签
    • 核心机制
      • 基于IAM Resource Manager的全局标签系统
    • 核心优势
      • 全局管控(跨区域/项目复用)
      • 灾备自动同步
      • 五级分类体系
    • 实施流程
      • 创建标签键→定义层级→绑定策略

金句 / Highlights

值得收藏与分享的关键句。

#BigQuery#IAM#数据治理#云安全#Google Cloud
打开原文

提升列级安全性:在BigQuery中使用IAM数据治理标签 | Google Cloud Blog

数据与分析

提升列级安全性:在BigQuery中使用IAM数据治理标签

2026年7月18日

##### Vignesh Rajamani

产品经理

##### Pramod Busam

软件工程师

##### 立即试用Gemini Enterprise Business Edition

职场AI的入口

立即试用

许多BigQuery客户依赖策略标签来保护其敏感信息。策略标签曾是实施列级访问控制的首选方案,仅允许具有适当权限的用户查看如个人身份信息(PII)等敏感列。这在当时是一个强大且有效的系统。

然而,数据生态系统变得愈加复杂,用于保障其安全的工具也需随之进化。新的挑战包括创建和管理支持跨多个地区和位置多标签的分类体系、实现灾难恢复能力,以及与广泛的集中治理战略集成。

为帮助您应对当今数据生态系统的需求,我们很兴奋地推出BigQuery中数据治理标签的预览版。基于Google Cloud身份和访问管理(IAM)资源管理器的基础设施,数据治理标签提供了一种可扩展且稳健的方法,帮助您管理访问控制并保护BigQuery列数据。

什么是IAM数据治理标签?

数据治理标签是一种特殊的资源管理器标签。您可以通过在IAM中创建标签键时将purpose字段设置为DATA_GOVERNANCE来创建它,并指定其用于BigQuery列级安全。您可以为列数据治理目的专门创建一个层次化标签树,并直接将其应用于BigQuery列。

为什么使用数据治理标签进行列级安全?

  • 全球范围,区域执行:与仅限区域的策略标签不同,数据治理标签是全球性的。您可以在组织层级定义一个标签键值对(如“data_sensitivity:high”),并在组织内的任何项目或区域中使用它。
  • 管理灾难恢复:在故障转移期间,安全策略应持续有效。数据治理标签及其相关数据策略会自动复制到次要区域。如果需要切换区域,您的安全态势会自动随之迁移。
  • 层次化安全:现在可以创建最多五层深度的标签树。这允许继承关系和更细粒度的分类(如PII > 金融 > 信用卡号)。
  • 解耦治理:您可以在决定实施安全策略之前,通过标签对数据进行组织和分类。只有在为该标签定义数据策略后,访问控制才会生效,这为团队在数据引入过程中提供了更大的灵活性。

实现列级安全的三个步骤

步骤1:创建标签键和值

  1. 创建数据治理标签键:首先通过控制台、gcloud CLI或API创建一个IAM标签键。当您在创建标签键时指定purpose字段为--purpose=DATA_GOVERNANCE时,魔法就发生了。这个键的更改会告诉Google Cloud该标签将用于BigQuery的列级安全。

加载中...

示例:创建名为"data_class"的数据治理标签键

bash
gcloud resource-manager tags keys create data_class \
  --parent=projects/my-governance-project \
  --purpose=DATA_GOVERNANCE
  1. 创建标签值:

创建数据治理标签键后,需要在该键下创建具体的标签值,用于对列数据进行分类。数据治理标签的一个有用功能是能够构建标签值的层次结构树。标签值树允许您创建广泛的类别,然后根据数据类型进一步细化到具体类别。您可以最多深入五级以实现精细的访问控制。

第1级:创建名为 "pii" 的标签值

gcloud resource-manager tags values create pii \ --parent=my-governance-project/data_class

第2级:在 "pii" 下为 "private" 数据创建子标签值

gcloud resource-manager tags values create private \ --parent=my-governance-project/data_class/pii

第3级:在 "private" 下为 "email" 创建另一个子标签值

您可以最多深入五级以实现精细控制

gcloud resource-manager tags values create email \ --parent=my-governance-project/data_class/private

步骤2:通过JSON schema将标签附加到列

  1. 导出现有schema

对于现有表,通过使用JSON文件更新表schema并使用API或BQ CLI管理标签是最有效的方式,因为它允许您一次性为多个列添加标签。

将当前表schema保存到本地JSON文件

bq show --schema --format=prettyjson my_project:my_dataset.my_table > schema.json

  1. 在JSON文件中添加dataGovernanceTags

打开schema.json文件,并将标签映射添加到敏感列中。注意使用命名空间键和值的简写名称。

[ { "name": "user_email", "type": "STRING", "dataGovernanceTagsInfo": { "dataGovernanceTags": { "my-governance-project/data_class": "email" } } }, { "name": "phone_number", "type": "STRING", "dataGovernanceTagsInfo": { "dataGovernanceTags": { "my-governance-project/data_class": "private" } } }, { "name": "government_id", "type": "STRING", "dataGovernanceTagsInfo": { "dataGovernanceTags": { "my-governance-project/data_class": "pii" } } } ]

  1. 更新表:

将schema应用到BigQuery表。

使用新添加标签的JSON文件覆盖表schema

bq update --project_id=my-data-project --schema=schema.json my_dataset.my_table

您也可以使用SQL将数据治理标签绑定到BigQuery表列。

CREATE OR REPLACE TABLE my_dataset.my_table( user_email STRING OPTIONS ( data_governance_tags = [('my-governance-project/data_class', 'email')]), ); ALTER TABLE my_dataset.my_table ALTER COLUMN phone_number SET OPTIONS ( data_governance_tags = [('my-governance-project/data_class', 'private')]); ALTER TABLE my_dataset.my_table ADD COLUMN government_id STRING OPTIONS ( data_governance_tags = [('my-governance-project/data_class', 'pii')]);

您可以通过将标签设置为空列表来删除列标签,例如:

ALTER TABLE my_dataset.my_table ALTER COLUMN phone_number SET OPTIONS ( data_governance_tags = [] );

您可以使用information_schema COLUMNS视图查看列标签:

SELECT column_name, data_governance_tags[SAFE_OFFSET(0)].key AS tag_key, data_governance_tags[SAFE_OFFSET(0)].value AS tag_value, FROM my_project.my_dataset.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'my_table'

结果类似于以下内容:

+---------------+----------------------------------+-----------+ | 列名 | 标签键 | 标签值 | +---------------+----------------------------------+-----------+ | user_email | my-governance-project/data_class | email | | phone_number | my-governance-project/data_class | private | | government_id | NULL | NULL | +---------------+----------------------------------+-----------+

步骤3:创建数据策略

最后,定义一个BigQuery数据策略来管理这些已标记列的访问权限。这些策略明确引用之前附加的标签值。请注意,虽然数据治理标签是全局的,但数据策略是区域性的。

为了保护数据,策略必须在与BigQuery表所在区域相同的区域中创建。一旦定义了策略,访问权限仅授予指定的接收者;所有其他用户都将被拒绝访问敏感列数据。

同时请注意,BigQuery的安全性是分层的。要使数据策略生效,用户(接收者)必须首先拥有表本身的基访问权限(通常通过类似roles/bigquery.dataViewer的角色)。数据策略随后作为第二层安全机制,决定用户是查看原始敏感列数据,还是查看经过掩码和模糊处理的版本。

用于标记为‘pii’的列数据的掩码策略(SHA256掩码):

curl --request POST "https://bigquerydatapolicy.googleapis.com/v2/projects/myProject/locations/us-east1/dataPolicies" \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{ "dataPolicy": { "dataPolicyType": "DATA_MASKING_POLICY", "dataMaskingPolicy": { "predefinedExpression": "SHA256" }, "grantees": [ "principalSet://goog/group/grp-sales@corp.com" ], "dataGovernanceTag": { "key": "myProject/data_class", "value": "pii" } }, "dataPolicyId": "masking_policy_for_data_class_pii" }' \ --compressed

用于标记为‘pii’的列数据的原始访问策略

curl --request POST "https://bigquerydatapolicy.googleapis.com/v2/projects/myProject/locations/us-east1/dataPolicies" \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{ "dataPolicy": { "dataPolicyType": "RAW_DATA_ACCESS_POLICY", "grantees": [ "principal://goog/subject/abc@xyz.com" ], "dataGovernanceTag": { "key": "myProject/data_class", "value": "pii" } }, "dataPolicyId": "raw_access_policy_data_class_pii" }' \ --compressed

用于标记为“private”的列数据的掩码策略(NULL掩码):

curl --request POST "https://bigquerydatapolicy.googleapis.com/v2/projects/myProject/locations/us-east1/dataPolicies" \ --header "Authorization: Bearer $(gcloud auth print-access-token)" \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{ "dataPolicy": { "dataPolicyType": "DATA_MASKING_POLICY", "dataMaskingPolicy": { "predefinedExpression": "ALWAYS_NULL" }, "grantees": [ "principal://goog/subject/abc@xyz.com" ], "dataGovernanceTag": { "key": "myProject/data_class", "value": "private" } }, "dataPolicyId": "null_policy_data_class_private" }' \ --compressed

通过这三个步骤,您的列数据现已受到保护。当下次用户查询您的BigQuery表时,我们的授权引擎会自动将其身份与您的数据策略进行比对。如果用户符合策略中的条件,他们将根据策略查看脱敏数据或原始数据;如果不符合,则会被拒绝访问。

今天立即开始

数据治理标签是增强BigQuery数据安全性和治理策略的全新强大工具。我们正在持续提升BigQuery的数据治理能力,未来将推出以下更新:支持使用SQL创建标签和基于标签的策略、支持为单个列附加多个标签、支持基于标签组合定义策略,以及与Knowledge Catalog等服务的深度集成。

您现在可以开始为列添加标签,并在大规模场景下定义细粒度的访问控制。了解更多内容,请查阅数据治理标签文档

Posted in

  • Data Analytics
  • BigQuery