使用请求日志记录

按要求记录 HTTP(S) 负载平衡的日志时,将记录 Google Cloud Armor 安全政策名称、匹配规则优先级、关联操作和相关信息日志。默认情况下,新后端服务的日志记录功能处于停用状态,因此您必须启用 HTTP(S) 负载平衡日志记录才能记录 Google Cloud Armor 的完整日志记录信息。

由于 Google Cloud Armor 日志是 Cloud Load Balancing 日志的一部分,因此 Google Cloud Armor 日志生成取决于为 HTTP(S) 负载平衡配置的日志采样率。如果降低外部 HTTP(S) 负载平衡器的采样率,则 Google Cloud Armor 请求日志会按该速率进行采样。

利用日志记录,您可以查看 Google Cloud Armor 安全政策评估的每个请求以及所采取的结果或操作。例如,如需查看拒绝的请求,您可以使用 jsonPayload.enforcedSecurityPolicy.outcome="DENY"jsonPayload.statusDetails="denied_by_security_policy" 等过滤条件。

如需启用日志记录,请参阅 HTTP(S) 负载平衡日志记录和监控

此外,您还可以设置不同的日志记录级别,以帮助评估安全政策及其规则是否按预期工作。如需了解完整信息,请参阅详细日志记录

安全政策日志条目

日志查看器中的以下日志条目适用于 Google Cloud Armor 安全政策和规则日志记录。这些条目包括 jsonPayload 中的以下结构。HTTP 请求详情会显示在 httpRequest 消息中。

  • statusDetails(字符串):响应代码的文本描述
    • redirected_by_security_policy:请求通过重定向规则进行重定向;GOOGLE_RECAPTCHAEXTERNAL_302
    • throttled_by_security_policy:请求被节流规则阻止
    • rate_based_banned_by_security_policy:请求被基于速率的黑名单规则屏蔽
    • denied_by_security_policy:请求因 Google Cloud Armor 安全政策被负载均衡器拒绝
    • body_denied_by_security_policy:负载均衡器因 Google Cloud Armor 安全政策拒绝了请求正文
  • enforcedSecurityPolicy:实施的安全政策规则
    • name(字符串):安全政策的名称
    • priority(数字):安全规则中匹配规则的优先级
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302 THROTTLE(对于节流规则)、RATE_BASED_BAN(对于基于速率的黑名单规则)
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENYREDIRECTTHROTTLERATE_BASED_BAN
    • preconfiguredExprIds(字符串):触发规则的所有预配置 WAF 规则表达式的 ID
  • previewSecurityPolicy:如果请求匹配一项配置的预览规则,则系统会填充此条目(此条目仅在预览规则优先于实施的规则时才会出现)
    • name(字符串):安全政策的名称
    • priority(数字):安全规则中匹配规则的优先级
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302 THROTTLE(对于节流规则)、RATE_BASED_BAN(对于基于速率的黑名单规则)
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENYREDIRECTTHROTTLERATE_BASED_BAN
    • preconfiguredExprIds(字符串):触发规则的所有预配置 WAF 规则表达式的 ID
  • enforcedEdgeSecurityPolicy预览版):已强制执行的边缘安全政策规则
    • name(字符串):安全政策的名称
    • priority(数字):安全规则中匹配规则的优先级
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENY
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENY
  • previewEdgeSecurityPolicy预览版):如果请求与针对预览配置的边缘安全政策规则(仅在预览规则优先于强制执行规则展示)匹配,则要填充
    • name(字符串):安全政策的名称
    • priority(数字):安全规则中匹配规则的优先级
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENY
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENY

详细日志记录

您可能很难判断为什么特定请求触发了预配置的 WAF 规则。Google Cloud Armor 的默认事件日志包含触发的规则以及子签名。但是,您可能需要从触发规则的传入请求中识别详细信息,以进行问题排查、验证规则或调整规则。

您可以使用 --log-level 标志更改政策记录的详细信息级别。此标志的值可以是 NORMALVERBOSE

--log-level=[NORMAL | VERBOSE]

例如:

gcloud compute security-policies update ca-policy-1 \
    --log-level=VERBOSE

我们建议您仅在首次创建政策、更改政策或排查政策问题时启用详细日志记录。

启用详细日志记录时记录的值

启用详细日志记录后,其他信息将记录到发送到 Cloud Logging 的 HTTP(S) 负载平衡请求日志中。启用详细日志记录后,请求日志中会显示以下附加字段:

  • matchedFieldType(字符串):导致匹配的字段类型。

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • 如果 BODY 字段在日志中,则表示整个邮件正文与规则匹配。
    • COOKIE_VALUES

    • COOKIE_NAMES

    • FILENAME

    • HEADER_VALUES

    • RAW_URI

    • REFERER

    • REQUEST_LINE

    • URI

    • USER_AGENT

    • HEADER_NAMES

    • ARGS_GET

    • X_FILENAME

    • ARG_NAME_COUNT

    • TRANSFER_ENCODING

    • REQUEST_METHOD

  • matchedFieldName(字符串):如果它与键值对的值部分匹配,则键值会存储在此字段中。否则,它为空。

  • matchedFieldValue(字符串):导致匹配的字段部分的前缀,最多 16 个字节。

  • matchedFieldLength(整数):字段的总长度。

  • matchedOffset(整数):导致匹配的字段的起始偏移量。

  • matchedLength(整数):对局长度。

例如,您可以将此请求发送到启用了 SQL 注入 WAF 规则的项目:

curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz

日志浏览器中的条目如下所示:

enforcedSecurityPolicy: {
 name: "user-staging-sec-policy"
 priority: 100
 configuredAction: "DENY"
 outcome: "DENY
 preconfiguredExprIds: [
   0: "owasp-crs-v030001-id942140-sqli"
  ]
matchedFieldType: "ARG_VALUES"
matchedFieldName: "sql_table"
matchedFieldValue: "pg_catalog"
matchedFieldLength: 18
matchedOffset: 4
matchedLength: 10
}

启用详细日志记录时维护隐私

在使用详细日志记录时,Google Cloud Armor 会记录来自触发特定预配置 WAF 规则的传入请求的元素的片段。这些代码段可能包含请求标头、请求参数或 POST 正文的元素。代码段可能包含敏感数据,例如传入请求中的 IP 地址或其他敏感数据,具体取决于请求标头或正文中的内容以及触发 WAF 规则的内容。

启用详细日志记录功能时,请注意,在 Logging 中可能会累积日志中的潜在敏感数据。我们建议您仅在规则创建和验证期间或进行问题排查时启用详细日志记录。在正常操作期间,我们建议您停用详细日志记录。

查看日志

您只能在 Google Cloud Console 中查看 Google Cloud Armor 安全政策的日志。

控制台

  1. 在 Google Cloud Console 中,转到网络安全页面。

    转到“网络安全”

  2. 安全政策页面的安全政策行中,点击要查看其日志的政策的菜单

  3. 选择查看日志

聊天机器人管理

为了方便您了解 Google Cloud Armor 如何评估 reCAPTCHA Enterprise 令牌,jsonPayload 提供了以下附加字段:

  • securityPolicyRequestData:安全政策处理请求时与请求相关的数据,无论最终匹配的是哪个规则。
    • recaptchaToken:与 reCAPTCHA Enterprise 令牌(action-token 或 session-token)相关的数据。
      • score (float):嵌入到 reCAPTCHA Enterprise 令牌中的用户合法性得分。仅当请求附加了 reCAPTCHA Enterprise 令牌并且令牌正确解码时,此字段才会显示。仅当存在基于 reCAPTCHA 企业令牌的规则时,Google Cloud Armor 才会尝试解码令牌。如需了解详情,请参阅强制执行 reCAPTCHA Enterprise 评估

日志示例

以下是阻止请求的节流规则的日志详情示例:

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "THROTTLE"
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "throttled_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

以下是阻止请求的基于速率的黑名单规则的日志详情示例:

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "RATE_BASED_BAN"
  configuredAction: "RATE_BASED_BAN"
 }
 statusDetails: "rate_based_banned_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

后续步骤

了解如何排查 Google Cloud Armor 问题