无法为应用引擎设置特定的防火墙规则
Unable to set specific firewall rules for app-engines
我们在为 GCP 上的不同应用引擎服务设置正确的防火墙规则时遇到问题,因为这似乎不可能。
我们的问题非常简单:我们有一个默认的应用程序引擎服务,它应该可以公开访问并充当网关,而所有其他服务都只是内部服务,并且托管在同一个 GCP 项目中。
我们尝试在 VPC 防火墙部分设置自定义网络标签和规则,但所有这些都被应用引擎防火墙否决了。遗憾的是,最新版本不允许按服务配置。
你知道一个简单的方法吗?我们现在唯一的解决方案是将网关放在计算引擎或另一个 GCP 项目中..
鉴于您使用的是 App Engine Flexible,您可以通过更改 Network Settings in the app.yaml
configuration file 来设置服务 运行 所在的网络。在您的情况下,由于您有一组不想被访问的实例,并且有一个实例将充当网关,因此您可以执行以下操作:
Create two different networks,以及您认为方便的区域中的每个子网。同样,确保启用 Private Google access
,这样您就可以始终连接到 GCP API,而无需创建新的防火墙规则。您可以将子网 IP 地址范围设置为任何项目,只要它尚未在您的项目中使用即可,例如我使用 10.0.0.0/9
。 确保两个网络的子网区域相同。
在您不希望来自 GCP 外部的流量的网络中,create a firewall rule 到 deny 所有 ingress 网络流量。
在您的服务中配置 app.yaml
文件,添加:
network:
instance_tag: TAG_NAME
name: NETWORK_NAME
subnetwork_name: SUBNETWORK_NAME
您的网关实例应具有允许进入流量的网络的 NETWORK_NAME
和 SUBNETWORK_NAME
,而其余服务则为您创建先前防火墙规则的网络提供服务。 TAG_NAME
可以是你想给这台机器的任何标签,我建议你为两组服务中的每一个使用一个唯一的标签。
重新部署您的服务。
现在您应该只能发送流量作为网关的服务,而网关能够连接到其余服务,因为您在第一点启用了Private Google access
。
为了实现这一点,我花了很长时间搞乱防火墙设置和网络配置。具体来说:让一项服务充当网关,让其他服务只能从那里访问。
最后我浏览了应用引擎服务页面,发现那里有一个设置可以更改我的服务的入口...它实际上只是一个选项,我可能是个白痴,错过了它。
以下是对其进行解释的文档:
https://cloud.google.com/appengine/docs/standard/nodejs/application-security#ingress_controls
简而言之,只需将您的内部服务设置为仅供内部使用即可(除非我遗漏了什么)。
我们在为 GCP 上的不同应用引擎服务设置正确的防火墙规则时遇到问题,因为这似乎不可能。
我们的问题非常简单:我们有一个默认的应用程序引擎服务,它应该可以公开访问并充当网关,而所有其他服务都只是内部服务,并且托管在同一个 GCP 项目中。
我们尝试在 VPC 防火墙部分设置自定义网络标签和规则,但所有这些都被应用引擎防火墙否决了。遗憾的是,最新版本不允许按服务配置。
你知道一个简单的方法吗?我们现在唯一的解决方案是将网关放在计算引擎或另一个 GCP 项目中..
鉴于您使用的是 App Engine Flexible,您可以通过更改 Network Settings in the app.yaml
configuration file 来设置服务 运行 所在的网络。在您的情况下,由于您有一组不想被访问的实例,并且有一个实例将充当网关,因此您可以执行以下操作:
Create two different networks,以及您认为方便的区域中的每个子网。同样,确保启用
Private Google access
,这样您就可以始终连接到 GCP API,而无需创建新的防火墙规则。您可以将子网 IP 地址范围设置为任何项目,只要它尚未在您的项目中使用即可,例如我使用10.0.0.0/9
。 确保两个网络的子网区域相同。在您不希望来自 GCP 外部的流量的网络中,create a firewall rule 到 deny 所有 ingress 网络流量。
在您的服务中配置
app.yaml
文件,添加:network: instance_tag: TAG_NAME name: NETWORK_NAME subnetwork_name: SUBNETWORK_NAME
您的网关实例应具有允许进入流量的网络的
NETWORK_NAME
和SUBNETWORK_NAME
,而其余服务则为您创建先前防火墙规则的网络提供服务。TAG_NAME
可以是你想给这台机器的任何标签,我建议你为两组服务中的每一个使用一个唯一的标签。重新部署您的服务。
现在您应该只能发送流量作为网关的服务,而网关能够连接到其余服务,因为您在第一点启用了Private Google access
。
为了实现这一点,我花了很长时间搞乱防火墙设置和网络配置。具体来说:让一项服务充当网关,让其他服务只能从那里访问。
最后我浏览了应用引擎服务页面,发现那里有一个设置可以更改我的服务的入口...它实际上只是一个选项,我可能是个白痴,错过了它。
以下是对其进行解释的文档: https://cloud.google.com/appengine/docs/standard/nodejs/application-security#ingress_controls
简而言之,只需将您的内部服务设置为仅供内部使用即可(除非我遗漏了什么)。