Webアプリケーションを防御せよ!WAFとShieldで脅威から守る
こんにちは!現役クラウドエンジニアの[あなたの名前/ハンドルネーム]です。
「【AWSプロフェッショナルへの道】現役クラウドエンジニアが贈る実践ガイド」の第22回をお届けします。前回は、セキュリティグループとNACLでVPC内のネットワークトラフィックを制御する方法を学び、ネットワークレベルの防御を固めました。しかし、Webアプリケーションは、より高度で巧妙な攻撃に常に晒されています。
今回は、Webアプリケーションを標的としたサイバー攻撃からシステムを守るためのAWSのセキュリティサービス、AWS WAF (Web Application Firewall) と AWS Shieldを徹底的に解説します。
「DDoS攻撃って何?」「SQLインジェクション攻撃はどう防げばいいの?」「WAFってどう設定すればいい?」といった疑問を持つかもしれません。AWS WAFとShieldは、これらの脅威からアプリケーションを守るための強力な盾です。本記事では、それぞれのサービスがどのような脅威に対処し、どのように設定するのかを学び、あなたのWebアプリケーションをより強固に守るスキルを身につけます。
1. Webアプリケーションを取り巻く脅威と防御の全体像
Webアプリケーションは、以下のような様々な攻撃の対象となります。
- DDoS攻撃 (Distributed Denial of Service): 複数のコンピュータから大量のトラフィックを送りつけ、サーバーやネットワークリソースを枯渇させてサービスを停止させる攻撃。
-
OWASP Top 10:
- SQLインジェクション: データベースへの不正なコマンドを挿入し、機密データを盗み出す攻撃。
- クロスサイトスクリプティング (XSS): 悪意のあるスクリプトをWebページに埋め込み、訪問者のブラウザで実行させる攻撃。
- クロスサイトリクエストフォージェリ (CSRF): ユーザーの意図しないリクエストを強制的に送信させる攻撃。
- ボットによる攻撃: 悪意のあるボットがWebサイトを巡回し、ログイン情報の窃取や不正なスパム投稿を行う攻撃。
AWS WAFとAWS Shieldは、これらの脅威をブロックし、Webアプリケーションを保護するために連携して機能します。
2. AWS Shield: DDoS攻撃からの自動保護
AWS Shieldは、DDoS攻撃からAWSリソースを保護するマネージドサービスです。すべてのAWS顧客に無料で提供される「Standard」と、より高度な保護を提供する有料の「Advanced」の2つの階層があります。
2.1. AWS Shield Standard (無料)
- すべてのAWSアカウントに自動的に有効化されています。
- 一般的な、ネットワーク層(レイヤー3)およびトランスポート層(レイヤー4)のDDoS攻撃(SYNフラッド、UDPリフレクションなど)から自動的に保護します。
- 追加の設定や料金は必要ありません。
2.2. AWS Shield Advanced (有料)
- より高度な保護を必要とする重要なアプリケーション向けです。
- Standardが提供する保護に加えて、以下のような高度な機能を提供します。
- アプリケーション層(レイヤー7)のDDoS攻撃 に対する保護。
-
DDoS攻撃への専門家による24時間365日のサポート (
DDoS Response Team)。 - 大規模なDDoS攻撃によるAWSリソースの使用量急増に対するクレジット。
- CloudWatchメトリクスやCloudTrailログでDDoS攻撃イベントを詳細に可視化。
ベストプラクティス:
AWS Shield Advancedは、高い可用性とセキュリティが求められるミッションクリティカルなサービスに導入を検討しましょう。特に、DDoS攻撃によるサービス停止が事業に大きな損害を与える場合に有効です。
3. AWS WAF: アプリケーションレベルのきめ細かな防御
AWS WAFは、Webアプリケーションの脆弱性を狙った攻撃から保護するウェブアプリケーションファイアウォールです。アプリケーションロードバランサー (ALB)、Amazon CloudFront、Amazon API Gateway、AWS AppSyncといったリソースの前に配置し、HTTP/HTTPSトラフィックを検査します。
3.1. WAFの主要な機能
- ルール (Rules): 許可、ブロック、またはカウントするWebリクエストの条件を定義します。
- Web ACLs (Access Control Lists): ルールの集まりです。Web ACLsを作成し、ALBなどのリソースに関連付けることでWAFを有効化します。
- 条件 (Conditions): IPアドレス、HTTPヘッダー、URI、リクエストボディ、SQLインジェクション、クロスサイトスクリプティングなど、様々な条件に基づいてトラフィックをフィルタリングします。
3.2. 実践!WAFでSQLインジェクションを防ぐ
SQLインジェクション攻撃からWebアプリケーションを守るためのWeb ACLsを作成してみましょう。
-
AWSマネジメントコンソールで「WAF」サービスに移動します。
-
左のナビゲーションペインから「Web ACLs」を選択し、「Web ACLを作成」をクリックします。
-
説明:
MyWebApp-WebACL -
関連付けられたAWSリソース: 「リソースの追加」をクリックし、WebアプリケーションがデプロイされているALBを選択します。
-
「次へ」をクリックします。
-
ルールとルールグループの設定:
- 「ルールを追加」→「マネージドルールグループを追加」を選択します。
-
AWS Managed rule groupsのリストから、Core rule setのAdd to web ACLをクリックします。- AWS Managed rule groupsは、AWSが管理するルールセットで、OWASP Top 10の脅威など、一般的な攻撃パターンを自動的に検出してくれます。
-
SQL databaseのAdd to web ACLもクリックして追加します。- これにより、一般的なSQLインジェクションパターンを検出・ブロックするルールが適用されます。
- 追加したルールグループの「アクション」が
Countになっている場合は、Blockに変更して攻撃をブロックするように設定します。
-
「次へ」をクリックし、設定内容を確認して「Web ACLを作成」をクリックします。
これで、WebアプリケーションへのトラフィックはWAFによって検査され、一般的なSQLインジェクション攻撃や、OWASP Top 10に記載されているような攻撃パターンが検出された場合に自動的にブロックされるようになります。
3.3. IPアドレスによるアクセス制限
特定のIPアドレスからのアクセスを許可または拒否したい場合も、WAFで簡単に設定できます。
-
Web ACLのルール設定画面で、「ルールを追加」→「独自のルールとルールグループを追加」を選択します。
-
「ルールビルダー」を選択し、以下のルールを設定します。
-
ルール名:
AllowMyIP -
タイプ:
IPセット -
IPセット: 「IPセットを作成」をクリックし、開発環境のIPアドレス(例:
192.0.2.1/32)を登録します。 -
アクション:
Allow
-
ルール名:
-
この
AllowMyIPルールを、ルールリストの一番上(最も高い優先度)に配置します。これにより、まず開発者のIPアドレスが許可され、その後のルールは評価されなくなります。
4. WAFとShieldの連携とベストプラクティス
-
多層防御:
- AWS Shield Standardがネットワーク層・トランスポート層のDDoS攻撃を自動的に防御します。
- AWS WAFがアプリケーション層の攻撃(SQLインジェクション、XSSなど)をきめ細かく防御します。
- この2つのサービスを連携させることで、多層防御の仕組みを構築できます。
-
マネージドルールグループの活用:
- 自分でルールを作成するのは大変です。AWS MarketplaceやAWSが提供するマネージドルールグループを積極的に活用し、一般的な攻撃パターンから保護しましょう。
-
ログの活用:
- WAFのログをCloudWatch LogsやS3に出力することで、どのような攻撃がブロックされたかを詳細に分析できます。これにより、より厳密なカスタムルールを作成するのに役立ちます。
-
料金:
- WAFは、処理されるWebリクエスト数と、設定したルールの数に基づいて料金が発生します。コストを意識して、必要なルールのみを設定しましょう。
まとめ
今回は、Webアプリケーションを脅威から守るための強力な盾、AWS ShieldとAWS WAFについて学びました。
- AWS Shieldは、DDoS攻撃からAWSリソースを保護するサービスで、StandardとAdvancedの2つの階層があることを理解しました。
- AWS WAFは、SQLインジェクションやXSSなどのWebアプリケーションの脆弱性を狙った攻撃から保護するマネージドサービスです。
- 実践的なWeb ACLsの作成を通じて、AWS Managed rule groupsを使って簡単に防御ルールを適用できることを学びました。
これらのサービスを適切に活用することで、あなたはWebアプリケーションをより安全な状態に保ち、日々の運用におけるセキュリティリスクを大幅に低減できます。
この記事が皆さんのAWS学習の一助となれば幸いです。
もしこの記事が役に立ったと感じたら、ぜひ「いいね」👍をお願いします!励みになります!