在 CloudWatch Insight 中搜索 WAF 日志的键/值对

问题描述 投票:0回答:2

因此,AWS Cloudfront WAF 日志将发送到 AWS Cloud Insights。如何搜索 httpRequest 数组的键/值对的随机放置?

示例日志如下所示:

httpRequest.headers.0.name  host
httpRequest.headers.0.value www.somedomain.com
httpRequest.headers.1.name  cache-control
httpRequest.headers.1.value no-cache
httpRequest.headers.2.name  pragma
httpRequest.headers.2.value no-cache
httpRequest.headers.3.name  accept
httpRequest.headers.3.value */*
httpRequest.headers.4.name  accept-encoding
httpRequest.headers.4.value gzip, deflate
httpRequest.headers.5.name  from
httpRequest.headers.5.value bingbot(at)microsoft.com
httpRequest.headers.6.name  user-agent
httpRequest.headers.6.value Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)

因此,一个带有 2 个哈希值的 JSON 数组。该数组中的顺序是随机的。有时用户代理将在 1 或 3 或 X 中。如何搜索与“用户代理”的“名称”字段的值相对应的“值”字段的值?即:我想搜索“bingbot”,但让它特定于匹配“用户代理”。我知道我可以对@message进行过滤以获取

bingbot
,但这看起来很昂贵并且不具体/容易出现错误点击。

aws-cloudwatch-log-insights amazon-waf
2个回答
7
投票

好吧,所以我认为“最简单”的方法是将 @message 视为字符串并编写自己的解析规则,通过正则表达式将所需的值拉入您自己的列,然后您可以搜索/执行任何操作。

如果有人有更好的主意,我洗耳恭听。

fields @timestamp, @message
| parse @message /(?i)"name":"user-agent","value":"(?<httpRequestUserAgent>[^"]+)/
| filter action == "BLOCK"
| stats count() as httpRequestUserAgentCount by httpRequestUserAgent 
| sort by httpRequestUserAgentCount desc 

(?i) 将其标记为不区分大小写。


0
投票

AWS 提供:

fields @timestamp, @message
| parse @message '{"name":"User-Agent","value":"*"}' as userAgent
| stats count(*) as requestCount by userAgent
| sort requestCount desc
| limit 100
© www.soinside.com 2019 - 2024. All rights reserved.