【问题标题】:Why can a GCP service account not impersonate itself?为什么 GCP 服务帐号不能模拟自己?
【发布时间】:2021-06-28 15:34:04
【问题描述】:

我们目前正在 CI 管道中运行一个进程,该 CI 管道将资源部署到 Google Cloud Platform (GCP),然后调用云函数。我们作为此部署的一部分运行的脚本之一是这样的:

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

但是它失败并出现错误:

警告:此命令正在使用服务帐户模拟。所有 API 调用都将作为 [deployer-dev@redacted-project-name.iam.gserviceaccount.com] 执行。
错误:(gcloud.functions.call)无法模拟 [deployer-dev@redacted-project-name.iam.gserviceaccount.com]。确保尝试模拟它的帐户有权访问服务帐户本身和“roles/iam.serviceAccountTokenCreator”角色。

换句话说,被模拟的服务帐户与运行脚本的服务帐户相同(我不会详细说明为什么会这样 - 有原因)。

我的问题是......我很惊讶服务帐户不能模拟自己。为什么它不能做到这一点?

【问题讨论】:

    标签: google-cloud-platform service-accounts google-iam


    【解决方案1】:

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

    您可以通过转到 IAM -> 服务帐户 -> 选择服务帐户 (deployer-dev@redacted-project-name.iam.gserviceaccount.com) -> 权限 -> 授予访问权限 -> 新成员 (添加相同的帐户 deployer-dev@redacted-project-name.iam.gserviceaccount.com) -> 角色添加服务帐户令牌创建者 -> 保存

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

    【讨论】:

    • 我们已经为许多其他帐户做到了这一点,但我想我认为如果授予的 SA 与授予角色的 SA 相同,我们就不必这样做。
    • 顺便说一句,这并不重要,但我们使用 terraform 授予访问权限,因此 registry.terraform.io/providers/hashicorp/google/latest/docs/… 在这里很有用。
    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 2023-01-25
    • 2021-01-18
    相关资源
    最近更新 更多