服务帐户用户角色的留档有点混乱。
https://cloud.google.com/iam/docs/service-accounts#user-role
在服务号上被授予服务号用户角色的用户可以使用它来间接访问该服务号有权访问的所有资源。例如,如果一个服务号被授予了计算管理员角色(角色/compute. admin),在该服务号上被授予服务号用户角色(角色/iam.serviceAccount tUser)的用户可以充当服务号来启动计算引擎实例。在此流程中,用户模拟服务号以使用其授予的角色和权限执行任何任务。
基于此,我假设通过授予我的帐户所有者服务号用户角色,我应该能够从命令行模拟该服务号,并以服务号的继承权限运行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.
所以我删除了用户角色并为自己分配了令牌创建者角色。按预期工作。为什么用户角色的描述听起来像是我要使用的角色,但似乎令牌创建者是我唯一需要的角色?
因此,尽管GCP文档混乱,我想我还是能够得出一个结论:
例如,如果我想部署一个GKE集群,但指定一个服务号供节点使用,而不是默认服务号,我会添加标志:
gcloud containers cluster create my-cluster --service-account=<service-account>
为此,我至少需要服务帐户用户
在我试图分配给资源的服务号上。此角色似乎也用于其他情况,例如在VM上执行代码并使用VM标识(??)。
如果我想使用服务号凭据(即不是我自己的帐户)部署集群,我会使用需要Token Creator
角色的模拟。我可能想要这样做,因为我的个人帐户没有部署集群的权限,但SA有。
gcloud containers cluster create my-cluster --impersonate-service-account=<service-account>
这将构建集群并将操作记录为服务号,而不是我的个人帐户。
如果我错了,请纠正我。