为什么 GCP 服务帐户不能模拟自己?

Why can a GCP service account not impersonate itself?

我们目前正在 运行在 CI 管道中设置进程,此 CI 管道将资源部署到 Google 云平台 (GCP),然后调用云功能。作为此部署的一部分,我们 运行 的脚本之一发出了这个:

gcloud --impersonate-service-account "$DEPLOYER_SA" functions call "$FUNCTION_NAME" --region "$REGION" --project "$PROJECT_ID" --data {}

但是失败并出现错误:

WARNING: This command is using service account impersonation. All API calls will be executed as [deployer-dev@redacted-project-name.iam.gserviceaccount.com].
ERROR: (gcloud.functions.call) Failed to impersonate [deployer-dev@redacted-project-name.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.

换句话说,被模拟的服务帐户与 运行 正在运行脚本的服务帐户相同(我不会深入探讨为什么会这样 - 这是有原因的)。

我的问题是...我很惊讶服务帐户无法冒充自己。为什么它不能这样做?

您是否已将角色 Service Account Token Creator 授予您的服务帐户?

您可以转到 IAM -> 服务帐户 -> Select 服务帐户 (deployer-dev@redacted-project-name.iam.gserviceaccount.com) -> 权限 -> 授予访问权限 - > New Members (add the same account deployer-dev@redacted-project-name.iam.gserviceaccount.com) -> Role add Service Account Token Creator -> 保存

希望这些信息对您有所帮助。