调整安全政策规则

您可以通过从评估中排除请求字段来调整规则,以减少假正例。

为规则配置排除项时,您可以从检查中排除以下字段:

从规则评估中排除请求字段

如需为规则配置请求字段排除项,请将配置与安全政策规则相关联。

这些规则不使用规则 ID。不过,您可以使用以下某个值配置 --target-rule-set 标志:

  • cel (--target-rule-set "cel"):仅将排除项应用于该安全政策规则中的自定义 CEL 规则。
  • *(--target-rule-set "*",全局排除):将排除规则应用于附加到该安全政策的所有规则,包括自定义 CEL 规则和使用 evaluatePreconfiguredWaf() 的规则。

在后端安全政策(全球和区域级)中,您可以为每个目标(cel 或 *)配置最多 100 个以下各项:

  • 请求标头
  • 请求 Cookie
  • 请求查询参数
  • 请求 URI
  • 请求正文

可用的字段运算符如下:

  • EQUALS:如果字段值等于指定值,则匹配。
  • STARTS_WITH:如果字段值以指定值开头,则匹配。
  • ENDS_WITH:如果字段值以指定值结尾,则匹配。
  • CONTAINS:如果字段值包含指定值,则匹配。
  • EQUALS_ANY:如果字段值为任何值,则匹配。

请求标头

您可以在排除字段中使用特定请求标头的标头名称,从而在规则评估期间将其从检查中排除。

当请求标头与排除项匹配时,系统会在规则评估之前从 request.headers 映射中移除整个标头条目(包括其名称和值)。

示例

以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除以 abc 开头或以 xyz 结尾的请求标头:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc" \
    --request-header-to-exclude "op=ENDS_WITH,val=xyz"

替换以下内容:

  • PRIORITY:规则的优先级
  • POLICY_NAME:安全政策的名称

请求 Cookie

您可以在排除字段中使用 Cookie 名称,在规则评估期间从检查中排除特定请求 Cookie。

当请求 Cookie 与排除项匹配时,整个 Cookie 条目(包括其名称和值)都会在规则评估之前从请求属性中排除。

示例

以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除以 session_ 开头的请求 Cookie:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-cookie-to-exclude "op=STARTS_WITH,val=session_"

替换以下内容:

  • PRIORITY:规则的优先级
  • POLICY_NAME:安全政策的名称

请求查询参数

您可以在排除字段中使用特定请求参数的参数名称,以便在规则评估期间从检查中排除这些参数。--request-query-param-to-exclude 标志同时适用于网址查询参数和解析的请求正文参数(JSON、表单数据和 GraphQL)。

当参数与排除项匹配时,整个参数条目(包括其键和值)都会在规则评估之前从 request.params 中移除,因此 has(request.params.param_name) 的评估结果为 false。

对于已解析的请求正文,您可以使用点表示法来定位嵌套字段和数组项:

  • 顶级字段:val=user
  • 嵌套字段:val=user.name
  • 数组项:val=items.0.name

示例

以下示例更新了位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除网址查询参数 bad-param、嵌套 JSON 字段 user.name 和 JSON 数组项字段 items.0.name:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-query-param-to-exclude "op=EQUALS,val=bad-param" \
    --request-query-param-to-exclude "op=EQUALS,val=user.name" \
    --request-query-param-to-exclude "op=EQUALS,val=items.0.name"

替换以下内容:

  • PRIORITY:规则的优先级
  • POLICY_NAME:安全政策的名称

请求 URI

您可以在规则评估期间从检查中排除请求行中的 URI(不包括查询字符串数据)。

排除 URI 时,整个 URI 字段都会从检查中排除。

示例

以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除包含 /bad-path 的请求 URI:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-uri-to-exclude "op=CONTAINS,val=/bad-path"

替换以下内容:

  • PRIORITY:规则的优先级
  • POLICY_NAME:安全政策的名称

请求正文

您可以在规则评估期间从检查中排除特定请求正文值。

当请求正文与排除项匹配时,request.body 属性会从规则评估中排除。

示例

以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中排除包含 bad-body-value 的请求正文:

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-body-to-exclude "op=CONTAINS,val=bad-body-value"

替换以下内容:

  • PRIORITY:规则的优先级
  • POLICY_NAME:安全政策的名称

字段值

如果您使用的字段运算符不是 EQUALS_ANY,则必须指定字段值。

对于请求标头、请求 Cookie 和请求查询参数,字段值允许使用的字符集包括以下字符:

  • !、#、$、%、&、*、+、-、.、^、_、`、|、~
  • 字母字符 A 到 Z(包括大写和小写)
  • 数字字符 0 到 9

对于请求正文,字段值的允许字符集包括除 '、\`,(, and)` 之外的所有可打印 ASCII 字符:

  • 空格 () 和特殊字符:!、"、#、$、%、&、*、+、,、-、.、/、:、;、<、=、>、?、@、[、]、^、_、`、{、|、}、~
  • 字母字符 A 到 Z(包括大写和小写)
  • 数字字符 0 到 9

对这些请求字段应用排除项时,系统会将已配置的字段值 (val=) 与以下内容进行不区分大小写的比较(转换后),以确定要从检查中排除哪些实体:

  • 请求标头:与标头名称(键)匹配,以排除整个标头(名称和值)。
  • 请求 Cookie:与 Cookie 名称匹配,以排除整个 Cookie(名称和值)。
  • 请求查询参数:与参数名称或嵌套 JSON 路径(键)匹配,以排除整个参数(键和值)。
  • 请求正文:与请求正文内容字符串匹配,以排除整个 request.body 属性。

如果您想排除不在允许的字符集中的特定字符,则无需执行额外的编码。

对于请求 URI,字段值必须以 URI 格式提供,并遵循以下组件限制:

组件 限制
Scheme 允许,但仅限于 http 或 https
主机 允许(可以是 IP 地址)
端口 允许
路径 允许
查询 不允许
Fragment 不允许

对请求 URI 应用排除项时,系统会将已配置的字段值与请求行中的 URI(转换后不区分大小写)进行比较(不包括查询字符串)。请求行中的 URI 可以是相对的,也可以是绝对的。为请求 URI 配置排除项时,请考虑这一点。

移除排除对象

如需从安全政策规则中移除请求字段排除项,请使用 remove-preconfig-waf-exclusion 命令。您可以通过指定相应的字段排除标志来移除特定字段排除项,也可以省略字段标志来移除该目标规则集(cel 或 *)的所有排除项。

示例

以下示例更新位于 PRIORITY 的安全政策 POLICY_NAME 中的规则,以便从规则评估 (cel) 中移除以 abc 开头的请求标头的排除项:

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc"

以下示例省略了字段标志,以移除为 PRIORITY 处的规则配置的所有请求字段排除项 (cel):

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel"

替换以下内容:

  • PRIORITY:规则的优先级
  • POLICY_NAME:安全政策的名称