【问题标题】:Unable to set specific firewall rules for app-engines无法为应用引擎设置特定的防火墙规则
【发布时间】:2019-01-28 09:31:47
【问题描述】:

我们在为 GCP 上的不同应用引擎服务设置正确的防火墙规则时遇到问题,因为这似乎是不可能的。

我们的问题很简单:我们有一个默认的应用程序引擎服务,它应该可以公开访问并充当网关,而所有其他服务都只是内部的,并且托管在同一个 GCP 项目上。

我们尝试在 VPC 防火墙部分设置自定义网络标签和规则,但所有这些都被应用引擎防火墙否决了。遗憾的是,最新版本不允许每个服务配置。

您知道一个简单的方法吗?目前我们唯一的解决方案是将网关放在计算引擎或另一个 GCP 项目中。

【问题讨论】:

  • 您的应用程序是在 App Engine 标准版还是灵活版中运行?
  • 大部分都在 flex env 中,默认情况下(python 3.6)

标签: google-app-engine google-cloud-platform firewall


【解决方案1】:

鉴于您使用的是 App Engine Flexible,您可以通过更改 Network Settings in the app.yaml configuration file 来设置运行服务的网络。在您的情况下,由于您有一组您不想被访问的实例,以及一个将充当网关的实例,您可以执行以下操作:

  1. Create two different networks,以及您认为方便的区域中的每个人的子网。同样,确保启用Private Google access,这样您就可以始终连接到 GCP API,而无需创建新的防火墙规则。您可以将子网 IP 地址范围设置为任何项目,只要它尚未在您的项目中使用,例如,我使用了 10.0.0.0/9确保两个网络的子网区域相同。

  2. 在您不希望来自 GCP 外部的流量的网络中,create a firewall rule拒绝所有进入网络流量。

  3. 在您的服务中配置app.yaml 文件,添加:

    network:
      instance_tag: TAG_NAME
      name: NETWORK_NAME
      subnetwork_name: SUBNETWORK_NAME
    

    您的网关实例应该有网络的NETWORK_NAMESUBNETWORK_NAME 允许入口流量,而其余的服务网络是您创建先前防火墙规则的网络。 TAG_NAME 可以是你想给这台机器的任何标签,我建议你为两组服务中的每一个使用一个唯一的标签。

  4. 重新部署您的服务。

现在您应该能够只发送充当网关的服务,而网关能够连接到其余服务,因为您在第一点启用了Private Google access

【讨论】:

  • 与其创建两个网络,不如只创建一个网络并使用instance_tag制定规则?
  • 为什么我们需要“确保两个网络的子网区域相同?”
【解决方案2】:

我花了很长时间弄乱防火墙设置和网络配置来实现这一点。具体来说:让一个服务充当网关,而其他服务只能从那里访问。

最终,我浏览了应用引擎服务页面,并在其中找到了一个设置来更改我的服务的入口...这实际上只是一个选项,我可能是一个错过它的白痴。

以下是解释它的文档: https://cloud.google.com/appengine/docs/standard/nodejs/application-security#ingress_controls

简而言之,只需将您的内部服务设置为仅限内部即可(除非我遗漏了什么)。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2016-01-22
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多