如果“服务帐户用户”角色不是为了模拟,那么它有什么意义?

Ari*_*Ari 6 service-accounts google-cloud-platform gcloud google-iam

服务帐户用户角色的文档有点令人困惑。

https://cloud.google.com/iam/docs/service-accounts#user-role

在服务帐户上被授予服务帐户用户角色的用户可以使用它来间接访问该服务帐户有权访问的所有资源。例如,如果服务帐户已被授予计算管理员角色 (roles/compute.admin),则在该服务帐户上已被授予服务帐户用户角色 (roles/iam.serviceAccountUser) 的用户可以充当服务帐户启动 Compute Engine 实例。在此流程中,用户模拟服务帐户以使用其授予的角色和权限执行任何任务。

基于此,我假设通过向我的帐户授予所有者服务帐户的服务帐户用户角色,我应该能够从命令行模拟该服务帐户并使用gcloud服务帐户的继承权限运行命令

gcloud init # login to my account that has the user role on the SA
gcloud set config auth/impersonate_service_account <service-account-email>
gcloud compute instances list

> WARNING: This command is using service account impersonation. All API calls will be executed as [<service-account>@<project>.iam.gserviceaccount.com].

> ERROR: (gcloud.compute.instances.list) Failed to impersonate [<service-account>@<project>.iam.gserviceaccount.com]. Make sure the account that's trying to impersonate it has access to the service account itself and the "roles/iam.serviceAccountTokenCreator" role.
Run Code Online (Sandbox Code Playgroud)

因此,我删除了用户角色并为自己分配了令牌创建者角色。按预期工作。为什么用户角色的描述听起来像是我打算使用的角色,但似乎 Token Creator 是我唯一需要的角色?

Ari*_*Ari 7

因此,尽管 GCP 文档令人困惑,但我认为我能够就以下之间的差异得出结论:

  • 服务帐户用户
  • 服务帐户令牌创建者

举个例子,如果我想部署一个 GKE 集群,但为节点指定一个除默认服务帐户之外的服务帐户,我将添加以下标志:

gcloud containers cluster create my-cluster --service-account=<service-account> 
Run Code Online (Sandbox Code Playgroud)

要执行此操作,我至少需要尝试Service Account User分配给资源的服务帐户。该角色似乎也用于其他情况,例如在虚拟机上执行代码并使用虚拟机身份(??)。

如果我想使用服务帐户凭据(即不是我自己的帐户)部署集群,我将使用需要角色的模拟Token Creator。我可能想要这样做,因为我的个人帐户没有部署集群的权限,但 SA 有。

gcloud containers cluster create my-cluster --impersonate-service-account=<service-account>
Run Code Online (Sandbox Code Playgroud)

这将构建集群并将操作记录为服务帐户的操作,而不是我的个人帐户的操作。

如果我错了,请纠正我。