谷歌云数据流服务帐户没有传播给员工



我们有多个谷歌云数据流作业(用Java/Kotlin编写(,它们可以用两种不同的方式运行:

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

从用户帐户运行Dataflow作业时,Dataflow会为工作进程提供默认的控制器服务帐户。它不向工人提供授权用户。

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

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

现在的问题是,在这两种情况下,我们似乎都需要为默认的控制器serviceaccount提供对Dataflow作业中使用的BigQuery数据集的访问权限。如果我们不这样做,当作业试图访问项目B中的数据集时,我们将拒绝BigQuery的权限(403(。对于所描述的第二种方式,我希望Dataflow独立于默认的控制器serviceaccount。我的直觉是,Dataflow不会将在PipelineOptions中设置的serviceaccount传播给worker。

通常,我们提供项目、区域、区域、临时位置(gcpTempLocation、tempLocation、stagingLocation(、流道类型(在本例中为DataflowRunner(和gcpCredential作为PipelineOptions。

那么,谷歌云数据流真的会将提供的服务帐户传播给员工吗?

更新

我们首先尝试添加options.setServiceAccount,如Magda所示,但没有添加IAM权限。这导致数据流日志中出现以下错误:

{
  "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。默认的计算引擎控制器serviceaccount123456-compute@developer.gserviceaccount.com只有Editor角色,我们没有添加任何其他IAM角色/权限。

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

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

  • 对于控制器:Dataflow Worker和Storage Object Admin。

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

这是我在谷歌文档中找到的,我自己也试过了。

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

为了使BigQuery源和接收器正常运行两个帐户必须能够访问您的云数据流作业读取或写入:

-用于执行云数据流作业的GCP帐户

-运行云数据流作业的控制器服务帐户

例如,如果您的GCP帐户abcde@gmail.com和项目执行云数据流作业的项目编号为123456789,以下帐户都必须被授予访问使用的BigQuery数据集:abcde@gmail.com和123456789-compute@developer.gserviceaccount.com.

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

最新更新