您需要通过IAM角色向分配给Cloud Run的服务帐户添加BiqQuery权限。
要允许Cloud Run创建Big Query作业(bigquery.jobs.create),您需要以下角色之一:
- roles / bigquery.user
- roles / bigquery.jobUser
Cloud Run的服务帐户显示在Google Cloud Console的“ Cloud Run”部分中。这很可能是Compute Engine default service account
。
要添加BiqQuery角色,可以使用Google Cloud Console。转到IAM,找到服务帐户。将角色添加到服务帐户。
文档:
,
问题之一可能是您的Cloud Run作业使用的服务帐户没有BigQuery权限。
您可以更新服务帐户权限并添加roles/bigquery.user
角色以创建作业。
另外,根据您的应用程序需求添加相关角色。您可以查看有关不同的BigQuery角色here.
的详细信息
一个好的规则是仅提供对服务帐户的必需权限。
我希望这会有所帮助。
,
该应用程序由http请求触发,在大查询中执行查询并返回结果。
从安全角度来看,所需的权限与此solution中的自定义网站所使用的权限相同。我是作者该网站也由http请求触发,在BQ中执行查询并返回结果。并且仅授予创建作业的权限(通过bigquery.jobUser
角色)。
您可以通过其他方式向服务帐户授予所需的权限(例如,更广泛的权限和更受限制的权限),详细信息在步骤6中为here。
通常来说,权限越严格且越精细,对安全性越好。
我要添加更多说明,并粘贴与Google工具使用相关的特定说明。
-
要添加创建和运行作业的权限(BQ错误消息说缺少此权限),请执行以下命令:
gcloud projects add-iam-policy-binding <project-name> --member=serviceAccount:<sa-name>@<project-name>.iam.gserviceaccount.com --role roles/bigquery.jobUser
该命令可以在Cloud Shell中执行,使用BigQuery Web UI中的“激活Cloud Shell”图标或从其他Google控制台页面将其打开。替换占位符:
<sa-name>
-替换为Cloud Run使用的服务帐户名,
<project-name>
-替换为项目名称。
该命令将角色bigquery.jobUser
添加到服务帐户。不要添加其他权限/角色来解决无法创建/运行作业的问题,因为过多的权限会损害安全性。
-
需要另一个权限才能读取BQ数据。有两种添加方式:
- 将
bigquery.dataViewer
角色授予服务帐户:
gcloud projects add-iam-policy-binding <project-name> --member=serviceAccount:<sa-name>@<project-name>.iam.gserviceaccount.com --role roles/bigquery.dataViewer
然后继续下一步。除非您使用的是一次性项目,否则不建议这样做。这种方法的缺点是授予查看所有项目数据集的权限。
- 采用更精细的方法(推荐),方法是允许服务帐户仅查询一个数据集。这是下面描述的方法。
执行以下命令,将<ds-name>
替换为数据集名称(用于查询):
bq show --format=prettyjson <ds-name> >/tmp/mydataset.json
vi /tmp/mydataset.json
使用vi,将以下项目附加到现有的access
数组中,并在保存文件之前替换占位符:
,{
"role": "READER","userByEmail": "[<sa-name>@<project-name>.iam.gserviceaccount.com](mailto:<sa-name>@<project-name>.iam.gserviceaccount.com)"
}
执行命令以对数据集进行更改:
bq update --source /tmp/mydataset.json <ds-name>
本文链接:https://www.f2er.com/3006464.html