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

IAP后负载均衡挂载的Cloud Run无法通过自定义域名建立WebSocket连接

开启IAP时Cloud Run自定义域名wss连接异常解决方案

根因说明

  • WebSocket握手请求为标准HTTP GET请求,IAP默认会拦截所有未携带有效会话Cookie的请求,返回302重定向到登录页,而WebSocket客户端无法处理302响应,直接判定连接失败
  • 先访问Cloud Run原生域名再连接自定义域名可正常工作的本质是:浏览器在Cloud Run域名下种下了IAP会话Cookie,部分场景下跨域携带后通过了IAP校验,新浏览器/隐私窗口无该Cookie时自然连接失败
  • 无相关日志是因为请求在IAP层就被拦截,未转发到Cloud Run服务,因此Cloud Run侧不会生成访问日志

修复方案

方案1:调整IAP全局配置(推荐)

  • 进入GCP IAP控制台,找到对应负载均衡的IAP配置,开启WebSocket支持开关,开启后IAP会自动透传Upgrade、Connection等WebSocket握手必需的请求头
  • 在IAP「已获授权的网域」配置中添加你的自定义域名,避免IAP将自定义域名判定为未授权跳转源
  • 修改IAP会话Cookie的Domain属性为你的自定义域名,确保前端访问自定义域名时可以正常携带IAP会话Cookie,无需提前访问Cloud Run原生域名

方案2:前端适配验证逻辑

如果不允许修改IAP全局配置,可在前端侧做兼容处理:

  • 前端发起wss连接前,先向自定义域名下的任意普通HTTP接口(如/health)发起一次GET请求,触发IAP身份验证流程,验证通过后浏览器会种下对应自定义域名的IAP会话Cookie
  • 确认请求成功后再发起WebSocket连接,此时请求携带有效Cookie即可通过IAP校验

方案3:负载均衡路径分流

如果WebSocket接口不需要IAP身份校验,可配置负载均衡URL映射规则:

  • 为WebSocket接口的统一路径前缀(如/ws/*)单独配置后端服务指向Cloud Run,单独关闭该路径的IAP验证
  • 其余业务接口路径保留原有IAP验证配置即可

验证方式

  • 配置完成后打开浏览器隐私窗口,直接访问前端页面发起wss连接,无302报错且连接正常即修复成功
  • 确认Cloud Run入站权限仍保持为仅允许内部流量和Cloud Load Balancing流量,符合安全策略要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:24:04