在数据流中使用 Flex 模板时 --impersonate 和 --service-account-email 之间有什么区别?

问题描述

在使用 --impersonate 时,我很难理解 --service-account-emailgcloud dataflow flex-template run间的区别。

据我所知,--impersonategcloud 是全局的,而另一个标志仅用于与 Dataflow 相关的命令。

但与此同时,我仍然需要能够模拟我在使用 --service-account-email 时使用的服务帐户...

那么...真正的区别是什么?

非常感谢! 阿德里安。

解决方法

在 Dataflow 中,您可以想到 3 种不同的身份。

1.您用于与 Dataflow API 通信的身份

例如,当您运行“gcloud dataflow 作业运行”或任何其他操作来操作您的作业时,将使用此标识。

如果您在 GCE 或 GAE 上运行您的命令,将使用您的用户或默认服务帐户进行调用。如果您以用户身份运行该命令,则使用 --impersonate-service-account 将改为以指定的服务帐户运行作业。

请注意,您的用户需要“服务帐户用户”IAM 角色才能模拟 SA。例如,指定的 SA 可以具有 Dataflow Developer 角色。

2. Dataflow 服务的身份

此服务执行诸如在 GCE 上创建 Dataflow 需要的虚拟机或重新启动失败的作业等操作。此身份是由 Dataflow 自动创建的服务帐号。

3.数据流控制器的身份

默认情况下,它是您的 Compute Engine 默认服务帐号。您可以使用 --service--account-email 参数更改它。

确保您的 SA 具有 Dataflow Worker 角色,否则作业将无法运行。此外,这基本上是您的作业将使用的 SA,因此,例如,如果您的作业从 Pub/Sub 读取,则需要适当的 Pub/Sub 权限。 (请注意,对于 BigQueryIO 等某些 IO 连接器,身份 1 和 3 都需要 BigQuery 权限:https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#accessing_bigquery_datasets_across_google_cloud_platform_projects)。

此 SA 将在 Dataflow UI 中显示为“serviceAccountEmail”。