使用请求日志记录

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

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

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

如需为 HTTP(S) 负载均衡启用日志记录,请参阅 HTTP(S) 负载均衡日志记录和监控。 对于 TCP 代理负载均衡和 SSL 代理负载均衡,您可以使用前面的 HTTP(S) 负载均衡日志记录和监控页面中列出的 Google Cloud CLI 命令。您无法使用 Google Cloud Console 为 TCP 代理负载均衡和 SSL 代理负载均衡启用日志记录功能。

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

安全政策日志条目

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

  • statusDetails(字符串):响应代码的文本描述
    • redirected_by_security_policy:请求通过重定向规则进行重定向;GOOGLE_RECAPTCHAEXTERNAL_302
    • 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(用于基于速率的禁止规则)。
    • rateLimitAction:有关限流规则或基于速率的禁止规则匹配时的速率限制操作的信息。
      • key(字符串):速率限制键值对(最多 32 个字节)。如果密钥类型为 ALL,或者密钥类型为 HTTP-HEADERHTTP-COOKIE 且请求中没有指定的标头或 Cookie,则省略此字段。
      • outcome(字符串):可能的值如下:
        • "RATE_LIMIT_THRESHOLD_CONFORM"(如果低于配置的速率限制阈值)。
        • "RATE_LIMIT_THRESHOLD_EXCEED"(如果超过配置的速率限制阈值)。
        • "BAN_THRESHOLD_EXCEED"(如果超过配置的禁止阈值)。
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENYREDIRECTEXEMPT
    • preconfiguredExprIds(字符串):触发规则的所有预配置 WAF 规则表达式的 ID。
  • previewSecurityPolicy:如果请求与配置为预览的规则匹配(仅当预览规则优先于强制执行的规则时才显示),则填充。
    • name(字符串):安全政策的名称。
    • priority(数字):安全规则中匹配规则的优先级。
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302 THROTTLE(用于限流规则)、RATE_BASED_BAN(用于基于速率的禁止规则)。
    • rateLimitAction:有关限流规则或基于速率的禁止规则匹配时的速率限制操作的信息。
      • key(字符串):速率限制键值对(最多 32 个字节)。如果密钥类型为 ALL,或者密钥类型为 HTTP-HEADERHTTP-COOKIE 且请求中没有指定的标头或 Cookie,则省略此字段。
      • outcome(字符串):可能的值如下:
        • "RATE_LIMIT_THRESHOLD_CONFORM"(如果低于配置的速率限制阈值)。
        • "RATE_LIMIT_THRESHOLD_EXCEED"(如果超过配置的速率限制阈值)。
        • "BAN_THRESHOLD_EXCEED"(如果超过配置的禁止阈值)。
    • outcome(字符串):执行已配置操作的结果。
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENYREDIRECTEXEMPT
    • 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 的负载均衡请求日志中。启用详细日志记录后,请求日志中会显示以下附加字段:

  • 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:安全政策处理请求时与请求相关的数据,无论最终匹配的是哪个规则。
    • recaptchaActionToken:与 reCAPTCHA Enterprise 操作令牌相关的数据。
      • score (float):嵌入到 reCAPTCHA Enterprise 操作令牌中的用户合法性分数。仅当请求附加了 reCAPTCHA Enterprise 操作令牌并且根据安全政策规则成功解码时,此条目才会显示。如需了解详情,请参阅强制执行 reCAPTCHA Enterprise 评估
    • recaptchaSessionToken:与 reCAPTCHA Enterprise 会话令牌相关的数据。
      • score (float):嵌入到 reCAPTCHA Enterprise 会话令牌中的用户合法性分数。仅当请求附加了 reCAPTCHA Enterprise 会话令牌并且根据安全政策规则成功解码时,此条目才会显示。如需了解详情,请参阅强制执行 reCAPTCHA Enterprise 评估

日志示例

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

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "DENY"
  rateLimitAction: {
    key:"sample-key"
    outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
  }
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "denied_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: "DENY"
  configuredAction: "RATE_BASED_BAN"
  rateLimitAction: {
    key:"sample-key"
    outcome:"BAN_THRESHOLD_EXCEED"
  }
 }
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

后续步骤

了解如何排查 Google Cloud Armor 问题