如何将Google App Engine NodeJS应用连接至Compute Engine MongoDB
App Engine 连接 Compute Engine 部署MongoDB的实现方案
核心思路是完全绕开公网IP白名单的限制,优先走云厂商内部私网连通,稳定性、安全性、延迟表现都远优于公网连通方案。
方案1:Serverless VPC Access 私网连通(优先推荐)
这个方案全程流量走Google Cloud内部网络,不需要给App Engine找固定公网IP,也不需要把MongoDB暴露在公网,是官方推荐的无服务器服务对接VPC内资源的标准方式。
操作步骤:
- 先调整Compute Engine上MongoDB的配置:给运行MongoDB的GCE实例分配一个内部静态IP,修改MongoDB配置文件
mongod.conf里的bindIp参数,从默认的127.0.0.1改成实例内部IP或者0.0.0.0,重启MongoDB服务让配置生效。如果不需要GCE实例访问公网,可以直接解绑实例的公网IP,降低攻击面。 - 在和App Engine服务相同的区域创建Serverless VPC Access连接器,给连接器分配一个和现有VPC子网不重叠的IP段,等待连接器创建完成并接入目标VPC。
- 修改App Engine项目的
app.yaml配置文件,关联已经创建好的VPC连接器,指定私网流量走连接器转发,配置示例:
vpc_access_connector: name: projects/你的项目ID/locations/服务部署区域/connectors/你的连接器名称 egress_setting: private-ranges-only
- 配置GCE实例的VPC防火墙规则,允许VPC连接器所在IP段访问27017(MongoDB默认端口)的入站流量,不需要放开任何公网入站规则。
- 调整NodeJS项目里的MongoDB连接串,直接用GCE实例的内部静态IP作为连接地址即可,示例连接串格式:
mongodb://数据库账号:密码@GCE内部静态IP:27017/业务库名?authSource=admin
补充:如果你用的是App Engine柔性环境,不需要单独创建VPC连接器,柔性环境默认直接接入项目VPC,只需要配置VPC防火墙规则允许App Engine所在网段访问GCE的27017端口,直接用内部IP连接即可。
方案2:配置静态公网出口走公网连通(备选)
如果因为特殊原因无法使用VPC私网连通,可以给App Engine配置固定出口IP,再把IP加入GCE防火墙白名单:
- 在App Engine同区域创建Cloud NAT网关,给NAT网关绑定一个静态公网IP,配置路由让App Engine的公网出口流量全部走这个NAT网关。
- 配置完成后App Engine所有出公网的流量都会固定走绑定的静态公网IP,把这个IP加到GCE实例的公网入站白名单,放开27017端口访问即可。
- 这个方案的缺点是流量走公网,延迟更高,需要额外支付NAT网关费用,且MongoDB需要暴露公网端口,安全风险更高,仅作为备选方案使用。
通用安全注意事项
- 无论用哪种连通方案,MongoDB必须开启身份认证,禁止无密码访问,给业务使用的数据库账号分配最小必要权限,不要直接用root账号连接业务库。
- 优先配置MongoDB的TLS传输加密,避免链路传输的数据被窃听。
- 定期检查GCE防火墙规则,不要把27017端口放开给全网段
0.0.0.0/0。
内容的提问来源于stack exchange,提问作者samar musthafa
相关产品推荐
相关产品推荐

