【目次】
- はじめに
 - AWS WAF の基本構造
 - AWS WAF で Web Application を防御するには
 - AWS WAF で許可または拒否可能なリクエスト
 - AWS WAF でのブロック実現方法
 - おわりに
 
■ はじめに
これまでのブログでは主に具体的な利用方法の説明をしてきましたが、高度な利用をするためには仕組みの理解が大切です。 AWS WAF の基本構造から、攻撃を遮断する為の Condition や Filter の使い方まで、3回に分けてご紹介していきます。
 
第1回:AWS WAF 「基本構造編」(本記事)
第2回:AWS WAF 「Condition と Filter の関係性」
第3回:AWS WAF 「String and regex matching の仕組みと活用例」
 
■ AWS WAF の基本構造
まずは AWS WAF の全体像を見てみましょう。
AWS WAF は以下の図のような構造となっています。
 
<AWS WAF の構造図>

<AWS WAF>
- AWS が提供する Web Application Fiirewall
 - L7(HTTP/HTTPS) アプリケーション層の防御
 - Web ACL によりアクセスの制限を実現
 - SQL Injection や XSS, アプリケーション固有の攻撃に対応
<Web ACL> - ウェブアクセスコントロールリストで Rules を紐づける
 - 1つの Web ACL に適用可能な Rule は10個まで
 - CloudFront, ALB, API Gateway に Web ACL を関連付けして利用
<Rules> - 具体的な条件を指定する Conditions を紐付け管理する
 - 1つのRuleに適用可能な Condition は10個まで
<Conditions> - 防ぎたい攻撃の条件を具体的に定義する
 - SQL Injection や XSS の Condition が用意されている
 - アプリケーション固有の攻撃に対応する場合は独自の条件を記述する
■ AWS WAF で Web Application を防御するには
次の手順を踏むことで AWS WAF で
1. アクセス制御の目的に合わせて Condition を作成
2. 作成した Condition を含む Rule を作成
3. 作成した Rule を適用するための Web ACL を作成
4. 作成した Rule を Web ACL に適用
5. Web ACL を CloudFront, ALB, API Gateway のいずれかに適用
本エントリでは概要レベルの紹介になるため、各要素の入れ子関係をイメージできれば理解度は十分です。
■ AWS WAF で許可または拒否可能なリクエスト
AWS WAF では以下の種類のリクエストを許可または拒否することができます。
AWS WAF では、1 Web ACL に設定できるルール数には限りがあるためサイトの用途に応じて適切に選択することが重要です。
制限については、こちらのAWS WAF の制限を参照してください。
 - 送信元 IP アドレスが、特定の IP アドレスまたは IP アドレス範囲
 - 送信元 IP アドレスが、特定の国
 - リクエストの特定の部分の文字列マッチング(正規表現可)
 - 指定した長さを超えている
 - SQLインジェクションやクロスサイトスクリプトが含まれている
■ AWS WAF でのブロック実現方法
具体的なブロックの実現方法は過去のブログ記事をご参照ください。
・AWS WAF で SQL Injection をブロックしてみる
https://www.wafcharm.com/jp/blog/block-sql-injection-jp/
・AWS WAF で URI に特定の文字列が含まれるリクエストをブロックする
https://www.wafcharm.com/jp/blog/block-specific-string-in-uri-jp/
・AWS WAF で特定の IP アドレスからの攻撃をブロックする
https://www.wafcharm.com/jp/blog/aws-waf-block-specific-ip-jp/
■ おわりに
AWS WAF の体系に関して理解できましたでしょうか。
次回では攻撃を防ぐための根幹部分である Condition と Filter に焦点を当てて、AWS WAF の仕組みをご説明していきます。
 

