コンテンツにスキップ
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-HeadlessBotresponseCodeSent: 402を確認。支払いも停止もない場合はBlockへ移行する方針。