写入 BigQuery 表的最低 IAM 权限?

Posted

技术标签:

【中文标题】写入 BigQuery 表的最低 IAM 权限?【英文标题】:Minimum IAM Permissions for writing to a BigQuery table? 【发布时间】:2021-07-13 10:46:59 【问题描述】:

我想要一份写入单个 BigQuery 表的作业。我认为 IAM 权限很简单,将BigQuery Jobs User 角色授予相应表上的服务帐户,但我收到了错误。

Access Denied: Project <your-project>: User does not have bigquery.jobs.create permission in project <your-project>

当您只想授予对单个数据集中单个表的访问权限时,是否有办法避免授予服务帐户对整个项目的访问权限?如何在 GCP BigQuery 中应用最小权限原则?

查询代码:

const bigquery = new BigQuery(projectId);
await bigquery
  .dataset(datasetId)
  .table(tableId, location: DATASET_LOCATION)
  .load(fileRef);

【问题讨论】:

【参考方案1】:

我认为这是 NodeJS 库中缺少的部分。我没有找到实现我想要的解决方法(同时,我的 NodeJS 很糟糕)。

在 GO 中,我找到了你需要的东西

    bq,err := bigquery.NewClient(ctx, "myRunningProject")
    bq.DatasetInProject("targetProject", "dataset").Table("table").LoaderFrom(...)

您在计费项目中启动客户,您是工作用户。当您构建数据集/表路径时,您使用的是不同的项目。

您可以在 BigQuery NodeJS 库上打开功能请求。

【讨论】:

【参考方案2】:

如果需要,您可以通过Table level 授予访问权限。但是,您面临的问题是服务帐户或任何用户通常需要具有适当的权限才能实际创建工作。换句话说,查询在链接到结算帐户的项目中运行。有人需要为此付费。

“BigQuery 作业用户”角色提供在项目中运行作业(包括查询)的权限。但不允许您访问数据。

您必须在项目级别提供 bigquery.jobUser,然后将 bigquery.dataViewer 提供给特定的数据集或表。更多关于 BQ 访问控制的信息在here。

【讨论】:

以上是关于写入 BigQuery 表的最低 IAM 权限?的主要内容,如果未能解决你的问题,请参考以下文章

Cloudformation 的最低权限 AWS IAM 策略

GCP:IAM 和 BigQuery

针对单个存储桶的读取和写入权限的 AWS S3 IAM 策略

是否有任何形式可写入 BigQuery 以动态指定目标表的名称?

访问被拒绝:BigQuery BigQuery:写入数据时权限被拒绝

无论如何确定 CloudFormation 模板实际需要哪些 IAM 权限?