如何在特定的BigQuery数据集中设置运行查询和创建表的权限



我试图限制用户只能在BigQuery中查看特定的数据集。我希望用户只能运行查询和创建表。因此,我共享数据集权限,并赋予他们角色BigQuery Data Viewer(查看数据(和BigQuery User(运行查询和创建表(。但每当我运行查询时,我都会收到以下错误:

访问被拒绝:项目xxx:用户在项目xxx中没有bigquery.jobs.create权限。

我检查了文档,BigQuery用户角色应该具有BigQuery.jobs.create权限。我错过了什么?

请参阅Granting roles to a service account for specific resources文档,其中可以找到使用IAM & Admin页面实现目标的5个步骤。

您还可以使用命令行创建一个新的服务帐户并授予其权限:

创建新的服务帐户:

gcloud iam service-accounts create <NAME>

授予权限:

gcloud projects add-iam-policy-binding <YOUR_PROJECT_ID> --member "serviceAccount:<NAME>@<YOUR_PROJECT_ID>.iam.gserviceaccount.com" --role "roles/bigquery.jobUser"

此外,使用此命令检查您是否授予服务帐户权限:

gcloud projects get-iam-policy <YOUR_PROJECT_ID>

让我知道结果。我希望它能有所帮助。

Share Dataset中对BigQuery User的描述是:

应用于项目时,访问可运行查询、创建数据集、读取数据集元数据和列表应用于数据集时,访问读取数据集中的数据集元数据和列表表

因此,您需要在项目级别将BigQuery Job User分配给帐户。

我们有同样的用例,事实证明,对于我认为相当常见的场景,正确设置它非常复杂。我们希望为BigQuery临时使用配置一个项目,该项目将根据需要授予内部高级用户。

通过我们的配置,我们希望用户只能看到自己的数据集,但希望他们能够完全控制自己的数据集中。作为一名BQ管理员,我可以为他们创建一个数据集,然后直接在数据集中为他们分配BigQuery数据编辑器角色,但仍然存在两个问题。

  • 用户不能上传大于10MB的文件,因此必须授予他们在云存储桶上上传文件并导入BQ的权限。

  • 更重要的是,用户不能从任何不是另一个BQ表的来源创建表!!这是因为bigquery.jobs.create权限必须在项目级别授予。

最后,为了满足我们的用例需求和良好的用户体验,我们需要做三件事。

  • 为用户创建一个BQ数据集,并授予他们对数据集的BigQuery数据编辑器权限。

  • 为用户创建GCS存储桶,并授予他们存储桶上的云存储对象管理权限。

  • 创建一个新的自定义项目IAM角色并分配给最终用户,我们称之为";BigQuery Adhoc用户";并授予以下权限:

    bigquery.jobs.create
    bigquery.kobs.get
    bigquery.gobs.list
    storage.buckets.list

这反过来又为我们提供了我们所寻找的用户体验和数据安全性,用户只能访问自己的数据,但仍包含在一个项目中。用户在项目级别需要IAM角色,只是为了从GCS或直接上传创建一个表,这似乎是一个糟糕的设计。

我也遇到过同样的问题(我想向特定的数据集添加权限,允许人员查询和导出数据,但不能查看其他任何内容(,当我添加角色时,它起了作用:BigQuery Job User&项目级别上的BigQuery资源查看器。这些是唯一包含以下所需权限的角色:

bigquery.jobs.create
bigquery.jobs.get
bigquery.jobs.list

请注意,我不需要一个人能够上传任何东西并存储它。

后续问题:是否有比签署我列出的角色更好的方式来授予列出的访问权限?

提前谢谢!

最新更新