我们有多个Google Cloud Dataflow作业(用Java / Kotlin编写),它们可以通过两种不同的方式运行:
从用户帐户运行Dataflow作业时,Dataflow将default controller serviceaccount提供给工作人员。它不会将授权用户提供给工人。
从serviceaccount运行Dataflow作业时,我想象使用setGcpCredential设置的serviceaccount将被传播到Dataflow在后台使用的辅助VM。 JavaDocs没有提及任何这些,但他们确实提到凭据用于对GCP服务进行身份验证。
在大多数Dataflow用例中,我们在项目A中运行Dataflow作业,同时从项目B中的BigQuery读取数据。因此,我们为用户提供了对项目B中BigQuery数据集的读者访问权限,以及如上所述的第二种方式使用的服务帐户。该相同的服务帐户还将在项目A中具有BigQuery的角色jobUser和dataViewer。
现在的问题是,在两种情况下,我们似乎都需要提供默认控制器serviceaccount来访问Dataflow作业中使用的BigQuery数据集。如果不这样做,当作业尝试访问项目B中的数据集时,我们将获得BigQuery的拒绝权限(403)。 对于所述的第二种方法,我希望Dataflow与默认控制器serviceaccount无关。我的直觉是,Dataflow不会将PipelineOptions中设置的服务帐户传播给工作人员。
通常,我们提供项目,区域,区域,临时位置(gcpTempLocation,tempLocation,stagingLocation),运行器类型(在本例中为DataflowRunner)和gcpCredential作为PipelineOptions。
那么,Google Cloud Dataflow是否真的将提供的服务帐户传播给了工作人员?
更新
我们首先尝试添加Magda所示的options.setServiceAccount
,而没有添加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角色数据流工作程序和BigQuery作业用户。
默认的计算引擎控制器服务帐户123456-compute@developer.gserviceaccount.com
仅具有编辑者角色,我们未添加任何其他IAM角色/权限。
答案 0 :(得分:1)
我认为您也需要设置控制器服务帐户。您可以在“数据流管道选项”中使用options.setServiceAccount("hereYourControllerServiceAccount@yourProject.iam.gserviceaccount.com")
。
您将需要添加一些其他权限:
对于控制器:Dataflow Worker和存储对象管理员。
对于执行者:服务帐户用户。
这就是我在Google文档中找到的内容,然后自己尝试一下。
我认为这可能会给您一些见解:
为使BigQuery源和接收器正常运行,请执行以下操作 两个帐户必须有权访问您的Cloud的任何BigQuery数据集 数据流作业读取或写入:
-用于执行Cloud Dataflow作业的GCP帐户
-运行Cloud Dataflow作业的控制器服务帐户
例如,如果您的GCP帐户是abcde@gmail.com,而项目 您执行Cloud Dataflow作业的项目数为 123456789,以下所有帐户都必须被授予访问权限 使用的BigQuery数据集:abcde@gmail.com和 123456789-compute@developer.gserviceaccount.com。
更多信息:https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#controller_service_account