当使用gcloud dataflow flex-template run
时,我很难理解--impersonate
和--service-account-email
之间的区别。
就我所知,--impersonate
对gcloud
是全局的,而另一个标志仅用于数据流相关命令。
但同时,我仍然需要能够模拟我使用--service-account-email
时使用的服务帐户…
所以…真正的区别是什么?
非常感谢!阿德里安。
在Dataflow中你可以想到3种不同的身份。
1。用于与数据流API通信的标识
此标识在运行"gcloud数据流作业运行"时使用。例如,或任何其他操作您的工作。
调用将与您的用户一起进行,或者如果您在GCE或GAE上运行命令,则通过默认服务帐户进行调用。如果以用户身份运行该命令,使用——impersonate-service-account将以指定的服务帐户运行作业。
注意您的用户需要"服务帐户用户";IAM角色,以便能够模拟SA。例如,指定的SA可以具有Dataflow Developer角色。
2。数据流服务的标识
这个服务做一些事情,比如在GCE上创建Dataflow需要的vm,或者重新启动失败的作业。此标识是Dataflow自动创建的服务帐户。
3。数据流控制器的标识
默认情况下,它是您的计算引擎默认服务帐户。可以通过——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"。