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

同服务账号gcloud可调用GCF但Ruby SDK报PermissionDeniedError如何解决

问题根因

你收到报错的核心原因是传递给Ruby SDK的函数资源名称不符合要求:

  • gcloud CLI 会自动读取本地默认配置的项目ID、部署区域,所以直接传函数名opt_manual就能正常识别
  • Google Cloud 官方SDK要求传递完全限定的资源名称,格式为 projects/[GCP项目ID]/locations/[函数部署区域]/functions/[函数名],你直接传opt_manual时,SDK会把opt_manual误识别为项目ID,因此抛出项目权限不足的错误。

修复方案

步骤1:构造完全限定的函数资源名

替换代码中的name变量值,示例如下:

# 替换为你自己的GCP项目ID、函数部署的区域、函数名
name = "projects/your-project-id/locations/your-function-region/functions/opt_manual"
data = '{some-json}'

步骤2:调整调用方法(如果需要触发函数执行)

你当前使用的get_function方法是用于查询函数的配置信息,等价于gcloud functions describe命令。如果你要实现和gcloud functions call一致的触发函数执行的效果,需要调用call_function方法:

client = ::Google::Cloud::Functions::V1::CloudFunctionsService::Client.new do |config|
  config.credentials = "google_key.json"
end

# 触发函数执行的请求
request = ::Google::Cloud::Functions::V1::CallFunctionRequest.new(
  name: name,
  data: data
)

response = client.call_function request
# 可通过response.result获取函数返回结果

可选排查项

如果调整后仍然报错,可依次检查:

  • 确认google_key.json文件路径配置正确,SDK可正常读取
  • 确认你填写的函数部署区域和实际部署区域一致(可通过gcloud functions list查看区域信息)
  • 确认服务账号的权限是绑定在对应GCP项目或目标函数资源上,而非仅绑定在组织/文件夹层级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:04