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

Cloud Run部署后写入Cloud Storage Bucket遭遇iam.serviceAccounts.signBlob权限拒绝错误求助

Cloud Run部署后写入Cloud Storage Bucket遭遇iam.serviceAccounts.signBlob权限拒绝错误求助

嗨,我之前碰到过几乎一模一样的问题,给你几个实用的排查和解决方向:

  • 先确认Cloud Run使用的服务账号:登录Cloud Run控制台,找到你的服务,进入「修订版本」标签页,查看当前运行版本使用的服务账号邮箱(默认一般是[你的项目编号]-compute@developer.gserviceaccount.com)。本地测试用的是你手动下载的IAM密钥文件,对应的服务账号权限可能很全,但Cloud Run默认用的服务账号权限往往没那么多。

  • 给服务账号添加必要的权限:你需要给这个服务账号授予Service Account Token Creator预定义角色(这个角色包含了iam.serviceAccounts.signBlob权限),如果用gcloud命令的话,可以这么执行:

    gcloud projects add-iam-policy-binding 你的项目ID \
      --member="serviceAccount:你的服务账号邮箱" \
      --role="roles/iam.serviceAccountTokenCreator"
    

    当然你也可以在IAM控制台手动添加这个角色,找到对应的服务账号,编辑权限后搜索添加该角色即可。

  • 别忘了检查GCS Bucket的基础权限:除了上面的权限,还要确保这个服务账号有GCS Bucket的写入权限,比如授予Storage Object Creator或者Storage Admin角色,不然就算解决了签名权限问题,还是会因为Bucket权限不足报错。

  • 排查代码里的凭据配置:部署到Cloud Run后,不需要再手动指定本地用的JSON密钥文件了,Google Cloud的客户端库会自动使用应用默认凭据(ADC)。如果你的代码里硬编码了密钥文件路径,记得去掉,让客户端自动获取Cloud Run提供的凭据。

简单解释下原因:当你的代码在Cloud Run环境下操作GCS时,客户端库可能需要用服务账号对请求进行签名,这就需要iam.serviceAccounts.signBlob权限。本地用的密钥文件对应的账号通常是你手动创建的,权限配置得比较完整,但Cloud Run默认服务账号缺这个权限,所以就触发了403错误。

备注:内容来源于stack exchange,提问作者Emaborsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:17:28