Google Cloud Storage API:无法生成访问令牌,访问被拒绝

问题描述 投票:0回答:3

我是 Google API 的新手,几天来我一直在尝试使用服务帐户将内容上传到 Google Cloud Storage 存储桶。我能够完成此任务,但只能使用从 Google API Playground 获取的临时访问令牌,并且我需要能够获取新的访问令牌,以便服务帐户始终可以上传内容。

我一直在尝试以下操作,但即使相关帐户具有“所有者”权限,我的访问仍然被拒绝。

curl -X POST / -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ -H "Content-Type: application/json; charset=utf-8" \ -d @Documents/request.json \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/[email protected]:generateAccessToken

回复:

{ "error": { "code": 403, "message": "The caller does not have permission", "status": "PERMISSION_DENIED" } }

当我运行

gcloud config list
时,我得到了正确的项目,并且该帐户是我的工作电子邮件,它也是 Google Cloud 中的所有者。

提前致谢!

google-cloud-platform google-cloud-firestore oauth-2.0 google-api google-cloud-storage
3个回答
5
投票

免责声明 - 我的解决方案适用于工作负载身份联合 相关问题。

我曾为这个错误苦苦挣扎,但终于找到了!

对我来说这是错误的属性映射。

我正在遵循一些教程(可能已经过时了),并且映射与官方 github 操作任务文档不同(此处

我有

repository_owner
aud
。将其更改为
repository
然后... 有效!

总结一下我的映射如下:

"google.subject"                 = "assertion.sub"
"attribute.actor"                = "assertion.actor"
"attribute.repository"           = "assertion.repository"

所以,如果您是因为相同的教程来到这里...您已经得到服务了!


2
投票

您的

curl
命令正在尝试使用服务帐户身份来生成访问令牌。该命令失败,因为您没有权限。

将角色 roles/iam.serviceAccountTokenCreator 添加到运行命令的身份。


0
投票

@ravenwing 的答案在我花了 8-10 个小时试图解决这个问题后救了我。

我的用例是通过 GitHub Actions 运行一个作业,该作业使用 Workload Identity Federation 向 Google 进行身份验证,然后使用身份验证后获取的凭据运行 Python 脚本。 Python 脚本将行追加到 Google 电子表格中。

我发了一篇文章,希望能帮助处于同样情况的其他人,因此,如果您想要指导做类似的事情,请随时查看此链接:

使用 GitHub Actions 向 Google Workload Identity Federation 进行身份验证,以获得在 Python 脚本中使用的凭据

谢谢一百万,@ravenwing!

© www.soinside.com 2019 - 2024. All rights reserved.