【发布时间】:2020-05-01 07:31:33
【问题描述】:
我已经使用 GCP UI 为特定项目 Project X 设置了一个服务帐号。 Project X 内有 3 个数据集:
Dataset 1
Dataset 2
Dataset 3
如果我将角色 BigQuery Admin 分配给 Project X,则当前所有 3 个数据集都将继承该角色。
目前,所有这些数据集都继承了在项目级别分配给服务帐号的权限。有没有办法修改服务帐户的权限,使其只能访问指定的数据集?例如允许访问Dataset 1,但不允许访问Dataset 2 或Dataset 3。
这种配置可能吗?
我尝试在 UI 中添加条件,但是当我使用 Name 资源类型并将值设置为等于 Dataset 1 时,我无法访问任何数据集 - 大概该值不是正确的。或者数据集不是有效的名称资源。
更新
添加一些关于我在发布之前已经尝试过的更多细节,以及关于我正在做什么的更多细节。
对于我的特定用例,我正在尝试通过 API(使用 Python)执行 SQL 查询以及修改 BigQuery 中的表。
案例 A: 我创建了一个角色为 'BigQuery Admin' 的服务帐户。
此角色传播到项目中的所有数据集 - 该属性是继承的,我无法从任何数据集中删除此服务帐户角色。
在这种情况下,我可以使用 Python API 查询所有数据集和表 - 正如您所期望的那样。
案例 B: 我创建了一个没有默认角色的服务帐户。
不传播任何角色,我可以通过单击 UI 中的 “共享数据集” 选项将角色分配给特定数据集,以将 “BigQuery 管理员” 角色分配给他们。
在这种情况下,我无法查询任何数据集或表,如果我尝试,则会收到以下错误:
*Forbidden: 403 POST https://bigquery.googleapis.com/bq/projects/project-x/jobs: Access Denied: Project X: User does not have bigquery.jobs.create permission in project Project X.*
即使我想要的数据集存在所需的权限(在本例中为 bigquery.jobs.create),我也无法查询数据,因为在项目级别似乎还需要 bigquery.jobs.create 权限才能使用 API .
【问题讨论】:
-
正如@rmesteves 提到的documentation 解释了如何限制对特定数据集的访问。这不是你要找的吗?另一种可能值得考虑的方法是使用Authorized Views,但这意味着在更精细的级别(查询结果)上限制访问,尽管它确实允许您创建只有特定用户才能访问的单独数据集通过为他们分配正确的权限。
-
我之前尝试过@rmesteves 强调的方法。我已经更新了这个问题,以添加更多关于我正在尝试做什么以及如何做的细节。在我的情况下,只允许访问授权视图是不够的 - 我希望用户能够创建/修改/删除指定数据集中的任何对象。
-
感谢您的解释。 BQ Admin 角色确实具有 jobs.create 权限。我想知道您是如何设置权限的,因为根据错误消息,我认为该角色未设置为您的服务帐户。请详细说明您用于分配此类角色的命令/步骤。您还可以在“共享数据集”屏幕的“按名称或角色过滤”文本字段中确认分配给您的服务帐户的权限。
标签: python google-cloud-platform google-bigquery