今回は、AWSが提供するWebアプリケーションファイアウォール「AWS WAF」について、分かりやすく解説していきます。
Webサイトやアプリケーションを運用する上で、セキュリティ対策は必須です。AWS WAFを正しく理解し、適切に設定することで、さまざまな脅威からあなたのシステムを守ることができます。
AWS WAFとは?基本概念を理解しよう
AWS WAF(Web Application Firewall)は、Webアプリケーションを狙った悪意のある攻撃からシステムを保護するためのセキュリティサービスです。インターネットからのHTTP/HTTPSリクエストを監視し、あらかじめ設定したルールに基づいて不正なトラフィックをブロックします。
従来のファイアウォールがネットワーク層での通信を制御するのに対し、AWS WAFはアプリケーション層(レイヤー7)で動作するため、より高度な攻撃パターンを検知できるのが特徴です。
AWS WAFの主な導入メリット
1. SQLインジェクションやXSS攻撃からの保護 データベースを不正に操作しようとするSQLインジェクションや、悪意のあるスクリプトを埋め込むクロスサイトスクリプティング(XSS)など、代表的なWeb攻撃を防ぐことができます。
2. 柔軟なルール設定 IPアドレス、HTTPヘッダー、リクエストボディ、URIパスなど、さまざまな条件に基づいてカスタムルールを作成できます。自社のアプリケーションに合わせた細かいセキュリティポリシーを実装可能です。
3. リアルタイムでの可視化 AWS CloudWatchと連携することで、ブロックしたリクエストや許可したトラフィックをリアルタイムで監視できます。攻撃の傾向を把握し、迅速な対応が可能になります。
4. 従量課金制で初期費用不要 月額固定費用ではなく、使った分だけ支払う従量課金制です。初期投資が不要で、小規模なサイトから大規模なシステムまで、予算に応じた導入が可能です。
5. マネージドルールの活用 AWSやセキュリティベンダーが提供する事前設定済みのルールセットを利用できます。専門知識がなくても、業界のベストプラクティスに基づいた保護を実現できます。
AWS WAFと他のセキュリティサービスの違い
AWSには複数のセキュリティサービスがあり、それぞれ役割が異なります。以下の表で主な違いを整理しました。
| サービス名 | 保護対象 | 動作層 | 主な用途 |
|---|---|---|---|
| AWS WAF | Webアプリケーション | レイヤー7(アプリケーション層) | SQLインジェクション、XSS、不正なHTTPリクエストのブロック |
| AWS Network Firewall | VPC内のネットワーク | レイヤー3-7 | ネットワークトラフィック全体の監視・制御、IDS/IPS機能 |
| AWS Shield | DDoS攻撃 | レイヤー3-7 | 大規模なDDoS攻撃からの保護(Standard版は自動適用) |
| Security Group | EC2インスタンスなど | レイヤー3-4(ネットワーク・トランスポート層) | IPアドレスとポート番号によるアクセス制御 |
このように、AWS WAFはWebアプリケーション特有の攻撃に特化したサービスです。包括的なセキュリティ対策を実現するには、これらのサービスを組み合わせて使用することが推奨されます。
重要:AWS WAF単体では使用できない
ここで初心者の方が特に注意すべきポイントがあります。AWS WAFは単体では動作せず、必ず他のAWSサービスと組み合わせて使用する必要があります。
AWS WAFを関連付けできる主なサービスは以下の通りです。
- Amazon CloudFront:グローバルなCDNサービス
- Application Load Balancer(ALB):HTTPSトラフィックの負荷分散
- Amazon API Gateway:RESTful APIやWebSocket APIの管理
- AWS AppSync:GraphQL APIのマネージドサービス
- Amazon Cognito User Pool:ユーザー認証サービス
つまり、Webサイトやアプリケーションがこれらのサービスを経由してアクセスされる構成になっている必要があります。EC2インスタンスに直接パブリックIPでアクセスしている場合などは、まずALBやCloudFrontを導入する必要があります。
AWS WAFの設定手順
それでは、実際にAWS WAFを設定する基本的な手順を見ていきましょう。
ステップ1:Web ACLの作成
Web ACL(Web Access Control List)は、AWS WAFの中核となる設定です。ここでルールを定義し、トラフィックの許可・ブロックを制御します。
- AWSマネジメントコンソールにログイン
- 「WAF & Shield」サービスを選択
- 「Create web ACL」をクリック
- Web ACLの名前とリージョンを設定(CloudFrontの場合はGlobal)
- 関連付けるAWSリソース(ALB、CloudFrontなど)を選択
ステップ2:ルールの追加
ルールには以下の種類があります。
マネージドルール AWSやサードパーティが提供する事前設定済みのルールセットです。初心者の方はまずこちらから始めることをおすすめします。
- AWS Managed Rules Core Rule Set:OWASP Top 10などの一般的な脅威に対応
- AWS Managed Rules Known Bad Inputs:既知の脆弱性を悪用する攻撃パターンをブロック
- AWS Managed Rules SQL Database:SQLインジェクション攻撃に特化
カスタムルール 独自の条件を設定してルールを作成できます。例えば:
- 特定のIPアドレス範囲からのアクセスをブロック
- 特定の文字列を含むリクエストを拒否
- リクエスト数が一定値を超えた場合に制限(レート制限)
ステップ3:ルールの優先順位設定
複数のルールを設定した場合、優先順位(プライオリティ)が重要になります。数字が小さいほど優先度が高く、上から順番に評価されます。一致したルールのアクションが実行され、それ以降のルールは評価されません。
ステップ4:デフォルトアクションの設定
すべてのルールに一致しなかったトラフィックに対するアクションを設定します。
- Allow:すべてのトラフィックを許可(ホワイトリスト方式)
- Block:すべてのトラフィックをブロック(ブラックリスト方式)
一般的には「Allow」を設定し、特定の悪意あるトラフィックだけをブロックする方式が推奨されます。
特定の脅威に対する防御設定
SQLインジェクション対策
SQLインジェクションは、データベースを操作するSQL文を不正に挿入する攻撃です。以下の設定で防御できます。
マネージドルールの利用: 「AWS Managed Rules SQL Database」を有効化することで、一般的なSQLインジェクションパターンを自動的にブロックします。
カスタムルールの例: リクエストボディやクエリ文字列に対して、SQLインジェクションのパターンマッチングを設定できます。
条件:リクエストボディに「SELECT」「UNION」「DROP TABLE」などのSQL文を含む
アクション:Block
クロスサイトスクリプティング(XSS)対策
XSSは、悪意のあるスクリプトをWebページに埋め込む攻撃です。
マネージドルールの利用: 「AWS Managed Rules Core Rule Set」にXSS対策が含まれています。
カスタムルールの例:
条件:リクエストに「<script>」タグや「javascript:」などのパターンを含む
アクション:Block
DDoS攻撃への対応
大量のリクエストでサービスを妨害するDDoS攻撃には、レートベースルールが有効です。
条件:同一IPアドレスから5分間に2000リクエスト以上
アクション:Block(一定期間)
AWS WAFだけでなく、AWS Shield Standardと組み合わせることで、より強固な防御が可能になります。
よくある設定ミスと対処法
AWS WAFを初めて使う際に陥りがちな設定ミスをご紹介します。
ミス1:ルールの優先順位を間違える
問題: 許可ルールよりもブロックルールの優先度が低いため、意図したトラフィックがブロックされない。
対処法: より具体的な条件のルールを上位に配置し、包括的なルールは下位に設定します。定期的にルールの順序を見直しましょう。
ミス2:正規のトラフィックをブロックしてしまう
問題: マネージドルールを有効化したら、正常なユーザーのアクセスまでブロックされてしまった。
対処法: まずは「Count」モード(カウントのみでブロックしない)で動作を検証します。CloudWatchログでどのトラフィックが影響を受けるか確認してから、「Block」モードに切り替えましょう。
ミス3:地理的ブロックの設定ミス
問題: 特定の国からのアクセスをブロックしたつもりが、設定が反映されていない。
対処法: 地理的条件は、リクエスト元のIPアドレスに基づいて判定されます。VPNやプロキシ経由のアクセスは正確に判定できない場合があることを理解しておきましょう。
ミス4:ログ設定を忘れる
問題: 攻撃を受けているかどうか、ルールが正しく機能しているかが分からない。
対処法: Web ACL作成時に必ずログ記録を有効化し、Amazon S3やCloudWatch Logsに保存する設定を行いましょう。ログ分析は継続的なセキュリティ改善に不可欠です。
ミス5:コストを考慮していない
問題: 想定以上の料金が発生してしまった。
対処法: AWS WAFは、Web ACL数、ルール数、処理リクエスト数に応じて課金されます。不要なルールは削除し、定期的にコストを確認しましょう。AWS Cost Explorerで料金の推移をモニタリングすることをおすすめします。
トラブルシューティング
実際の運用で発生しやすいトラブルと解決方法をご紹介します。
トラブル1:特定のページにアクセスできない
原因: AWS WAFのルールが正規のリクエストをブロックしている可能性があります。
解決方法:
- CloudWatchログで該当リクエストを確認
- どのルールが原因でブロックされているかを特定
- そのルールを一時的に「Count」モードに変更して検証
- 必要に応じてルールを調整、または例外設定を追加
トラブル2:パフォーマンスが低下した
原因: 過度に複雑なルールや大量のルール評価により、レスポンス時間が増加している可能性があります。
解決方法:
- 不要なルールを削除して最適化
- ルールの条件をシンプルにする
- 優先順位を見直し、よく一致するルールを上位に配置
- マネージドルールで十分な場合はカスタムルールを減らす
トラブル3:急激にコストが増加した
原因: 予想外のトラフィック増加、または攻撃による大量リクエストが原因です。
解決方法:
- CloudWatchメトリクスで異常なトラフィックパターンを確認
- レートベースルールを設定して攻撃元IPを自動ブロック
- 必要に応じてAWS Shieldを検討
- 予算アラートを設定して早期検知
トラブル4:ルール変更が反映されない
原因: AWS WAFの設定変更には数秒から数分かかる場合があります。
解決方法:
- 設定変更後、数分待ってから再テスト
- ブラウザのキャッシュをクリア
- CloudFrontを使用している場合は、キャッシュの無効化を実行
まとめ
AWS WAFは、Webアプリケーションを様々な脅威から守るための強力なツールです。初心者の方でも、マネージドルールを活用することで、比較的簡単にセキュリティ対策を始められます。
重要なポイントをおさらいしましょう:
- AWS WAFは単体では使えず、CloudFrontやALBなどと組み合わせる必要がある
- まずはマネージドルールから始めて、段階的にカスタムルールを追加する
- 「Count」モードで動作検証してから「Block」モードに切り替える
- ログ記録を有効化し、継続的にモニタリングする
- 定期的にルールを見直し、最適化する
セキュリティは一度設定して終わりではなく、継続的な改善が必要です。AWS WAFのログを分析し、新たな脅威に対応していくことで、より安全なWebアプリケーション環境を構築できます。
最初は難しく感じるかもしれませんが、まずは基本的なマネージドルールを有効化することから始めてみてください。実際に運用しながら学んでいくことで、AWS WAFの理解が深まり、自社のセキュリティレベルを着実に向上させることができるでしょう。
