Google BigQuery:授予服务帐户权限以仅在某些特定数据集中创建作业

Posted

技术标签:

【中文标题】Google BigQuery:授予服务帐户权限以仅在某些特定数据集中创建作业【英文标题】:Google BigQuery: grant service account permissions to create jobs in only some specific datasets 【发布时间】:2020-08-14 15:40:51 【问题描述】:

问题:我在 BigQuery 中有一个项目,其中存储了我的所有数据。在这个项目中,我创建了多个包含不同视图的数据集。现在我想使用不同的服务帐户通过 grafana 查询包含不同视图的不同数据集(如果重要的话)。这些用户应该只能查询为他们准备的视图(以及特定的数据集)。

我尝试了什么:我在数据集级别授予了 BigQuery 用户、查看者或编辑者权限(我尝试了所有这些权限)(在项目级别还授予了 BigQuery 元数据查看者)。当我查询视图时,我收到错误:

User does not have bigquery.jobs.create permission in project xy

问题:我不清楚在项目级别授予bigquery.jobs.create 权限是否会允许用户查询所有数据集,而不仅仅是我希望他访问的数据集。 p>

有没有办法让用户只在一个数据集上创建作业?

【问题讨论】:

我认为目前无法在数据集级别授予bigquery.jobs.create,这需要在项目级别。很高兴在这里被证明是错误的,因为这也是我喜欢的! 您是只授予权限(我的意思是使用自定义角色),还是授予预定义角色? (如roles/bigquery.user 我用自定义角色来做 【参考方案1】:

我们遇到了同样的问题,我们的解决方法是创建自定义角色并将自定义角色分配给特定数据集。

【讨论】:

【参考方案2】:

您可以将bigquery.user 角色授予特定数据集,如this guide. 中所示。bigquery.user 角色包含 bigquery.jobs.create 权限以及与查询数据集相关的其他基本权限。您可以查看此角色的完整权限列表in this list.

如上所述,您还可以通过关注this piece of documentation. 来创建仅具有您想要的确切权限的自定义角色

【讨论】:

【参考方案3】:

2021 年 10 月更新

我刚刚看到当时我确实没有回答这个问题,但仍然获得了很多意见。我相信自从我提出这个问题以来,可能性发生了一些变化,所以这就是我现在的处理方式:

我在项目级别为相应的服务帐户分配roles/bigquery.jobUser 角色。这使它一般可以创建作业,但是由于我没有授予任何其他权限,但它还不能查询数据。 然后我在数据集级别赋予角色roles/bigquery.dataViewer。这使得服务帐户可以查询我授予权限的数据集。 还可以在表级别授予roles/bigquery.dataViewer,这将限制对特定表的访问。

如果您希望服务帐户不仅可以查询(查看)数据,还可以插入或更改数据,例如,将roles/bigquery.dataViewer 替换为具有必要权限的角色(或另外分配该角色)。

如何授予权限:

On dataset level On table or view level

【讨论】:

我们如何验证这些角色是否存在? @Mohith7548 你的意思是如何检查角色是否被授予特定的服务帐户? 是的。我们如何验证 bigquery.dataViewer 角色是否已分配给服务帐户? 如果您想检查谁可以访问特定数据集,通过控制台的一种解决方案是打开数据集,单击“共享”->“权限”,然后检查服务帐户是否列在“BigQuery 数据查看器”。如果您想知道服务帐户被授予访问哪些数据集,您可以使用服务帐户发出 API 请求以列出所有数据集 (cloud.google.com/bigquery/docs/…)。只会列出服务帐户有权访问的数据集。但是,也可能存在其他可能性。

以上是关于Google BigQuery:授予服务帐户权限以仅在某些特定数据集中创建作业的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式列出已授予访问权限的 Bigquery 数据集,而无需事先知道项目 ID

GCP:IAM 和 BigQuery

新 Google 电子表格的 BigQuery 访问权限

我的服务帐号即使拥有足够的权限也无法访问 BigQuery 数据

Google CloudSQLAdmin - 服务帐户没有存储桶所需的权限

写入 BigQuery 表的最低 IAM 权限?