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

无负载均衡下Cloud Run前后端服务请求路由及访问限制问询

Cloud Run无负载均衡下的前后端请求路由与访问控制

一、用户请求的路由路径

在无负载均衡的默认部署状态下,Cloud Run的每个服务都会分配独立的公网HTTPS URL。用户的请求路径完全取决于你的前端配置:

  • 如果你的React前端将API请求直接指向后端服务的公网URL,用户浏览器会直接发起请求到后端服务(绕过前端服务)。
  • 如果前端配置了代理(比如React的setupProxy.js,或构建时配置环境变量指向后端内部地址),用户的请求会先发送到前端服务,再由前端服务转发对应的API请求到后端服务。

简言之:Cloud Run本身不会强制固定路由走向,完全由你前端的请求逻辑决定。

二、限制后端服务仅与前端通信

可以实现,核心是通过Cloud Run的访问控制和服务账号认证来隔离后端:

  1. 禁用后端的公网访问
    部署后端服务时添加参数:

    gcloud run deploy backend-service --image=your-java-image --no-allow-unauthenticated
    

    配置后,后端服务会拒绝所有未认证的公网请求,仅接受持有有效身份凭证的访问。

  2. 给前端服务分配调用后端的权限

    • 找到前端服务使用的默认服务账号,给该账号授予roles/run.invoker角色(允许调用Cloud Run服务):
      gcloud projects add-iam-policy-binding your-project-id \
        --member=serviceAccount:frontend-service-sa@your-project-id.iam.gserviceaccount.com \
        --role=roles/run.invoker
      
    • 前端服务运行时,可通过GCP元数据服务器获取ID Token,用于后端请求的认证。比如在Node.js环境(React构建后的前端通常部署在Node服务中)可这样实现:
      const fetch = require('node-fetch');
      async function getAuthToken() {
        const response = await fetch('http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://backend-service-xxxx.run.app', {
          headers: { 'Metadata-Flavor': 'Google' }
        });
        return response.text();
      }
      // 发起后端请求时携带Token
      const token = await getAuthToken();
      const backendResponse = await fetch('https://backend-service-xxxx.run.app/api/xxx', {
        headers: { 'Authorization': `Bearer ${token}` }
      });
      

通过以上配置,后端服务就只能被前端服务(通过认证的服务账号)访问,完全拒绝公网直接请求。

内容的提问来源于stack exchange,提问作者Praveen K M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:03:16