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

How to properly configure VPC firewall for App Engine instances?

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

完成

我希望这些服务只能从网关(可能还有少数其他机器)访问,而不是从外部访问,但我无法让它工作。

我已经能够在给定的 VPC 网络上设置所有服务,向该网络中的 "Deny All traffic" 传入规则添加规则,但已标记并允许所有内容的网关除外。 (如本回复所述

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

我应该如何配置防火墙才能部署在 App Engine 上,并将对服务的访问限制为仅网关?这甚至可以使用 VPC 防火墙,还是我应该使用 KCE 实例或避免使用 GCP 基础设施和 sign/verify 自己请求?

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

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

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

经过进一步调查,目前在 GAE 中无法实现您想要的。

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

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

  • 正如您在问题中所说,您可以使用 Kubernetes。这是一个关于如何 deploy a containerized web application.

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