Level Up Your Column-level Security: Using IAM Data Governance Tags in BigQuery
TL;DR · AI 摘要
BigQuery推出基于IAM的全局数据治理标签,实现跨区域列级安全管控与灾备自动同步。
核心要点
- 数据治理标签支持全局定义,可在任意项目/区域复用同一tag key:value
- 标签树支持五级深度分类(如PII>Financial>CreditCardNumber)
- 灾备场景下标签策略会自动同步到次要区域
结构提纲
按章节快速跳转。
传统policy tags无法满足多区域灾备和集中化治理需求
基于IAM Resource Manager的全局标签系统,通过设置--purpose=DATA_GOVERNANCE创建
相比policy tags实现全局管控、灾备自动同步、五级分类体系
创建标签键→定义层级结构→绑定数据策略触发访问控制
数据分类与安全策略可分步实施,提升数据上架灵活性
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- BigQuery列级安全:IAM数据治理标签
- 核心机制
- 基于IAM Resource Manager的全局标签系统
- 核心优势
- 全局管控(跨区域/项目复用)
- 灾备自动同步
- 五级分类体系
- 实施流程
- 创建标签键→定义层级→绑定策略
金句 / Highlights
值得收藏与分享的关键句。
数据治理标签自动复制到次要区域,确保灾备期间安全策略持续有效
标签树支持五级深度分类,实现如PII>Financial>CreditCardNumber的细粒度管控
与区域限定的policy tags不同,数据治理标签可在组织层级定义后全局复用
提升列级安全性:在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:创建标签键和值
- 创建数据治理标签键:首先通过控制台、gcloud CLI或API创建一个IAM标签键。当您在创建标签键时指定purpose字段为
--purpose=DATA_GOVERNANCE时,魔法就发生了。这个键的更改会告诉Google Cloud该标签将用于BigQuery的列级安全。
加载中...
示例:创建名为"data_class"的数据治理标签键
gcloud resource-manager tags keys create data_class \
--parent=projects/my-governance-project \
--purpose=DATA_GOVERNANCE- 创建标签值:
创建数据治理标签键后,需要在该键下创建具体的标签值,用于对列数据进行分类。数据治理标签的一个有用功能是能够构建标签值的层次结构树。标签值树允许您创建广泛的类别,然后根据数据类型进一步细化到具体类别。您可以最多深入五级以实现精细的访问控制。
第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将标签附加到列
- 导出现有schema
对于现有表,通过使用JSON文件更新表schema并使用API或BQ CLI管理标签是最有效的方式,因为它允许您一次性为多个列添加标签。
将当前表schema保存到本地JSON文件
bq show --schema --format=prettyjson my_project:my_dataset.my_table > schema.json
- 在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" } } } ]
- 更新表:
将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