Google Cloud Run查询bigquery的权限

我有一个小型python应用程序在docker上运行的Google云中运行。该应用程序由http请求触发,在大查询中执行查询并返回结果。不幸的是,我收到以下权限错误:

if cfg!(feature = "anchor") {
    runner.add_program(AnchorProgram::new(/* anchor ID */));
}
else {
    runner.add_program(MasterProgram::new());
}

我了解我需要让云运行访问大型查询。我该怎么做?给哪个用户?我怎么知道?

gukoule 回答:Google Cloud Run查询bigquery的权限

您需要通过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工具使用相关的特定说明。

  1. 要添加创建和运行作业的权限(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添加到服务帐户。不要添加其他权限/角色来解决无法创建/运行作业的问题,因为过多的权限会损害安全性。

  2. 需要另一个权限才能读取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

大家都在问