gpt4 book ai didi

java - Google Cloud Dataflow 服务帐户未传播给工作人员?

转载 作者:行者123 更新时间:2023-11-30 10:08:46 25 4
gpt4 key购买 nike

我们有多个 Google Cloud Dataflow 作业(用 Java/Kotlin 编写),它们可以以两种不同的方式运行:

  1. 从用户的 Google Cloud 帐户发起
  2. 从服务帐户启动(具有所需的策略和权限)

当从用户帐户运行 Dataflow 作业时,Dataflow 会向工作人员提供 default controller serviceaccount。它不向工作人员提供授权用户。

当从 serviceaccount 运行 Dataflow 作业时,我想象使用 setGcpCredential 设置的 serviceaccount 将传播到 Dataflow 在后台使用的工作虚拟机。 JavaDocs 没有提到任何这些,但他们确实提到凭据用于对 GCP 服务进行身份验证。

在 Dataflow 的大多数用例中,我们在项目 A 中运行 Dataflow 作业,同时在项目 B 中从 BigQuery 读取数据。因此,我们为用户提供了对项目 B 中 BigQuery 数据集的读取器访问权限,以及如上所述以第二种方式使用的服务帐户。对于项目 A 中的 BigQuery,同一个 serviceaccount 还将具有 jobUser 和 dataViewer 角色。

现在的问题是,在这两种情况下,我们似乎都需要为默认 Controller 服务帐户提供对 Dataflow 作业中使用的 BigQuery 数据集的访问权限。如果我们不这样做,当作业尝试访问项目 B 中的数据集时,我们将获得 BigQuery 的权限被拒绝 (403)。对于所描述的第二种方式,我希望数据流独立于默认 Controller 服务帐户。我的直觉是 Dataflow 不会将 PipelineOptions 中设置的服务帐户传播给工作人员。

一般来说,我们提供项目、区域、区域、临时位置(gcpTempLocation、tempLocation、stagingLocation)、运行器类型(在本例中为 DataflowRunner)和作为 PipelineOptions 的 gcpCredential。

那么,Google Cloud Dataflow 是否真的将提供的服务帐户传播给工作人员?

更新

我们首先尝试添加 options.setServiceAccount,如 Magda 所示,但未添加 IAM 权限。这会导致 Dataflow 日志出现以下错误:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : " Current user cannot act as service account dataflow@project.iam.gserviceaccount.com. Causes: Current user cannot act as service account dataflow@project.iam.gserviceaccount.com..",
    "reason" : "forbidden"
  } ],
  "message" : " Current user cannot act as service account dataflow@project.iam.gserviceaccount.com.. Causes: Current user cannot act as service account dataflow@project.iam.gserviceaccount.com.",
  "status" : "PERMISSION_DENIED"
}

之后,我们尝试将 roles/iam.serviceAccountUser 添加到此服务帐户。不幸的是,这导致了同样的错误。此服务帐户已经具有 IAM 角色 Dataflow worker 和 BigQuery Job User。默认的计算引擎 Controller serviceaccount 123456-compute@developer.gserviceaccount.com 只有 Editor 角色,我们没有添加任何其他 IAM 角色/权限。

最佳答案

我认为您也需要设置 Controller 服务帐户。您可以在数据流管道选项中使用 options.setServiceAccount("hereYourControllerServiceAccount@yourProject.iam.gserviceaccount.com")

您需要添加一些额外的权限:

  • 对于 Controller :Dataflow Worker 和 Storage Object Admin。

  • 对于执行者:服务帐户用户。

这就是我在 Google 的文档中找到的内容并亲自尝试了。

我认为这可能会给您一些见解:

For the BigQuery source and sink to operate properly, the following two accounts must have access to any BigQuery datasets that your Cloud Dataflow job reads from or writes to:

-The GCP account you use to execute the Cloud Dataflow job

-The controller service account running the Cloud Dataflow job

For example, if your GCP account is abcde@gmail.com and the project number of the project where you execute the Cloud Dataflow job is 123456789, the following accounts must all be granted access to the BigQuery Datasets used: abcde@gmail.com, and 123456789-compute@developer.gserviceaccount.com.

更多关于:https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#controller_service_account

关于java - Google Cloud Dataflow 服务帐户未传播给工作人员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53630997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com