-- 抽出クエリ select httprequest.clientip, count(*) as requestcount from waflog2022032506 where httprequest.uri like '%customer%' and httprequest.country <> 'JP' group by httprequest.clientip order by requestcount desc; SQLで記述できるため • WHERE句での絞り込み ◦ URIのlike検索 ◦ COUNTRYでの絞込み • GROUP BY句での集計 ◦ アクセス回数の集計 ◦ HAVINGによる条件 など、様々な方法で分析可能 AWS Athenaの簡単な紹介
• アクセス数上位10ユーザー を対象 • [/item/]を含むURIへのアク セスが、それ以外より多い ユーザーを抽出 select ip_address from ( select httprequest.clientIp as ip_address, count(*) as access_sum, sum(case when httprequest.uri like '%/item/%' then 1 else 0 end) as item_sum, sum(case when httprequest.uri not like '%/item/%' then 1 else 0 end) as other_sum from waflog_temp group by httprequest.clientIp order by count(*) desc limit 10 ) where item_sum > other_sum; アクセスするURIの詳細から不審なIPアドレスを検知してブロック
• [NoUserAgent_HEADER] ルールによってブロックされ たIPアドレス • その回数が3回以上 IPアドレスごと止めるのに有 効 select httprequest.clientip from waflog_temp, UNNEST(ruleGroupList) t(groupList) where action = 'BLOCK' and groupList.terminatingRule.ruleId = 'NoUserAgent_HEADER' group by httprequest.clientip,groupList.terminatingRule.ruleId having count(*) > 3 order by count(*) desc limit 100; マネージドルールでBLOCKされたIPアドレスを永続ブロック