使用请求日志记录

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

Google Cloud Armor 日志是 Cloud Load Balancing 日志的一部分。这意味着 Google Cloud Armor 的日志生成取决于为负载均衡器配置的日志采样率。如果您降低负载均衡器的采样率,则 Google Cloud Armor 请求日志也会按降低后的速率采样。此外,如果您使用跨项目服务引用,则日志会在包含负载均衡器前端和网址映射的宿主项目或服务项目下生成。因此,我们建议前端项目中的管理员向后端项目中的管理员授予读取日志和指标的权限。

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

如需为外部应用负载均衡器启用日志记录功能,请参阅外部应用负载均衡器日志记录和监控。对于外部代理网络负载均衡器,您可以使用前面的“外部应用负载均衡器日志记录和监控”页面中列出的 Google Cloud CLI 命令。您无法使用 Google Cloud 控制台为外部代理网络负载均衡器启用日志记录功能。

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

安全政策日志条目

日志浏览器中的以下日志条目适用于 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(数字):安全规则中匹配规则的优先级。
    • adaptiveProtection:自动部署的自动调节式保护规则的相关信息(如果适用)。
      • autoDeployAlertId:自动调节式保护检测到的事件的提醒 ID。
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302 THROTTLE(用于限流规则)、RATE_BASED_BAN(用于基于速率的禁止规则)。
    • rateLimitAction:有关限流规则或基于速率的禁止规则匹配时的速率限制操作的信息。
      • key(字符串):速率限制键值对(最多 36 个字节)。如果密钥类型为 ALL,或者密钥类型为 HTTP-HEADERHTTP-COOKIE 且请求中没有指定的标头或 Cookie,则省略此字段。
      • outcome(字符串):可能的值如下:
        • "RATE_LIMIT_THRESHOLD_CONFORM"(如果低于配置的速率限制阈值)。
        • "RATE_LIMIT_THRESHOLD_EXCEED"(如果超过配置的速率限制阈值)。
        • "BAN_THRESHOLD_EXCEED"(如果超过配置的禁止阈值)。
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENYREDIRECTEXEMPT
    • preconfiguredExprIds(字符串):触发规则的所有预配置 WAF 规则表达式的 ID。
    • threatIntelligence:与威胁情报中的匹配 IP 地址列表相关的信息(如果适用)。
      • categories:(字符串)匹配的 IP 地址列表名称。
  • previewSecurityPolicy:如果请求与配置为预览的规则匹配(仅当预览规则优先于强制执行的规则时才显示),则填充。
    • name(字符串):安全政策的名称。
    • priority(数字):安全规则中匹配规则的优先级。
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302 THROTTLE(用于限流规则)、RATE_BASED_BAN(用于基于速率的禁止规则)。
    • rateLimitAction:有关限流规则或基于速率的禁止规则匹配时的速率限制操作的信息。
      • key(字符串):速率限制键值对(最多 36 个字节)。如果密钥类型为 ALL,或者密钥类型为 HTTP-HEADERHTTP-COOKIE 且请求中没有指定的标头或 Cookie,则省略此字段。
      • outcome(字符串):可能的值如下:
        • "RATE_LIMIT_THRESHOLD_CONFORM"(如果低于配置的速率限制阈值)。
        • "RATE_LIMIT_THRESHOLD_EXCEED"(如果超过配置的速率限制阈值)。
        • "BAN_THRESHOLD_EXCEED"(如果超过配置的禁止阈值)。
    • outcome(字符串):执行已配置操作的结果。
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENYREDIRECTEXEMPT
    • preconfiguredExprIds(字符串):触发规则的所有预配置 WAF 规则表达式的 ID。
    • threatIntelligence:与威胁情报中的匹配 IP 地址列表相关的信息(如果适用)。
      • categories:(字符串)匹配的 IP 地址列表名称。
  • enforcedEdgeSecurityPolicy预览版):已强制执行的边缘安全政策规则。
    • name(字符串):安全政策的名称。
    • priority(数字):安全规则中匹配规则的优先级。
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENY
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENY
  • previewEdgeSecurityPolicy预览版):如果请求与配置为预览的边缘安全政策规则匹配(仅当预览规则优先于强制执行的规则时显示),则填充。
    • name(字符串):安全政策的名称。
    • priority(数字):安全规则中匹配规则的优先级。
    • configuredAction(字符串):匹配规则中已配置操作的名称,例如 ALLOWDENY
    • outcome(字符串):执行已配置操作的结果,例如 ACCEPTDENY

查看日志

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

控制台

  1. 在 Google Cloud 控制台中,转到 Google Cloud Armor 政策

    转到“Google Cloud Armor 政策”

  2. 点击 操作

  3. 选择查看日志

请求数据日志记录

与 Google Cloud Armor 搭配使用时,jsonPayload 具有以下额外字段:

  • securityPolicyRequestData:安全政策处理请求时与请求相关的数据,无论最终匹配的是哪个规则。
    • recaptchaActionToken:与 reCAPTCHA 操作令牌相关的数据。
      • score (float):嵌入到 reCAPTCHA 操作令牌中的用户合法性分数。仅当请求附加了 reCAPTCHA 操作令牌并且根据安全政策规则成功解码时,此条目才会显示。如需了解详情,请参阅强制执行 reCAPTCHA 评估
    • recaptchaSessionToken:与 reCAPTCHA 会话令牌相关的数据。
      • score (float):嵌入到 reCAPTCHA 会话令牌中的用户合法性分数。仅当请求附加了 reCAPTCHA 会话令牌并且根据安全政策规则成功解码时,此条目才会显示。
    • tlsJa3Fingerprint:如果客户端使用 HTTPSHTTP/2HTTP/3 进行连接,则为 JA3 TTL/SSL 指纹。仅当有可用的指纹且存在用于评估请求的安全政策时才会显示(无论政策中的表达式是否与请求匹配)。

日志示例

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

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 问题