创建 GCP 服务帐户密钥时权限被拒绝
Posted
技术标签:
【中文标题】创建 GCP 服务帐户密钥时权限被拒绝【英文标题】:Permission denied when creating GCP Service Account Key 【发布时间】:2022-01-23 07:04:19 【问题描述】:我创建了Service Account A
并授予角色Service Account Admin
和Service 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 错误