Dev Classmethod Jp Aws Waf Monetize 402
累計1,500万リクエストの大量ボットにAWS WAF Monetizeで402 Payment Requiredを返してみた
- URL: https://dev.classmethod.jp/articles/aws-waf-monetize-402-large-scale-bot-15m-requests/
- 日付: 2026-06-16
- Tier: Tier 2
- 要旨: Chrome/114という2年以上前のバージョンを固定UAとし、同一JA3/JA4フィンガープリントで3IPから日次約87万リクエストを送りつけてくるボットに対し、AWS WAFのMonetize機能(402 Payment Required)をRateBasedルールと組み合わせて本番環境に適用した実録。
詳細
dev.classmethod.jp本番環境(CloudFront+WAF)で5月末から検知していたUA偽装ボット。3IPが均等に分散して日次総量がほぼ固定(0.3%以下の振れ幅)、JA3/JA4が全IP共通というパターンからレート固定の自動化アクセスと判定した。
Block/Challengeを選ばなかった理由として、JSアセット取得が確認されていたためJSチャレンジを突破するリスクがあること、IPアドレスの保有者が有名SaaS企業でありBlock前に接触・確認をしたかったこと、の2点を挙げている。
実装は二段構成。RateBasedルール(60秒/100リクエスト、Count)でラベルを付与し、そのラベルに一致するMonetizeルールが402を返す。このためMonetizeはRateBasedに直接指定できないという制約を迂回している。PriceMultiplier:10で1リクエスト0.01USDCの価格提示。今回はTESTモード/Base Sepoliaテストネットでの適用で実課金ではない。
WAFログでterminatingRuleId: Monetize-HeadlessBot、responseCodeSent: 402を確認。支払いも停止もない場合はBlockへ移行する方針。