外部应用负载均衡器和外部代理网络负载均衡器日志记录功能会在每个请求的 Google Cloud Armor 日志中记录安全政策名称、匹配规则优先级、关联操作和相关信息。默认情况下,新后端服务的日志记录处于停用状态,因此您必须启用日志记录才能记录 Cloud Armor 的完整日志记录信息。
Cloud Armor 日志是 Cloud Load Balancing 日志的一部分。这意味着 Cloud Armor 的日志生成取决于为负载均衡器配置的日志采样率。如果您降低负载均衡器的采样率,则 Cloud Armor 请求日志也会按降低后的速率采样。此外,如果您使用跨项目服务引用,则日志会在包含负载均衡器前端和网址映射的宿主项目或服务项目下生成。因此,我们建议前端项目中的管理员向后端项目中的管理员授予读取日志和指标的权限。
利用日志记录,您可以查看 Cloud Armor 安全政策评估的每个请求以及根据优先级最高的匹配规则所采取的结果或操作。例如,如需查看拒绝的请求,您可以使用 jsonPayload.enforcedSecurityPolicy.outcome="DENY" 或 jsonPayload.statusDetails="denied_by_security_policy" 等过滤条件。
此外,您还可以设置不同的日志记录级别,以帮助评估安全政策及其规则是否按预期工作。如需了解完整信息,请参阅详细日志记录。
安全政策日志条目
Logs Explorer 中的以下日志条目适用于 Cloud Armor 安全政策和规则日志记录。这些条目包括 jsonPayload 中的以下结构。HTTP 请求详情会显示在 httpRequest 消息中。
statusDetails:响应代码的文本描述。redirected_by_security_policy:请求通过重定向规则进行重定向;GOOGLE_RECAPTCHA或EXTERNAL_302。denied_by_security_policy:请求因 Cloud Armor 安全政策被负载均衡器拒绝。body_denied_by_security_policy:请求正文因 Cloud Armor 安全政策被负载均衡器拒绝。
enforcedSecurityPolicy:实施的安全政策规则。name:安全政策的名称。priority:安全规则中匹配规则的数字优先级。adaptiveProtection:自动部署的自动调节式保护规则的相关信息(如果适用)。autoDeployAlertId:自动调节式保护检测到的事件的提醒 ID。
configuredAction:匹配规则中已配置操作的名称,例如ALLOW、DENY、GOOGLE_RECAPTCHA、EXTERNAL_302THROTTLE(用于限流规则)、RATE_BASED_BAN(用于基于速率的禁止规则)。rateLimitAction:有关限流规则或基于速率的禁止规则匹配时的速率限制操作的信息。key:速率限制键值对(最多 36 个字节)。如果密钥类型为ALL,或者密钥类型为HTTP-HEADER或HTTP-COOKIE且请求中没有指定的标头或 Cookie,则省略此字段。outcome:可能的值如下所示:"RATE_LIMIT_THRESHOLD_CONFORM"(如果低于配置的速率限制阈值)。"RATE_LIMIT_THRESHOLD_EXCEED"(如果超过配置的速率限制阈值)。"BAN_THRESHOLD_EXCEED"(如果超过配置的禁止阈值)。
outcome:执行已配置操作的结果,例如ACCEPT、DENY、REDIRECT、EXEMPT。preconfiguredExprIds:触发规则的所有预配置 WAF 规则表达式的 ID。threatIntelligence:Google Threat Intelligence 中匹配的 IP 地址列表的相关信息(如果适用)。categories:匹配的 IP 地址列表名称。
addressGroup:匹配的地址组的相关信息(如果适用)。names:匹配的地址组名称。
previewSecurityPolicy:如果请求与配置为预览的规则匹配(仅当预览规则优先于强制执行的规则时才显示),则填充。name:安全政策的名称priority:安全规则中匹配规则的数字优先级。configuredAction:匹配规则中已配置操作的名称,例如ALLOW、DENY、GOOGLE_RECAPTCHA、EXTERNAL_302THROTTLE(用于限流规则)、RATE_BASED_BAN(用于基于速率的禁止规则)。rateLimitAction:有关限流规则或基于速率的禁止规则匹配时的速率限制操作的信息。key:速率限制键值对(最多 36 个字节)。如果密钥类型为ALL,或者密钥类型为HTTP-HEADER或HTTP-COOKIE且请求中没有指定的标头或 Cookie,则省略此字段。outcome:可能的值如下所示:"RATE_LIMIT_THRESHOLD_CONFORM"(如果低于配置的速率限制阈值)。"RATE_LIMIT_THRESHOLD_EXCEED"(如果超过配置的速率限制阈值)。"BAN_THRESHOLD_EXCEED"(如果超过配置的禁止阈值)。
outcome:执行已配置操作的结果,例如ACCEPT、DENY、REDIRECT、EXEMPT。preconfiguredExprIds:触发规则的所有预配置 WAF 规则表达式的 ID。threatIntelligence:Threat Intelligence 中匹配的 IP 地址列表的相关信息(如果适用)。categories:匹配的 IP 地址列表名称。
addressGroup:匹配的地址组的相关信息(如果适用)。names:匹配的地址组名称。
enforcedEdgeSecurityPolicy:已强制执行的边缘安全政策规则。name:安全政策的名称。priority:安全规则中匹配规则的优先级。configuredAction:匹配规则中已配置操作的名称,例如ALLOW、DENY。outcome:执行已配置操作的结果,例如ACCEPT、DENY。
previewEdgeSecurityPolicy:在请求与配置为预览的边缘安全政策规则匹配时进行填充。仅当预览规则优先于强制执行的规则时,才会显示previewEdgeSecurityPolicy日志条目。name:安全政策的名称。priority:安全规则中匹配规则的数字优先级。configuredAction:匹配规则中已配置操作的名称,例如ALLOW、DENY。outcome:执行已配置操作的结果,例如ACCEPT、DENY。
查看日志
您只能在Google Cloud 控制台中查看 Cloud Armor 安全政策的日志。
控制台
在 Google Cloud 控制台中,前往 Cloud Armor 政策。
点击 操作。
选择查看日志。
请求数据日志记录
与 Cloud Armor 搭配使用时,jsonPayload 具有以下额外字段:
securityPolicyRequestData:安全政策处理请求时与请求相关的数据,无论最终匹配的是哪个规则。recaptchaActionToken:与 reCAPTCHA 操作令牌相关的数据。score:嵌入到 reCAPTCHA 操作令牌中的用户合法性分数。仅当请求附加了 reCAPTCHA 操作令牌并且根据安全政策规则成功解码时,此字段才会显示。如需了解详情,请参阅强制执行 reCAPTCHA 评估。
recaptchaSessionToken:与 reCAPTCHA 会话令牌相关的数据。score:嵌入到 reCAPTCHA 会话令牌中的用户合法性分数。仅当请求附加了 reCAPTCHA 会话令牌并且根据安全政策规则成功解码时,此字段才会显示。
tlsJa4Fingerprint:在客户端使用HTTPS、HTTP/2或HTTP/3进行连接时为 JA4 TTL/SSL 指纹。仅当指纹可用且存在用于评估请求的安全政策时(无论安全政策中的表达式是否与请求匹配),此字段才会显示。tlsJa3Fingerprint:在客户端使用HTTPS、HTTP/2或HTTP/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"
后续步骤
- 了解如何排查 Cloud Armor 问题。