Google cloud platform Google云运行权限查询bigquery
我有一个运行在谷歌云上的小python应用程序,用docker运行。应用程序由http请求触发,在大查询中执行查询并返回结果。很遗憾,我遇到以下权限错误:Google cloud platform Google云运行权限查询bigquery,google-cloud-platform,google-bigquery,google-cloud-run,google-iam,google-cloud-iam,Google Cloud Platform,Google Bigquery,Google Cloud Run,Google Iam,Google Cloud Iam,我有一个运行在谷歌云上的小python应用程序,用docker运行。应用程序由http请求触发,在大查询中执行查询并返回结果。很遗憾,我遇到以下权限错误: Reason: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/XXXX/jobs: Access Denied: Project XXXX: User does not have bigquery.jobs.create permission in project
Reason: 403 POST https://bigquery.googleapis.com/bigquery/v2/projects/XXXX/jobs: Access Denied: Project XXXX: User does not have bigquery.jobs.create permission in project XXXX.\n\n(job ID: XXXX-XX-XX-XX-XXXX)\n\n
我知道我需要提供从云运行到大查询的访问权限。我该怎么做?给哪个用户?我怎么知道 您需要通过IAM角色向分配给Cloud Run的服务帐户添加BiqQuery权限 要允许Cloud Run创建大查询作业(bigquery.jobs.create),您需要以下角色之一:
- 角色/bigquery.user
- 角色/bigquery.jobUser
计算引擎默认服务帐户
要添加BiqQuery角色,可以使用Google云控制台。转到IAM,找到服务帐户。向服务帐户添加角色
文件:
角色/bigquery.user
角色以创建作业。
此外,根据您的应用程序需求添加相关角色。您可以查看有关不同BigQuery角色的详细信息
一个好的规则是只向服务帐户提供所需的权限
我希望这有帮助
应用程序由http请求触发,在大查询中执行查询并返回结果
从安全的角度来看,所需的权限与自定义网站从此处使用的权限相同。我是作者。该网站也由http请求触发,在BQ中执行查询并返回结果。仅授予创建作业的权限(通过bigquery.jobUser
role)是不够的
您可以通过不同的方式(例如,更广泛的权限和更受限制的权限)向服务帐户授予所需的权限,详细信息见步骤6
一般来说,权限越受限制,粒度越细,安全性越好
我正在添加额外的说明,并粘贴与谷歌工具使用相关的具体说明
gcloud projects add-iam-policy-binding <project-name> --member=serviceAccount:<sa-name>@<project-name>.iam.gserviceaccount.com --role roles/bigquery.jobUser
然后继续下一步。除非您使用的是一次性项目,否则不推荐使用。这种方法的缺点是授予查看所有项目数据集的权限
- 通过允许服务帐户只查询一个数据集,采用更细粒度的方法(推荐)。这是下面描述的方法
(由查询使用):
执行命令以对数据集进行更改:
bq update --source /tmp/mydataset.json <ds-name>
bq更新——source/tmp/mydataset.json
你的答案实际上是正确的,应该能解决问题。然而,我发现我的问题是,我在一个项目上部署应用程序,在另一个项目上访问bigquery。我接受了你的回答,因为它回答了我的问题,解决了我解释过的问题。但是,您知道如何允许我刚才提到的场景吗?这可能是一种不好的做法吗?服务帐户或用户帐户可以在多个项目中拥有权限。只需将标识添加到每个项目并分配角色。
bq show --format=prettyjson <ds-name> >/tmp/mydataset.json
vi /tmp/mydataset.json
,
{
"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>