【问题标题】:Permission denied for Service Account with enough access具有足够访问权限的服务帐户的权限被拒绝
【发布时间】:2026-01-07 05:20:03
【问题描述】:

我遇到了一个服务帐户问题,该服务帐户附加了名为 Preemptible Killer 的角色。

角色绑定到这个服务帐户,我什至给了它“编辑器”访问权限以进行调试。

我有一个项目,我仔细检查了名称是否正确。

当我在点击删除实例 API 时收到 403 时遇到问题。如果我访问 Policy Troubleshooter,理论上我可以看到,它具有正确的访问权限。

为 preemptible-killer@{project}.iam.gserviceaccount.com、compute.instances.delete、instances/{instance} 的 API 调用授予访问权限。

但是,当从我的 K8s 集群节点调用它时,我得到一个 403。这是意外的 403、服务帐户和角色屏幕截图。我肯定错过了一些我不知道的东西。

这是角色:

这是附加到服务帐户的自定义角色 + 编辑角色。

❯ gcloud projects get-iam-policy {project}
bindings:
- members:
  - serviceAccount:preemptible-killer@{project}.iam.gserviceaccount.com
  role: projects/{project}/roles/preemptible_killer
- members:
  - serviceAccount:preemptible-killer@{project}.iam.gserviceaccount.com
  role: roles/editor

【问题讨论】:

  • 如果您使用 gcloud 作为服务帐户进行身份验证,然后尝试运行 gcloud 命令来删除实例,会发生什么情况。它有效吗?理想情况下,请从 GKE 内的 pod 内的容器内尝试,但如果没有,Cloud Console 仍将是一个开始测试。
  • @Kolban 刚刚尝试了您的建议。我尝试使用 gcloud 身份验证作为本地计算机上的服务帐户删除实例。我犯了同样的错误。我不确定我错过了什么,在我看来角色已分配等等。我肯定错过了一些东西。
  • 这很好,因为它消除了许多虚假的可能性。现在让我们看看您当前的政策……阅读以下内容并开始为您的项目发布转储政策。 *.com/questions/47006062/…
  • 我编辑了其他角色,因为我认为我们不需要它们,但这是我所看到的我们正在寻找的角色。将它们作为编辑添加到主要问题中。
  • 您是否在集群上激活了工作负载身份?

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


【解决方案1】:

我最终创建了另一个附加了完全相同角色的服务帐户,并且它可以工作,实际上是一个克隆。

老实说,我不确定这是 GCP 错误还是我遗漏了什么。

【讨论】:

    【解决方案2】:

    如果您删除了 SA,然后使用相同的名称重新创建它,但未在 IAM 中进行任何更改,请记住,在 GCP 的后端,这是一个完全不同的 SA,即使名称与相同的。仅供参考!

    【讨论】:

      最近更新 更多