【问题标题】:How to properly configure VPC firewall for App Engine instances?如何为 App Engine 实例正确配置 VPC 防火墙?
【发布时间】:2019-01-30 14:12:37
【问题描述】:

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

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

完成后here

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

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

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

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

【问题讨论】:

  • 您是否尝试从 Google Cloud Shell 运行 gcloud app deploy
  • 我是从终端运行的,去掉VPC规则后效果很好,放回去就不行了。
  • 您可以部署到您的网关实例,但在尝试部署到其他服务时出现错误?
  • 对,因为我的 GW 可以访问,所以它也可以正常部署,但是无法部署其他应用程序,除非我删除 VPC 上的“拒绝”规则。

标签: google-app-engine firewall vpc


【解决方案1】:

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

您可能想尝试以下一些可能的解决方法:

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

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

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

【讨论】:

  • 感谢您的回答,届时我们可能会迁移到 Kubernetes。是否有我们支持请求此功能的地方?它看起来不像是一种奇特的架构模式,因此 Google 将来支持它可能会很有趣。
  • 您可以在此link 的公共问题跟踪器中提出功能请求,但已经有与此here 相关的内容的请求
【解决方案2】:

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

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

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

【讨论】:

  • 好吧,如果我可以为网关(也就是我的 App Engine 的默认服务)设置一个专用的防火墙规则,那就可以了,但事实并非如此。有了你的提议,网关也将无法访问。
  • 这也是我们的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2017-02-05
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多