📚
ALBのログのアクセス元がCloudFrontだけであることをログから検証する方法
前提
Application Load Balancer ログをクエリする - Amazon Athena
の方式でathenaテーブルを作成している。
概要
次のコマンドからcloudfrontの全CIDRを列挙する (ちなchatgptの言うとおりにやっただけなので絞り込みが正しいかは未検証)
curl -O https://ip-ranges.amazonaws.com/ip-ranges.json
jq '.prefixes[] | select(.service=="CLOUDFRONT") | .ip_prefix' ip-ranges.json
上記の結果から次のようなクエリを作成して実行
SELECT
*
FROM "log_alb"."abc"
where not (
contains('120.52.22.96/27', CAST(client_ip AS IPADDRESS))
OR contains('205.251.249.0/24', CAST(client_ip AS IPADDRESS))
OR contains('180.163.57.128/26', CAST(client_ip AS IPADDRESS))
... (100行以上続く)
OR contains('44.234.90.252/30', CAST(client_ip AS IPADDRESS))
)
limit 100;
実例
CloudFront以外からのアクセスをリクエストのホスト名をカウントして表示するSQLは以下
with t1 as
(
SELECT
*
FROM "log_alb"."abc"
where
day = '2025/06/16'
and not (
contains('120.52.22.96/27', CAST(client_ip AS IPADDRESS))
OR contains('205.251.249.0/24', CAST(client_ip AS IPADDRESS))
OR contains('180.163.57.128/26', CAST(client_ip AS IPADDRESS))
... (100行以上続く)
OR contains('44.234.90.252/30', CAST(client_ip AS IPADDRESS))
)
),
t2 as (
select domain_name, count(*) as c from t1 group by domain_name
)
select * from t2 order by c desc;
Discussion