📚

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