GCP 中的服务帐户和服务代理有什么区别

What is the difference between service account and service agent in GCP

假设我有这种情况

我为 运行 我的数据流作业创建了一个 Google 服务帐户。但是在我启用数据流之后 API。结果我面前有2个SA。

official document 说的让我很困惑

Some Google Cloud services have Google-managed service accounts that allow the services to access your resources. These service accounts are sometimes known as service agents.

如果我使用 dataflow-job-runner@MY-PROJECT-ID.iam.gserviceaccount.com SA 创建到 运行 的数据流作业,我想我需要为其授予 roles/storage.objectAdmin

问题是

一些Google Cloud Dataflow 等云服务需要两组权限。

您编写的程序使用服务帐户。您授予此服务帐户 IAM 角色以访问需要您的程序所需授权的资源。例如,从 Cloud Storage 读取数据或向 BigQuery 发出查询。

服务代理申请服务的运行时间。例如,当您在 Cloud Dataflow 上启动作业时,Cloud Dataflow 需要启动 VM 以 运行 您的程序。您的程序没有启动虚拟机,而是服务。因此,该服务需要自己的一组权限。这就是服务代理的用途。

通过使用两个不同的服务帐户,实现了separation of privilege