AWS WAFでカスタムルールを作成して細かく制御する方法
生徒
「先生、AWS WAFで細かい制御をしたいときにカスタムルールを作れると聞いたのですが、どういう仕組みなんですか?」
先生
「その通りです。AWS WAF(ワフ)はWeb Application Firewall(ウェブ アプリケーション ファイアウォール)の略で、カスタムルールを作成することで、自分のシステムに合った細かいアクセス制御ができますよ。」
生徒
「ブラックリストやホワイトリストだけでなく、もっと複雑な条件を作れるということですか?」
先生
「はい、そのとおりです。SQLインジェクション(エスキューエル インジェクション)やXSS(エックスエスエス)の対策はもちろん、ヘッダーやURIに応じた細かいルールを自由に設計できます。それでは、順を追って説明していきましょう。」
1. カスタムルールとは?
カスタムルールとは、AWS WAFで利用者自身が作成するオリジナルのルールのことです。標準で用意されているマネージドルールに加えて、自分のWebアプリケーションの特性に合わせた制御を追加できます。例えば「特定のパラメータに不審な文字列が含まれていたら拒否する」など、細かい条件を組み合わせられるのが特徴です。
この仕組みを使うことで、公開しているWebアプリケーションを攻撃や不正利用から効率的に守ることができます。
2. カスタムルールの基本構造
カスタムルールは大きく分けて「条件」と「アクション」で構成されます。
- 条件(読み方はジョウケン)…IPアドレス、HTTPヘッダー、URI、クエリ文字列などを指定
- アクション(読み方はアクション)…許可、ブロック、カウントなどの動作を設定
これらを組み合わせて、細かい動作を実現できます。条件を複数重ねることで、より厳密なセキュリティルールを構築できます。
3. カスタムルールで利用できる条件の種類
AWS WAFのカスタムルールでは、次のような条件を指定できます。
- IPアドレスや範囲による制御
- HTTPリクエストヘッダーの内容
- リクエストボディやクエリ文字列
- 特定のURIパターン
- 正規表現パターンを使った柔軟な条件
例えば「特定の国からのアクセスをブロック」「管理画面のURIにアクセスできるのは特定のIPのみ」といった制御が可能です。
4. アクションの設定方法
条件を設定したら、それに応じて実行するアクションを決めます。アクションには主に以下の種類があります。
- 許可(読み方はキョカ)…条件に一致するリクエストを許可する
- ブロック(読み方はブロック)…条件に一致するリクエストを拒否する
- カウント(読み方はカウント)…条件に一致するリクエストをログに記録するだけ
まずは「カウント」でルールをテストし、問題がなければ「ブロック」に切り替える運用が初心者にはおすすめです。
5. カスタムルール作成の流れ
カスタムルールを作成する手順は以下のようになります。
- IPセットや正規表現パターンセットを作成
- ルールを新規作成し、条件とアクションを設定
- WebACL(ウェブ アクセス コントロール リスト)にルールを追加
- 対象のリソース(CloudFrontやALBなど)にWebACLを関連付け
この流れを理解しておくことで、AWS WAFを柔軟に使いこなせるようになります。
6. 具体例:SQLインジェクション対策ルール
例えばSQLインジェクションを防ぐためのカスタムルールを作成することもできます。SQLインジェクションとは、データベースに不正なSQL(エスキューエル)文を注入する攻撃のことです。
AWS WAFでは、入力値に「SELECT」や「DROP」など危険なキーワードが含まれていた場合にブロックするルールを作成できます。これにより、Webアプリケーションの脆弱性を突かれるリスクを下げられます。
7. 具体例:XSS対策ルール
XSS(クロスサイトスクリプティング)は、悪意あるスクリプトをWebページに仕込む攻撃です。AWS WAFでは、カスタムルールで「script」タグや危険なJavaScriptコードが含まれている場合にブロックする制御が可能です。
このようにカスタムルールを利用すれば、標準のルールセットに加えて自社独自のセキュリティ要件を満たせます。
8. 初心者が押さえておくべきポイント
初心者はまず「ルールの作成は小さく始める」ことを意識しましょう。最初から複雑なルールを作るのではなく、特定のURI制御や単純なIP制御から始めると分かりやすいです。
さらに、ログやカウント機能を活用して、実際のアクセス状況を確認しながら徐々に制御を強化していくのがおすすめです。これにより、不必要にユーザーをブロックしてしまうリスクを避けられます。
まとめ
この記事では、AWS WAF(ワフ)でカスタムルールを作成し、Webアプリケーションをより細かく保護するための考え方と具体的な方法を詳しく整理しました。特に、カスタムルールの役割、条件やアクションの構成、そしてSQLインジェクションやXSSなどの攻撃に合わせた柔軟な対策方法を理解することで、セキュリティ設定の幅が大きく広がることが分かったと思います。AWS WAFはマネージドルールだけでも強力ですが、カスタムルールを組み合わせることで、より自社のWebアプリケーションに適した高精度なセキュリティ対策を実現できます。
カスタムルールは「条件」と「アクション」で構成され、条件にはIP制御、URIやヘッダーの検査、正規表現による柔軟なチェックなど、多彩な設定が可能でした。これにより、特定パターンへの防御だけでなく、自社サービス固有のリスクに合わせたきめ細やかなルール作成ができます。特に管理画面のアクセス制御、怪しいUA(ユーザーエージェント)のブロック、APIの悪用防止など、現場でよくある課題に非常に有効です。
また、ルールのアクションには「許可」「ブロック」「カウント」があり、実際の運用ではまずカウントで挙動を確認し、その後ブロックに変更する安全な手順が紹介されました。これは初心者だけでなく、現場のセキュリティ担当者にとっても重要な運用テクニックです。誤検知や過剰ブロックを避けつつ、段階的にセキュリティを強化することが可能になります。
以下に、記事の内容を踏まえたシンプルなカスタムルールのサンプルJSONを載せておきます。AWSの実際のGUI設定ではクリック操作が中心ですが、内部ではこのような構造で設定が保持されています。
{
"Name": "block-suspicious-uri",
"Priority": 5,
"Action": { "Block": {} },
"Statement": {
"ByteMatchStatement": {
"SearchString": "/admin",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [
{ "Priority": 0, "Type": "NONE" }
],
"PositionalConstraint": "STARTS_WITH"
}
}
}
この例では、URI の先頭に /admin を含むアクセスをブロックするシンプルなカスタムルールです。管理画面への不正アクセス対策としてよく利用されるパターンで、AWS WAFにおける条件・アクションの関係を理解しやすい例でもあります。
続いて、Linux コマンドでログを確認するようなイメージ例も載せておきます。実際のAWS WAFログはCloudWatch LogsかS3に出力されますが、学習用の参考として雰囲気が掴めます。
grep "BLOCK" waf-access.log
BLOCK 203.0.113.20 /admin/settings # 不正アクセスの拒否を記録
さらに、SQLインジェクション対策ルールやXSS対策ルールのポイントもおさらいしました。AWS WAFでは、SQL文の一部(SELECT、DROPなど)が含まれる場合を検知する「SQLiマッチ条件」、危険なスクリプトを検出する「XSSマッチ条件」が用意されているため、初心者でも強力な対策を簡単に導入できます。これらの機能とカスタムルールを組み合わせれば、多層的で強固な防御を実現できます。
最後に、初心者が特に意識すべきポイントとして、以下の点が挙げられます。
- カスタムルールは小さく始める(まずはIP制御やURI制御)
- アクションは「カウント」で挙動を確認してから「ブロック」に変更する
- 正規表現ルールは便利だが、過剰マッチに注意する
- WebACLに追加しないとルールは適用されない点を忘れない
- ログを分析しながら継続的にチューニングする運用が大切
生徒:「カスタムルールって最初は難しそうだと思っていたけど、条件とアクションの組み合わせだと考えると理解しやすいですね!」
先生:「その通りです。条件が“何を検査するか”、アクションが“どうするか”という流れを押さえると急に整理しやすくなるでしょう。」
生徒:「IP制限もURI制限もできて、SQLインジェクションやXSS対策にも使えるなんて、とても汎用性が高いですね。」
先生:「まさにそこがAWS WAFの強みです。マネージドルールを使いつつ、必要な部分だけカスタムルールを追加する柔軟さもあります。」
生徒:「まずはカウントで様子を見る運用も安心できていいですね。誤って正しいアクセスをブロックしないように調整できるのがありがたいです。」
先生:「ええ、ログを見ながら徐々に強化する方法は非常に実用的です。今回学んだ知識を活かして、あなたのWebアプリに最適な防御を構築していきましょう。」