如何配置VPC防火墙以支持App Engine部署并限制服务仅网关访问?
解决GAE弹性实例微服务的访问控制与部署问题
首先得明确:用VPC防火墙完全可以实现你的需求,只是之前的规则没考虑到GAE部署和运行时的必要流量,才导致部署卡住。我给你梳理下具体的配置步骤和注意点:
一、调整VPC防火墙规则,兼顾部署与访问控制
你需要在现有规则基础上,添加两条关键的允许规则,优先级要高于你的「拒绝所有入站」规则(防火墙规则优先级数字越小,执行顺序越靠前):
1. 允许Google健康检查流量
GAE弹性实例运行时,Google的健康检查服务需要定期访问实例来确认可用性,如果被防火墙挡住,实例会被标记为不健康甚至被销毁。配置规则:
- 方向:入站
- 目标:给你的微服务实例添加统一标签(比如
gae-microservice),规则目标设为这个标签 - 来源:使用
google-health-checks预定义IP组,或者手动指定35.191.0.0/16、130.211.0.0/22 - 端口:允许80和443(GAE默认用HTTP/HTTPS做健康检查)
- 优先级:设为100(比你的拒绝规则优先级高,比如拒绝规则设为1000)
2. 允许GAE部署控制平面的流量
部署时,Google的App Engine管理服务需要和实例通信来完成更新操作,这条规则就是放行这类流量:
- 方向:入站
- 目标:同样用你的微服务实例标签
gae-microservice - 来源:使用
google-managed-services预定义IP组(包含所有Google云管理服务的IP) - 端口:允许80、443(GAE部署主要依赖HTTP/HTTPS端口)
- 优先级:同样设为100
3. 保留你的网关访问规则
继续保留那条允许带有网关标签(比如gae-gateway)的实例访问所有微服务端口的规则,优先级设为100,确保网关能正常调用微服务。
4. 最后设置拒绝所有入站的规则
这条规则优先级设为1000(最低),确保所有未被前面规则放行的流量都被拒绝,这样外部用户就无法直接访问微服务了。
二、验证配置是否生效
部署前可以先检查防火墙规则:
gcloud compute firewall-rules list --filter="targetTags:(gae-microservice OR gae-gateway)"
确认允许规则的优先级都高于拒绝规则,然后再执行gcloud app deploy,应该就不会卡住了。
三、替代方案:请求签名验证(作为补充或备选)
如果觉得防火墙配置太繁琐,或者需要更细粒度的控制,可以在微服务层实现请求签名验证:
- 网关在调用微服务时,生成一个基于请求内容的签名(比如用HMAC算法),放在自定义HTTP头部(比如
X-Gateway-Signature) - 微服务收到请求后,用预先约定的密钥验证这个签名,只有验证通过的请求才处理,否则直接返回403
这种方式不受VPC配置的影响,即使未来架构调整也能保持访问控制,适合作为防火墙的补充手段。
四、关于KCE(推测是GKE)的选择
如果你的业务复杂度很高,需要更灵活的服务网格、流量治理能力,迁移到GKE确实是一个选项,比如用Istio来实现服务间的访问控制。但如果当前GAE架构能满足需求,没必要特意迁移——调整防火墙规则就能解决问题,成本更低。
内容的提问来源于stack exchange,提问作者gvo
相关产品推荐
相关产品推荐

