如何为App Engine实例正确配置VPC防火墙?

时间:2019-01-30 14:12:37

标签: google-app-engine firewall vpc

我们正在尝试使用Google App引擎(主要是灵活实例)部署基于微服务的应用程序,该应用程序具有默认服务上的网关和一些提供业务逻辑的微服务。您可能会认为:

  • foo.appspot.com
  • service1.foo.appspot.com
  • service2.foo.appspot.com

完成后here

我希望只能从网关(可能还有其他几台机器)访问服务,而不能从外部访问,但是我无法使它正常工作。

我已经能够在给定的VPC网络上设置所有服务,向该网络中传入的“拒绝所有流量”添加一条规则,但带有标记并允许所有操作的网关除外。 (如该回复here中所述)

这适用于运行时,但是这样做时,我们无法使用gcloud app deploy进行部署。 (它挂在“更新服务”步骤上)。我尝试允许使用22端口,但似乎这不是正在使用的端口。我还尝试仅阻止80和443端口,但是现在可以再次从此外部访问App Engines service1和service2。

我应该如何配置防火墙使其能够在App Engine上进行部署,并限制仅对网关的服务访问?使用VPC防火墙甚至可以做到这一点,还是我应该使用KCE实例还是要避免使用GCP基础结构并亲自签署/验证请求?

2 个答案:

答案 0 :(得分:1)

经过进一步的调查,您现在想要的东西在GAE中是不可能的。

这里有一些可能的解决方法,您可能要尝试:

  • 使用Bastion VM。使用此选项,您将在Bastion VM中拥有默认服务的代码,然后将GAE flex与其他2个服务一起部署,并在其中设置GAE防火墙规则以仅允许与Bastion VM通信。 p>

  • 正如您在问题中所说,您可以使用Kubernetes。这是有关如何deploy a containerized web application的教程。

  • 最后,您可以使用标准的HTTP标头(例如X-Forwarded-For)来确定客户端的IP地址,从而对入站请求执行自己的验证。

答案 1 :(得分:0)

一种方法是使用App Engine Flexible的防火墙控件,该控件可用于在前端设置规则。

如果您拒绝对应用程序的所有访问(例如,仅更改为deny默认防火墙,如图中的shwon所示),则没有任何内容可以访问您的服务,并且您仍然可以部署应用程序在GAE中。然后,您只需要允许特定IP范围使用GAE中的其他防火墙规则来访问您的应用程序即可。

enter image description here

在这种情况下,您甚至都不需要拥有VPC并在那里创建防火墙规则。