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

GCP Cloud Run容器因权限问题无法被Cloud Function调用修复咨询

问题根因

本次直接返回授权报错的核心原因是Cloud Function使用的服务账号没有目标Cloud Run服务的调用权限,与你此前遇到的运行一段时间后报错的令牌过期问题无关,按照以下步骤操作即可修复:

步骤1:获取Cloud Function的运行服务账号

  • 进入GCP控制台Cloud Function页面,打开负责调用Cloud Run的函数详情页
  • 切换到「详情」标签,找到运行时服务账号字段,记录该邮箱格式的账号,默认格式为[项目ID]@appspot.gserviceaccount.com,也可能为你自定义的服务账号

步骤2:授予服务账号Cloud Run调用权限

  • 进入Cloud Run页面,打开目标容器服务的详情页
  • 点击顶部「权限」标签,选择「授予访问权限」
  • 在「添加主体」输入框粘贴上一步记录的服务账号邮箱
  • 在「分配角色」下拉框搜索并选择Cloud Run 调用者角色
  • 点击保存,权限一般1-2分钟即可生效

步骤3:校验Cloud Function调用逻辑

如果权限配置完成后仍报错,检查Cloud Function的调用代码:

  • 确认请求头中携带的身份令牌是针对目标Cloud Run服务的URL生成的
  • 参考代码示例(Python):
import requests
import google.auth.transport.requests
from google.oauth2 import id_token

def call_cloud_run(request):
    # 此处填Cloud Run服务的完整根URL,不要带额外路径
    target_audience = "https://你的Cloud Run服务域名.a.run.app"
    # 生成调用用ID令牌
    req = google.auth.transport.requests.Request()
    id_token_val = id_token.fetch_id_token(req, target_audience)
    # 发起请求
    headers = {"Authorization": f"Bearer {id_token_val}"}
    resp = requests.get(target_audience, headers=headers)
    return resp.text

注意:生成令牌的target_audience必须与Cloud Run服务的根URL完全一致,不能携带路径、多写斜杠,否则也会触发授权错误。

步骤4:验证修复效果

手动触发一次Cloud Function执行,查看Cloud Run日志是否还返回授权报错即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:06:03