设置预配置的 WAF 规则

按照以下说明设置和调整 Cloud Armor 预配置的 Web 应用防火墙 (WAF) 规则,以帮助保护您的应用免遭攻击。如果您不熟悉预配置的 WAF 规则,请参阅概览

设置预配置的 WAF 规则

本部分提供了模板预配置的 WAF 规则,您可以将其复制到 Google Cloud 控制台中,并根据您的应用场景进行自定义。在每个示例 Google Cloud CLI 命令中,您都会配置一个名称为 POLICY_NAME 且优先级为 PRIORITY 的安全政策。

第一个示例设置了一个规则名称为 RULE_NAME 且敏感度级别为 SENSITIVITY 的规则,这会启用敏感度低于或等于 SENSITIVITY 的所有签名。如需详细了解规则敏感度,请参阅选择敏感度级别

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称
  • RULE_NAME:您要设置的 WAF 规则的名称
  • SENSITIVITY:WAF 规则的敏感度级别

第二个示例与第一个示例类似,但它会停用规则签名 SIGNATURE_1SIGNATURE_2。这意味着,在评估 WAF 规则时,系统不会评估这两个签名:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY, 'opt_out_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': SENSITIVITY, 'opt_out_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称
  • RULE_NAME:您要设置的 WAF 规则的名称
  • SENSITIVITY:WAF 规则的敏感度级别
  • SIGNATURE_1:您要选择停用的 WAF 特征签名的名称
  • SIGNATURE_2:您要选择停用的 WAF 特征签名的名称。

第三个示例与第二个示例类似,但您启用两个规则签名,而不是停用两个签名。请注意,只有将敏感度级别设置为 0 时,您才能启用规则签名:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': 0, 'opt_in_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('RULE_NAME', {'sensitivity': 0, 'opt_in_rule_ids': ['SIGNATURE_1', 'SIGNATURE_2']})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称
  • RULE_NAME:您要设置的 WAF 规则的名称
  • SIGNATURE_1:您要选择停用的 WAF 特征签名的名称
  • SIGNATURE_2:您要选择停用的 WAF 特征签名的名称

在前面的所有示例中,每个规则仅使用一个表达式。虽然您可以使用逻辑或 || 逻辑运算符组合表达式,但我们建议您遵循最佳实践,即每个规则仅使用一个表达式,以免超过表达式大小上限。

为预配置的 WAF 规则更新检查限制

Cloud Armor 预配置的 WAF 规则最多只能检查请求正文的前 64 kB 内容(可以是 8 kB、16 kB、32 kB、48 kB 或 64 kB)。您可以手动配置安全政策,以便为预配置的 WAF 规则使用其中一个检查限制。

以下命令使用 --request-body-inspection-size 标志将 POLICY_NAME 政策中所有可用的预配置 WAF 规则的检查限制设置为 8 kB。如需详细了解预配置的 WAF 规则的检查限制,请参阅 POST 和 PATCH 正文检查限制

gcloud compute security-policies update POLICY_NAME \
    --request-body-inspection-size = 8 kB

POLICY_NAME 替换为您要设置的安全政策的名称。

同样,您可以使用 --request-body-inspection-size 标志将 POLICY_NAME 政策中所有可用的预配置 WAF 规则的检查限制设置为 16 kB、32 kB、48 kB 或 64 kB。

缓解超出所配置检查限制的请求正文带来的风险

在 Cloud Armor 安全政策中评估预配置的 WAF 规则时,系统最多会检查请求正文的前 64 kB 内容(可以是 8 kB、16 kB、32 kB、48 kB 或 64 kB),以根据 WAF 规则进行特征签名匹配。

您可以在安全政策中创建规则来帮助确保没有未经检查的内容到达您的后端,从而缓解较大请求所带来的风险。例如,创建规则来拒绝请求正文大小超过配置的 8 kB(8192 字节)检查限制的流量。以下命令展示了如何创建此规则:

gcloud compute security-policies rules create 10 \
    --security-policy my-policy \
    --expression "int(request.headers['content-length']) > 8192" \
    --action deny-403 \
    --description "Block requests greater than 8 kB"

同样,您也可以创建规则来拒绝请求正文大小超过配置的 16 kB、32 kB、48 kB 或 64 kB 检查限制的流量。例如,以下命令展示了如何针对 64 kB(65536 字节)的检查限制创建此规则。

gcloud compute security-policies rules create 10 \
    --security-policy my-policy \
    --expression "int(request.headers['content-length']) > 65536" \
    --action deny-403 \
    --description "Block requests greater than 64 kB"

示例

本部分中的示例重点介绍了创建和调整预配置 WAF 规则的重要方面,包括敏感度级别和签名异常。在所有 gcloud CLI 示例命令中,您都会创建一个名称为 POLICY_NAME 且优先级为 PRIORITY 的安全政策。

创建给定敏感度级别的规则

在此示例中,您使用 sqli-v33-stable WAF 规则中敏感度级别低于 4 的所有特征签名。因此,您可以创建敏感度级别为 3 的规则,该规则包含敏感度级别低于或等于 3 的所有签名:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 3})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('sqli-v33-stable', {'sensitivity': 3})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称

创建规则以停用一个或多个签名

在此示例中,您使用 xss-v33-stable WAF 规则中敏感度级别为 1 和 2 的几乎所有特征签名,但您想排除会针对 JavaScript 全局变量进行检查的特征签名 owasp-crs-v030301-id941370-xss。因此,您可以创建敏感度级别为 2 的规则,并使用 opt_out_rule_ids 参数停用 owasp-crs-v030301-id941370-xss 签名:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss']})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称

如需从规则中排除两个或更多特征签名,请使用 opt_out_rule_ids 参数提供特征签名的英文逗号分隔列表,如下所示:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss', 'owasp-crs-v030301-id941380-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 2, 'opt_out_rule_ids': ['owasp-crs-v030301-id941370-xss', 'owasp-crs-v030301-id941380-xss']})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称

创建规则以启用一个或多个签名

此示例仅使用 xss-v33-stable WAF 规则中的特征签名 owasp-crs-v030001-id941150-xss。该签名用于检查是否存在不允许使用的 HTML 属性,敏感度级别为 2。因此,您需要创建敏感度级别为 0 的规则,并使用 opt_in_rule_ids 参数启用 owasp-crs-v030001-id941150-xss 签名。请注意,只有将敏感度级别设置为 0 时,才能启用规则签名:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss']})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称

如果您要在规则中包含两个或更多特征签名,请使用 opt_in_rule_ids 参数提供特征签名的英文逗号分隔列表,如下所示:

控制台

选择高级模式,然后在匹配字段中使用以下示例表达式:

evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss', 'owasp-crs-v030301-id941320-xss']})

gcloud

gcloud compute security-policies rules create PRIORITY \
    --security-policy POLICY_NAME  \
    --expression "evaluatePreconfiguredWaf('xss-v33-stable', {'sensitivity': 0, 'opt_in_rule_ids': ['owasp-crs-v030301-id941150-xss', 'owasp-crs-v030301-id941320-xss']})" \
    --action deny-403

替换以下内容:

  • PRIORITY:安全政策的优先级
  • POLICY_NAME:您要设置的安全政策的名称

后续步骤