是否可以(以编程方式或通过UI)为BigQuery数据集分配自定义角色?我们希望在项目中具有更细粒度的访问控制,但我找不到任何支持这些控件的指示,或者它们不受支持。 Big share的“共享数据集”UI没有提供明确的方法来指定哪些角色可以访问。
这是迄今为止我能做的最好的,但它会抛出有关entity_id的错误
for dataset in datasets:
dataset_ref = bigquery.Dataset(dataset, frankie_client)
entry = bigquery.AccessGrant(
role='projects/xxxxxx/roles/custom_role1',
entity_type='specialGroup',
entity_id='projects/xxxxxx/roles/custom_role1')
assert entry not in dataset_ref.access_grants
entries = list(dataset_ref.access_grants)
entries.append(entry)
dataset_ref.access_grants = entries
dataset = dataset_ref.update() # API request
assert entry in dataset.access_entries
顺便说一句,谷歌的API非常不稳定,文档记录很差....如果有人知道如何做到这一点,将不胜感激。
*最后更新。
有一个很长的文档页面描述了所有角色,并讨论了自定义角色。
https://cloud.google.com/bigquery/docs/access-control
我想你错过的是你需要在数据集上应用一个组。如果你正确地设置了组,你可以做很多灵活的事情。
查看链接页面中的示例场景部分。这有你的用例解释。
对数据集中数据的读写访问权限
CompanyProject
是一个包括dataset1
和dataset2
的项目。 AnalystGroup1
是一组数据科学家,他们只在dataset1
工作,AnalystGroup2
是一个只在dataset2
工作的团体。数据科学家应该只能访问他们所处理的数据集,并且不应该能够运行查询。
完全访问数据集
CompanyProject:dataset1
将AnalystGroup1
添加到预定义角色bigquery.dataOwner
。CompanyProject:dataset2
将AnalystGroup2
添加到预定义角色bigquery.dataOwner
。除了预定义的角色,BigQuery还支持自定义角色。有关更多信息,请参阅Cloud IAM文档中的Creating and Managing Custom Roles。
要在IAM page中添加更多内容,您可以更轻松地看到已分配用户的角色。您创建的自定义角色分组在“自定义”标签下。
更新
在我的documentation之后,issue ticket得到了改善。
注意:目前,您无法将自定义角色应用于数据集。有关数据集访问控制的更多信息,请参阅Assigning access controls到数据集。