You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Storage API无法生成访问令牌、访问被拒绝问题求助

问题排查与解决方案

错误根因

你收到的PERMISSION_DENIED报错核心原因是调用服务账号generateAccessToken接口时,调用方需要单独持有目标服务账号的**服务账号令牌创建者(roles/iam.serviceAccountTokenCreator)**角色,该权限不会被项目Owner角色默认继承,需要单独配置。
除此之外你原curl命令中-X POST /的多余斜杠也会导致请求路径异常。

分步修复步骤

  • 步骤1:为你的工作邮箱授予服务账号令牌创建者权限,执行以下gcloud命令:
gcloud iam service-accounts add-iam-policy-binding content-uploader@kol-hatorah-kulah.iam.gserviceaccount.com \
  --member=user:替换为你的工作邮箱地址 \
  --role=roles/iam.serviceAccountTokenCreator
  • 步骤2:对齐应用默认凭据(ADC)和你使用的工作账号,gcloud config list显示的账号和gcloud auth application-default对应的凭据是两套独立体系,执行以下命令重新登录ADC:
gcloud auth application-default login

在弹出的浏览器窗口中选择你的工作邮箱完成授权即可。

  • 步骤3:确认Documents/request.json配置符合要求,必须指定GCS上传对应的作用域,示例配置如下:
{
  "scope": ["https://www.googleapis.com/auth/devstorage.read_write"],
  "lifetime": "3600s"
}
  • 步骤4:使用修正后的curl命令发起请求:
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/content-uploader@kol-hatorah-kulah.iam.gserviceaccount.com:generateAccessToken

更简便的长期GCS上传方案

如果你的核心需求只是用服务账号长期上传文件到GCS,不需要自行调用接口生成访问令牌,可直接使用官方原生鉴权方案:

  1. 在GCP控制台下载目标服务账号的JSON格式密钥文件
  2. 配置本地环境变量:
export GOOGLE_APPLICATION_CREDENTIALS=替换为你的服务账号密钥文件本地路径
  1. 直接使用gcloud命令上传文件即可自动完成鉴权:
gcloud storage cp 本地文件路径 gs://目标存储桶名称/存储路径

内容的提问来源于stack exchange,提问作者David Reese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 15:51:01