创建 GCP 服务帐户密钥时权限被拒绝

Posted

技术标签:

【中文标题】创建 GCP 服务帐户密钥时权限被拒绝【英文标题】:Permission denied when creating GCP Service Account Key 【发布时间】:2022-01-23 07:04:19 【问题描述】:

我创建了Service Account A 并授予角色Service Account AdminService Account Key Admin。我在 GCP Console 中完成了这项工作。

Service Account A 的功能是使用 GCP Java SDK 以编程方式创建其他服务帐户。它成功创建了新的服务帐户,但是当它为新创建的服务帐户创建密钥时,我收到以下响应:


  "code": 403,
  "errors": [
    
      "domain": "global",
      "message": "Permission iam.serviceAccountKeys.create is required to perform this operation on service account projects/-/serviceAccounts/<new_service_account_name>@<project_id>.iam.gserviceaccount.com.",
      "reason": "forbidden"
    
  ],
  "message": "Permission iam.serviceAccountKeys.create is required to perform this operation on service account projects/-/serviceAccounts/<new_service_account_name>@<project_id>.iam.gserviceaccount.com.",
  "status": "PERMISSION_DENIED"

我尝试过等待,看看我是否在创建服务帐户后过早尝试创建密钥,但等待数小时后没有任何变化。

Service Account A 可以为自己成功创建密钥,但不能为其创建的其他服务帐户创建密钥。

我该如何解决?

【问题讨论】:

【参考方案1】:

您有以下三个问题之一:

    服务帐户 A 在项目中实际上没有 IAM 角色服务帐户密钥管理员。使用 CLI 命令 gcloud projects get-iam-policy 并仔细检查。

    您的代码使用了错误的身份。您认为您使用的是服务帐户,但 ADC(应用程序默认凭据)正在加载另一个身份,或者您的代码有误。

    您分配了正确的角色,但在服务帐户而不是项目上。使用 CLI 命令 gcloud iam service-accounts get-iam-policy。如果您发现输出中列出了该角色,则您在错误的位置分配了该角色。请改用 CLI 命令 gcloud projects add-iam-policy-binding

注意:还有第四种方法可以阻止您创建服务帐户密钥。可能会启用约束:

Restricting service account usage

【讨论】:

啊,我认为它是#3!我将角色分配给服务帐户,这似乎是正确的做法。我只希望该服务帐户具有权限。你能解释一下为什么它会绑定到项目而不是服务帐户吗?

以上是关于创建 GCP 服务帐户密钥时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义服务帐户在 GCP 中创建 VM 时,KMS 权限出现 400 错误

GCP IAM REST API 服务帐号密钥问题

我可以使用 Terraform 创建 GCP API 密钥吗?

调用 GCP App 引擎 REST API 时权限被拒绝

GCP PubSub主题权限

Atlassian Stash - 权限被拒绝(公钥)