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

Posted

技术标签:

【中文标题】GCP IAM REST API 服务帐号密钥问题【英文标题】:GCP IAM REST API Service account key issue 【发布时间】:2021-12-29 18:12:22 【问题描述】:

我一直在努力解决 GCP 中的这个特殊问题。我正在尝试使用 GCP 之外的 Rest API 调用生成服务帐户密钥。下面是服务帐号和角色的屏幕截图。

据我所知,服务帐户“服务帐户管理员密钥”是创建、列出等子权限的父级。

因此,当调用 Rest API 调用以使用此文档生成密钥时:2 我收到以下错误


"error": 
    "code": 403,
    "message": "Permission iam.serviceAccountKeys.create is required to perform this operation on service account projects/XXXYYYZZZZZZ/serviceAccounts/XXXYYYYZZZZZZ.iam.gserviceaccount.com.",
    "status": "PERMISSION_DENIED"

我错过了什么?!

更新:添加有关我如何设置授权和测试 Rest API 调用的其他屏幕截图。

【问题讨论】:

编辑您的问题并展示您如何使用具有这些权限的服务帐户设置授权。换句话说,您很可能使用的凭据与您认为自己使用的不同。 您能展示一下您是如何调用 API 的吗?以及您的安全(ADC、当前使用的凭据)配置? 由于您是在 GCP 之外拨打电话,您是否关注了Workload identity federation? 不,我没有使用工作负载身份联合。当通过 curl 在 GCP 的 shell 中使用时,相同的 rest API 调用有效。我缺少 GCP 之外的东西。 【参考方案1】:

按照您的步骤,我能够复制它而没有任何错误。作为替代方案,您可以生成访问令牌作为身份验证。

    添加身份验证标头。使用以下命令生成 Bearer Token:

gcloud auth application-default print-access-token

    将 API 密钥删除到您的 URL。此示例 URL 检索:

https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys

    添加键类型

USER_MANAGED

    从上面的 gcloud 结果中添加访问令牌。

请参阅下面的示例屏幕截图:

如果您想生成服务帐户密钥,也可以参考此内容,只需确保更新您的 URL,添加带有 keyAlgorithm 的 JSON 正文,并使用 POST 而不是 GET。欲了解更多信息,请关注this guide。

【讨论】:

以上是关于GCP IAM REST API 服务帐号密钥问题的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以查看 PubSub 服务帐号?

如何使用服务帐户在 gcp 中设置正确的 iam 策略

使用GCP API密钥限制对特定GCP App Engine服务的访问?

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

如何使用 Python 创建/管理 GCP API 密钥

从 Google GCP 项目凭据 API 密钥中检索信息