创建 App Engine 防火墙规则

在 App Engine 中,您可以创建一个具有多达 1000 条独立优先规则的防火墙,从而允许或限制一系列 IP 地址和子网。您的应用将仅响应防火墙允许的请求。

如需了解 App Engine 防火墙的工作原理,请参阅了解防火墙

准备工作

在为应用创建 App Engine 防火墙规则之前,您必须具有以下任一 App Engine IAM 角色,这些角色拥有创建或修改防火墙规则所需的权限:

  • App Engine Admin
  • Editor
  • Owner

创建防火墙规则

请使用以下任一方法创建防火墙规则。每添加一条规则,都需要重复这些步骤:

控制台

使用控制台中的“防火墙规则”页面创建防火墙规则:

  1. 打开控制台中的“创建防火墙规则”页面:

    打开“创建防火墙规则”页面

  2. 指定防火墙规则的详细信息:

    1. 优先级中,输入一个整数以指定规则的相对重要性,并定义评估规则的顺序。

      有效值的范围介于 12147483646 之间。优先级为 1 的规则最先评估。优先级为 2147483647 的规则最后评估,此优先级保留给“default”规则使用。

    2. 对匹配项执行的操作中,指定是允许还是拒绝与规则匹配的请求进行访问。如果规则设置为 allow,则将请求转发给应用。如果规则设置为 deny,则返回 403 Forbidden 错误来响应请求。
    3. IP 范围中,定义该规则适用的 IP 地址范围。IP 地址范围必须以 CIDR 表示法定义,可以包含子网掩码并支持 IPv4 和 IPv6。
    4. 可选:在说明中,添加不超过 100 个字符的规则说明。
  3. 点击保存以创建规则。
  4. 测试规则,确保相应优先级和操作的行为符合预期:
    1. 点击测试 IP 地址
    2. 输入要验证的 IP 地址,然后点击测试,确保正确评估对应的规则。
gcloud

运行以下 gcloud app firewall-rules 命令以创建防火墙规则:

  1. 运行以下命令以创建防火墙规则:

    gcloud app firewall-rules create PRIORITY --action ALLOW_OR_DENY --source-range IP_RANGE --description DESCRIPTION
    其中:
    • PRIORITY12147483646 之间的整数,用于定义规则的重要性及其评估顺序。优先级为 1 的规则最先评估。优先级为 2147483647 的规则最后评估,此优先级保留给“default”规则使用。
    • ALLOW_OR_DENY 指定是允许还是拒绝与该规则匹配的请求进行访问。有效值为 allowdeny。如果规则设置为 allow,则将请求转发给应用。如果规则设置为 deny,则返回 403 Forbidden 错误来响应请求。
    • IP_RANGE 定义适用于该规则的 IP 地址范围。IP 地址范围必须以 CIDR 表示法定义,可以包含子网掩码并支持 IPv4 和 IPv6。
    • DESCRIPTION 是可选的规则说明,不能超过 100 个字符。
  2. 运行以下命令,以测试规则并确保相应优先级和操作的行为符合预期:
    gcloud app firewall-rules test-ip IP_ADDRESS
    其中,IP_ADDRESS 是您要针对防火墙规则测试的 IP 地址。
  3. 运行以下命令可查看现有规则的列表:
    gcloud app firewall-rules list
  4. 运行以下命令可删除现有规则:
    gcloud app firewall-rules delete PRIORITY
    其中,PRIORITY 是您要删除的规则的优先级值。
示例:
您可以参考以下示例创建防火墙:
  • 添加允许 IPv6 地址和子网掩码的规则,然后对其进行测试,以确保先于其他规则评估该规则:

    gcloud app firewall-rules create 123 --source-range fe80::3636:3bff:fecc:8778/128 --action allow
    gcloud app firewall-rules test-ip fe80::3636:3bff:fecc:8778
  • 添加拒绝 IPv4 地址和子网掩码的规则,然后对其进行测试,以确保适当评估该规则:

    gcloud app firewall-rules create 123456 --source-range "74.125.0.0/16" --action deny
    gcloud app firewall-rules test-ip 74.125.0.8
  • 更新默认规则,然后对其进行测试,以确保该规则限制与任何其他规则不匹配的所有 IP 地址:

    gcloud app firewall-rules update default --action deny
    gcloud app firewall-rules test-ip 123.456.7.89
API

如需以编程方式为 App Engine 应用创建防火墙规则,您可以使用 Admin API 中的 apps.firewall.ingressRules 方法。

如需测试防火墙规则并确保优先级和操作的行为符合预期,您可以使用 apps.firewall.ingressRules.list 方法,并在 matchingAddress 参数中指定要测试的 IP 地址。

了解 App Engine 防火墙规则

App Engine 防火墙包含一个有序的规则列表,可以允许或拒绝从指定的 IP 地址或范围访问您的应用。该规则适用于 App Engine 应用的所有资源。

防火墙规则优先级

防火墙规则按重要性进行排序,您通过为每条规则的优先级赋值来定义其重要性。必须为每条规则指定唯一的优先级值,因为该值定义了某条规则相对于防火墙中其他规则的重要性。规则的优先级值范围介于 1(最重要)到 2147483647(最不重要)之间。

每道防火墙都包含一条自动创建的 default 规则,该规则的优先级为 2147483647,并且适用于应用的整个 IP 范围。default 规则始终在防火墙中的所有其他规则之后进行评估,并且会应用于所有 IP 地址的所有请求。

防火墙会首先评估优先级最高的规则,然后按顺序评估防火墙中的其余规则,直到某条规则与相关请求的 IP 范围相匹配。系统在找到匹配的规则后,将允许或拒绝连接,然后跳过防火墙中的所有剩余规则。如果防火墙中手动定义的规则与请求均不匹配,则防火墙将评估 default 规则。

例如,如果您创建了一条优先级为 1 的规则,则防火墙将始终首先评估该规则。如果传入的请求与优先级为 1 的规则相匹配,则防火墙将仅评估该规则,并跳过防火墙中的所有其他规则,包括 default 规则。

下面的防火墙示例演示了规则的优先级会如何改变防火墙的行为。

防火墙示例

在此示例中,公司设置了防火墙,以授权工程团队和企业内部网络访问其正在开发的应用。防火墙规则已创建完毕,各个优先级之间具有较大的差距,以便今后能够灵活地增添其他规则。

优先级 操作 IP 范围 说明
1000 拒绝 192.0.2.1 拒绝向 DoS 攻击者授予访问权限。
2000 允许 198.51.100.2 允许向分支机构的工程师授予访问权限。
3000 拒绝 198.51.100.0/24 拒绝向所有非工程建筑授予访问权限。
5000 允许 203.0.113.0/24 允许向主建筑网络授予访问权限。
2147483647 拒绝 * 默认操作

创建防火墙后,假设向示例应用发出以下请求,请注意应用的响应:

  • 来自 198.51.100.2 的请求与优先级为 2000 的规则匹配,因此获得准许。
  • 来自 198.51.100.100 的请求与优先级为 3000 的规则匹配,因此遭到拒绝。
  • 来自 203.0.113.54 的请求与优先级为 5000 的规则匹配,因此获得准许。
  • 来自 45.123.35.242 的请求与默认规则匹配,因此遭到拒绝。

解决存在冲突的规则

例如,假设公司防火墙中的两个优先级发生了调换。如果调换优先级为 2000 和 3000 的规则,请注意会出现什么意外行为。

优先级 操作 IP 范围 说明
1000 拒绝 192.0.2.1 拒绝向 DoS 攻击者授予访问权限。
2000 拒绝 198.51.100.0/24 拒绝向所有非工程建筑授予访问权限。
3000 允许 198.51.100.2 允许向分支机构的工程师授予访问权限。
5000 允许 203.0.113.0/24 允许向主建筑网络授予访问权限。
2147483647 拒绝 * 默认操作

分支机构的工程师将无法访问该公司的应用,因为按照规则的新优先级,该规则永远得不到评估。工程师的 IP 地址 198.51.100.2 与拒绝 198.51.100.0/24 IP 地址范围内所有非工程师的规则相匹配,而允许工程师的 IP 地址访问的规则优先级低于此规则。

如需解决此问题,您必须将允许访问 198.51.100.2 的规则的优先级设置为高于拒绝访问 IP 范围 198.51.100.0/24 的规则。

后续步骤

为确保您安全地配置应用并设置适当的访问权限级别,请参阅应用安全访问权限控制