【问题标题】:DataFlow worker BigQuery permission errorDataFlow worker BigQuery 权限错误
【发布时间】:2021-10-22 02:07:42
【问题描述】:

我一直在尝试在我的 GCP 帐户分配有“所有者”角色的项目中执行数据流管道 (Python)。

管道执行以下任务。

  1. 从 BigQuery(运行 Dataflow 流水线的同一项目)读取数据。
  2. 应用一些转换
  3. 最终将结果数据加载到 GCS

据我了解,Dataflow 工作人员使用默认计算引擎服务帐户 (-compute@developer.gserviceaccount.com) 访问 GCP 上的其他服务,包括 BigQuery 和 -compute@developer.gserviceaccount.com 具有“编辑”角色。

但是当我尝试使用 DataflowRunner 运行管道时出现以下错误。

错误:

BigQuery 执行失败。,错误:消息:访问被拒绝:项目:用户在项目中没有 bigquery.jobs.create 权限。 HTTP 代码:403

使用 DirectRunner 运行良好。

我还尝试通过将 DataFlow worker 和 Dataflow Admin 角色分配给
来运行此管道 -compute@developer.gserviceaccount.com 尽管这具有“编辑”角色。但是这个管道失败并出现同样的错误。

能否请您提供意见以解决此问题?

执行命令:

python -m bigquery_to_gcs --input gs:///input --output gs:///results/output.txt --project --region us-central1 --staging_location gs:/ //staging --temp_location gs:///tmp --runner DataflowRunner

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataflow


    【解决方案1】:

    Dataflow security and permissions doc 部分所述,您需要为两个帐户设置适当的 BigQuery 访问角色。在您的情况下,使用BigQuery Job UserBigQuery Userrole 获得bigquery.jobs.create 权限。

    这两个帐户是:

    • 您用于运行 Dataflow 作业的 Google Cloud 帐户。
    • 运行 Dataflow 作业的工作人员服务帐号。

    对于工作人员服务帐户,您可以使用带有编辑角色的-compute@developer.gserviceaccount.com,因为它已经拥有bigquery.jobs.create 权限。

    您用于运行 Dataflow 作业的 Google Cloud 帐户是您需要修复并正确设置 BigQuery 访问角色的帐户。。 p>

    您是如何使用此帐户的?这是以下方法之一:

    • 你运行gcloud auth application-default login,它是一个名义上的用户,比如Anjan.B@gmail.com
    • 当您运行python -m 命令时,您被重定向到一个网络流以选择像Anjan.B@gmail.com 这样的名义用户
    • 您运行 export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service/account/key.json,它是一个服务帐户

    【讨论】:

    • 感谢您的宝贵意见,我已尝试通过 composer 运行此管道,即使遇到了同样的错误。
    • 所以在这种情况下,当您使用 Composer 时,您使用的不是名义上的用户帐户,而是服务帐户。因此,请检查 Composer 正在使用哪个服务帐户,并确保它具有上述角色。
    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2014-11-27
    • 2017-10-26
    • 2018-10-17
    • 1970-01-01
    • 2019-02-24
    • 2022-09-23
    相关资源
    最近更新 更多