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

Ruby on Rails部署Cloud Run生成签名URL遇服务账号凭证缺失问题

问题解决:Cloud Run中生成GCS签名URL报错的处理

报错原因

生成GCS签名URL分两种方式:本地私钥签名和服务端API签名。Cloud Run的默认临时凭证不包含私钥,若SDK默认使用本地签名逻辑,就会因缺少私钥及issuer信息触发报错。

无需Secret Manager的解决方案(推荐)

使用Cloud Storage的服务端签名API,无需持有服务账号密钥,仅靠已配置的Storage Object Admin权限即可解决:

  • 初始化Google Cloud Storage客户端时,添加use_service_account_signer: true配置,让SDK调用GCP官方服务生成签名URL,而非本地用私钥签名。
  • 代码示例:
require "google/cloud/storage"

# 启用服务端签名模式初始化客户端
storage = Google::Cloud::Storage.new(use_service_account_signer: true)
bucket = storage.bucket "你的存储桶名称"
target_file = bucket.file "目标文件的路径/文件名"

# 生成有效期1小时的签名URL
signed_url = target_file.signed_url expires: 1.hour.from_now

权限验证

你已绑定的Storage Object Admin角色包含storage.objects.sign权限,完全满足服务端签名的权限要求,无需额外添加权限。

关于Secret Manager的必要性

不是必须使用Secret Manager。只有当你坚持采用本地私钥签名方式时,才需要将服务账号密钥存储在Secret Manager中并在Cloud Run加载使用。但这种方式需要维护密钥生命周期,远不如服务端签名简便安全。

内容的提问来源于stack exchange,提问作者Veck Hsiao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:22:09