はじめに
こんにちは。アイレットの日下です。
「AWSを使っているから、とりあえずWAFを入れておけば安心」 そう思っていませんか?
実は、AWS WAFは仕様を正しく理解して設定しきらないと、巧妙な攻撃をさらっとスルーしてしまう危うさがあります。
今回は、私が学んだなかで「これは怖いな」と感じた公式ドキュメントの行間に隠れた重要仕様と、それを踏まえた対応方法を共有します。
1. 見えない「8KBの壁」と、ステートレス防御の罠
AWS WAFを運用する上で、避けては通れない2つの大きな制約があります。ここを見落とすと、せっかくの防御が形骸化してしまいます。
① ALBでは「8KB」が絶対的な壁になる
意外と盲点なのが、ALB(Application Load Balancer)やAppSyncでWAFを使う場合、ボディ検査の制限が8KB(8,192バイト)で固定されている点です。CloudFrontなどとは違って、設定で増やすことができません。 もし攻撃者が、冒頭に8KB以上のダミーデータを詰め込んで、その後に攻撃コードを仕込んできたら? WAFは検査範囲外として、その攻撃を見逃してしまいます。

② 基本は「その場限り」の門番
AWS WAFは、一部の機能(レート制限など)を除いて基本的にはステートレスです。1つのリクエストだけで「白か黒か」を完結して判断するため、過去の通信の流れを汲み取ってはくれません。「1リクエスト完結型の門番」であることを前提にした設計が不可欠です。
2. 「攻めの守り」で、サービス停止リスクを最小限に
WAFを入れる真の価値は、ただ通信を遮断することではありません。
「何が起きているかを可視化し、サービスを止めずに防御を強化できる状態」を作ることこそが、理想の姿だと考えています。
- 誤検知を恐れず、果敢に新しいルールをテストできる。
- 攻撃の傾向を「ラベル」で数値化し、納得感のある根拠をチームに示せる。
- 意図的に壊されたリクエストすらも、手のひらで制御できる。
そんな環境を目指すための、アクションを紹介します。
3. 【具体的なアクション】現場で使うべき「プロの技」
A. 「オーバーサイズ処理」と「JSONフォールバック」を甘く見ない
8KBの制限や、意図的な構文エラーによる「すり抜け」を力技で防ぎます。
- オーバーサイズ処理: 基本は Match (Block) 一択です。「中身が全部見れないリクエストは、怪しいから通さない」というスタンスを基本にします。もちろん、画像アップロードなどでどうしても8KBを超えるパスがある場合、そこだけ優先度の高い許可ルールを別で作成します。
※添付画像では、本文(Body)で「8KBを超えたら中身を見ずに攻撃とみなしBlockする設定です。
- JSON解析のフォールバック: 攻撃者はWAFの解析をバグらせるために、わざとカンマを抜いた「壊れたJSON」を送ってくることがあります。解析エラー時の動作をデフォルトのままにせず、Evaluate as string(文字列として評価)や Match(ブロック) に設定することが、すり抜けを防ぐ方法です。
※添付画像の「無効な JSON 本文リクエストのアクション」を一致にし、アクションをBlockにすることで設定できます。

B. 「Count + ラベル」のコンボ
いきなりBlockにしてサービスを止めるのは、一番避けたいので「ラベル」を活用します。 まずは Count モードで導入し、マッチした通信に test:sqli-check のようなラベルを貼ります。しばらくログを観察し、一般ユーザーの通信が混じっていないかを確認してから Block に切り替えることが推奨です。
※添付画像は前述のルールをCountモードへの変更+ラベルの追加を行っています。


C. WCU(キャパシティ)の高度な最適化
Web ACLの容量(WCU)をやりくりするための、ちょっとしたコツです。
- 正規表現を避ける: 可能な限り「文字列一致」で済ませます。
- 変換処理を使い回す: 複数のルールで同じコンポーネント(URIパスなど)に「小文字化」などを適用する場合、WAF側で最適化が走り、WCUを節約できる場合があります。こうした内部仕様を意識するだけで、ルールの作り方が変わってきます。

4. まずは「今のリスク」を可視化することから
WAFの設定は100点満点をいきなり目指す必要はありません。
まずは、ルールを Countモード で有効にして、数週間分のログを確認してみてください。
そして「どのパスが狙われやすいのか」「どんなラベルが付いているのか」を知ることが、安全な運用への確実な第一歩になります。
まとめ:WAFは「育てていく」もの
今回お伝えしたかったポイントは3つです。
- 「8KB固定」の制約を理解し、パスベースの除外で穴を埋める。
- JSONフォールバック設定で、意図的なパースエラーを封じ込める。
- ラベルを使い倒して、安全かつ確実にルールを本番化する。
セキュリティの本質は、利便性を損なわずに、悪意だけをきれいに抜き取ること。そのためには、WAFを「盾」として放置せず、トラフィックに合わせて「育てていく」意識が大切です。
堅牢なAWS環境への第一歩を、今日から踏み出してみませんか?