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

GCP中Cloud Run服务B调用服务A出现Forbidden错误的解决方法

解决Cloud Run服务B调用服务A的403 Forbidden问题

核心问题分析

当前403错误主要源于两个关键缺失:防火墙规则未覆盖Serverless VPC连接器的IP段,以及Cloud Run服务A未授权服务B的调用权限。

具体解决步骤

1. 更新VPC入站防火墙规则

现有入站规则仅允许10.0.0.0/24网段的流量,但服务B通过Serverless VPC连接器发起的请求源IP属于10.8.0.0/28,不在规则覆盖范围内,导致流量被拦截:

  • 编辑全局入站防火墙规则,将源IPv4范围修改为10.0.0.0/24,10.8.0.0/28
  • 确认规则动作为"允许",优先级设置为低于默认拒绝规则(比如保持65534即可,确保不会被更高优先级的拒绝规则覆盖)

2. 为服务B授予服务A的调用权限

Cloud Run服务默认启用身份认证,即使在VPC内,未授权请求也会被拒绝:

  • 进入Cloud Run控制台的服务A页面,切换到「权限」标签
  • 点击「添加主账号」,输入服务B的服务账号(可在服务B详情页获取,格式为service-<项目编号>@gcp-sa-cloudrun.iam.gserviceaccount.com)
  • 为该账号分配Cloud Run Invoker角色,保存配置

3. 规范服务B的调用方式

  • 确保服务B调用服务A时使用内部服务URL(可在服务A详情页获取,格式为https://<服务A名称>-<哈希值>-<区域>.run.app),而非外部公开URL
  • 服务B的代码中需正确获取并携带身份令牌,示例Python代码:
import google.auth
import google.auth.transport.requests

credentials, _ = google.auth.default()
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)
token = credentials.token

# 调用服务A时添加认证头
headers = {"Authorization": f"Bearer {token}"}

4. 验证连接器与服务配置

  • 确认Serverless VPC连接器状态为"就绪",且关联到服务A所在的VPC
  • 检查服务B的出站流量配置,确认已正确选择该连接器,确保VPC内部流量全部通过连接器转发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:57:54