我正在尝试使用 VPC 防火墙规则限制对具有多项服务的项目中的特定 App Engine Flex 服务的访问。我使用自动子网创建和全局动态路由创建了一个名为“vpc”的 VPC 网络。接下来,我使用以下 yaml 文件(名称略有更改)部署了我的应用程序:
runtime: custom
env: flex
service: someservice
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 4.0
disk_size_gb: 10
beta_settings:
cloud_sql_instances: cloud
network:
name: vpc
如您所见,我在 yaml 文件中指定了一个网络以在 vpc 中运行应用程序。然后,我在 VPC 中创建了两个防火墙规则,以仅允许访问特定 IP。我首先创建了一个名为“deny”的防火墙规则,以拒绝所有 IP 范围访问 vpc 网络:
gcloud compute firewall-rules create deny \
--network vpc \
--action deny \
--direction ingress \
--rules tcp \
--source-ranges 0.0.0.0/0 \
--priority 5000
最后,我创建了另一条名为“允许”的规则,以允许单个 IP 地址(例如 192.00.00.11):
gcloud compute firewall-rules create allow \
--network vpc \
--action allow \
--direction ingress \
--rules tcp \
--source-ranges 192.00.00.11 \
--priority 1000
但是,执行上述操作后,我仍然能够从我测试的几乎任何 IP 访问应用引擎服务(使用我手机的数据,并请朋友进行健全性检查)。我做错了什么?任何帮助都非常感谢!
答案1
我怀疑已经有一个更宽松的防火墙规则,或者优先级比你手动创建的“全部拒绝”更高。默认情况下,任何创建的防火墙规则的优先级都是 1000,防火墙规则优先级是 0 到 65535 之间的整数(含)。整数越小,优先级越高。如果在创建规则时未指定优先级,则该规则的优先级为 1000。优先级 1000 比优先级为 5000 的“全部拒绝”规则的优先级更高。
您至少有几个选项可以测试这一点:
一种方法是将“拒绝所有”规则设置为更高的优先级(例如 900),然后重新测试连接,根据需要增加“拒绝所有”优先级,这是一个容易实现但不是很好的选择。
第二,从云平台控制台中选择 VPC 网络 -> VPC 网络。单击/选择您正在使用的 VPC 的名称,然后选择“防火墙规则”选项卡。这将列出此 VPC 当前活动的所有防火墙规则。浏览列表并查找优先级更高(整数值更低)的规则,该规则比“拒绝所有”规则更宽松(甚至允许所有)。然后删除该规则或将优先级更改为低于“拒绝所有”规则的优先级。
答案2
根据文档,您的源范围必须采用 CIDR 格式,否则隐含 0.0.0.0 - 您的源地址不是采用 CIDR 表示法 --source-ranges 192.00.00.11 不是范围
abcd/32
或 abcd/255.255.255.255 - 取决于 glcoud 如何实现
刚刚看了一下,它的实现方式如下 --source-ranges 192.0.0.11/32