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

如何限制同GCP项目下仅App Engine的Node服务访问CloudSQL及前端访问API?

问题1:限制仅Node API服务访问CloudSQL
  • 关闭CloudSQL的公网访问入口,仅保留私有IP配置,划入与App Engine API服务同VPC的子网,生产环境不要开启公网访问。
  • 配置CloudSQL IAM权限,仅给你的Node API对应的App Engine服务账号授予roles/cloudsql.client权限,删除所有其他无关账号的CloudSQL访问权限。App Engine默认服务账号格式为[项目ID]@appspot.gserviceaccount.com,若使用自定义服务账号替换为对应账号即可。
  • 数据库的账号密码等敏感信息存储在Secret Manager中,仅给API服务的服务账号授予Secret Manager的秘密读取权限,禁止硬编码到代码或配置文件中。
  • 数据库连接统一使用Cloud SQL Auth Proxy,App Engine部署时只需在app.yaml中添加配置即可自动集成,无需额外部署服务,配置示例:
beta_settings:
  cloud_sql_instances: "[项目ID]:[区域]:[CloudSQL实例名]=tcp:[数据库端口,PostgreSQL填5432、MySQL填3306]"
问题2:限制仅React前端应用调用API服务
  • 第一层配置CORS规则:在Node Express服务中配置CORS白名单,仅允许你的React前端的App Engine域名作为合法来源,示例代码:
const cors = require('cors');
const allowedOrigin = 'https://[你的React前端App Engine域名]';
app.use(cors({
  origin: (origin, callback) => {
    // !origin兼容本地调试场景,生产环境可删除该判断
    if (origin === allowedOrigin || !origin) {
      callback(null, true);
      return;
    }
    callback(new Error('Not allowed by CORS'));
  },
  credentials: true
}));
  • 第二层搭配Auth0做接口鉴权:所有API接口要求请求头携带Auth0颁发的有效JWT令牌,Node API侧校验JWT的签名、有效期、受众等信息,只有校验通过的请求才处理,避免未授权用户绕过CORS直接调用接口。
  • 无登录要求的公开接口可额外配置App Engine入站流量控制:开启API服务的App Engine入站规则,仅允许同项目内的App Engine服务访问,标准环境还可配置Identity-Aware Proxy(IAP),给前端服务账号授予IAP访问权限,非项目内请求会直接被GCP拦截,不会到达API服务层。
额外优化建议
  • 两个App Engine服务建议放在同一GCP项目下,无需额外配置跨项目权限,也不会产生跨项目VPC流量费用。
  • Auth0配置中需将你的React前端域名加入允许的回调地址、登出地址、Web Origin列表,避免鉴权跳转出现异常。

内容的提问来源于stack exchange,提问作者Neil Celeste Rara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:48:03