Day 18: AWS WAFとShield:Webアプリケーションの保護
皆さん、こんにちは!「実践!AWSネットワーク構築・運用30日チャレンジ」のDay 18へようこそ!
これまで、VPCのセキュアな設計、セキュリティグループやNACLによる通信制御、そしてCloudWatchやVPC Flow Logsによる監視など、AWSネットワークの様々なセキュリティ機能を学んできました。昨日はAWS ConfigとCloudTrailで変更履歴と操作ログの追跡を行い、ガバナンスと監査能力を高めました。
しかし、インターネットに公開されるWebアプリケーションは、常に多様なサイバー攻撃の脅威にさらされています。一般的なネットワークセキュリティ対策だけでは防ぎきれない、アプリケーション層の攻撃や大規模なDDoS攻撃が存在します。
今日のテーマは、これらの脅威からWebアプリケーションを保護するためのAWSサービス、「AWS WAF (Web Application Firewall)」と「AWS Shield」です。これらのサービスを組み合わせることで、堅牢な多層防御を実現し、安心してWebサービスを公開できるようになります。
1. Webアプリケーションの脅威と保護の必要性
Webアプリケーションは、SQLインジェクション、クロスサイトスクリプティング (XSS)、悪意のあるボット、DDoS攻撃など、様々な攻撃の標的となります。これらの攻撃は、サービスの停止、データ漏洩、風評被害など、甚大な被害をもたらす可能性があります。
従来のファイアウォール(セキュリティグループなど)は、IPアドレスやポート番号といったネットワーク層の情報に基づいてトラフィックをフィルタリングしますが、これだけではアプリケーション層の脆弱性を悪用する攻撃を防ぐことはできません。
そこで登場するのが、AWS WAFとAWS Shieldです。
2. AWS WAF:Webアプリケーションファイアウォール
AWS WAF (Web Application Firewall) は、Webアプリケーションの前に配置され、一般的なWebの脆弱性を悪用する攻撃から保護するためのサービスです。WebリクエストのHTTPヘッダー、ボディ、URIなど、アプリケーション層の情報を検査し、定義されたルールに基づいて悪意のあるトラフィックをブロックまたは許可します。
AWS WAFの仕組みと特徴
- 配置場所: Amazon CloudFront、Application Load Balancer (ALB)、API Gateway、AWS AppSync の前にデプロイされます。これらと連携して動作します。
-
ルールとルールグループ:
- マネージドルール: AWSが提供する、またはAWS Marketplaceのセキュリティベンダーが提供する、一般的な脅威(OWASP Top 10など)に対応した事前定義済みのルールセット。簡単に有効化でき、継続的にAWSが更新します。
- カスタムルール: 独自の条件(特定のIPアドレス、HTTPヘッダー、SQLインジェクションパターンなど)に基づいて、ユーザーが定義するルール。
-
アクション: ルールに一致したトラフィックに対して、以下のいずれかのアクションを実行できます。
- Allow (許可): リクエストを許可し、バックエンドへ転送。
- Block (ブロック): リクエストをブロックし、バックポンドへ転送しない。
- Count (カウント): リクエストを許可しつつ、カウントのみを行う(テストや分析に利用)。
- レートベースルール: 特定のIPアドレスからのリクエストレートが指定したしきい値を超えた場合に自動的にブロックする機能。DDoS攻撃やブルートフォースアタックの対策に有効です。
- 可視性: WAFによってブロックまたは許可されたリクエストの詳細なログをCloudWatch LogsまたはKinesis Data Firehoseに送信できます。
- 柔軟性: ルールやルールグループを自由に組み合わせて、アプリケーションの特性に応じた柔軟な保護を実現できます。
AWS WAFが向いているシナリオ
- SQLインジェクション、XSS、LFI (Local File Inclusion) などのアプリケーション層の脆弱性を悪用する攻撃からWebアプリケーションを保護したい場合。
- 悪意のあるボット(スクレイピング、クレデンシャルスタッフィングなど)からサイトを保護したい場合。
- WebサイトへのDDoS攻撃(レイヤー7: HTTP Floodなど)を緩和したい場合。
- 特定のIPアドレスからのアクセスを制限/ブロックしたい場合。
- OWASP Top 10のような一般的なWebセキュリティ脅威に対する防御を迅速に導入したい場合。
3. AWS Shield:DDoS攻撃からの保護
AWS Shield は、AWS上で稼働するアプリケーションを分散型サービス拒否 (DDoS) 攻撃から保護するためのサービスです。DDoS攻撃は、大量のトラフィックを送りつけることで、サービスの可用性を低下させたり、停止させたりすることを目的とします。
AWS Shieldには、以下の2つのティアがあります。
3.1. AWS Shield Standard (標準)
- 自動有効化: 全てのAWSのお客様に対して追加料金なしで自動的に有効化されます。
- 常時稼働の検出と自動インライン緩和: 一般的なDDoS攻撃(SYNフラッド、UDPリフレクションなど)に対して、ネットワークレイヤー (Layer 3/4) での自動的な緩和を提供します。
- 保護対象: Amazon EC2、Elastic Load Balancing (ELB)、Amazon CloudFront、AWS Global Accelerator、Route 53などのリソース。
- 可視性: CloudWatchメトリクスを通じて、基本的なDDoS攻撃イベントの可視性を提供します。
3.2. AWS Shield Advanced (高度)
- 有料サービス: 追加料金が発生します。エンタープライズレベルの高度なDDoS対策が必要な場合に利用します。
- より広範なDDoS攻撃からの保護: Shield Standardの機能に加え、より複雑で高度なDDoS攻撃(アプリケーションレイヤーの攻撃も含む)からの保護を提供します。
- DDoSレスポンスチーム (DRT) への24時間365日のアクセス: DDoS攻撃が発生した場合に、AWSのセキュリティエキスパートによる専門的なサポートを受けられます。
- コスト保護: DDoS攻撃によるスケールアウトによって発生する追加料金(例えば、Auto ScalingによるEC2インスタンスの増加分)を保護します。
- 高度なメトリクスと検出機能: より詳細なDDoSイベントデータと可視性を提供します。
- AWS WAFとの統合: Shield Advancedを有効にすると、AWS WAFを無料で利用でき、アプリケーション層のDDoS攻撃に対する追加の保護(レートベースルールなど)を設定できます。
AWS Shieldが向いているシナリオ
- Shield Standard: すべてのAWSリソースの基本的なDDoS保護。追加料金なしで利用できるため、特別な設定は不要です。
- Shield Advanced: ミッションクリティカルなアプリケーションや、DDoS攻撃によるダウンタイムが許されない、または莫大な損害につながるビジネスにおいて、より高度な保護と専門的なサポートが必要な場合。
4. WAFとShieldの連携と多層防御
WAFとShieldは、Webアプリケーションに対する異なる種類の脅威をターゲットにしており、組み合わせて利用することで、より堅牢な多層防御を実現します。
- AWS Shield: 大規模なネットワーク層 (L3/4) のDDoS攻撃をAWSインフラストラクチャレベルで緩和します。
- AWS WAF: Shieldをすり抜けた、またはより精密なアプリケーション層 (L7) の攻撃(SQLインジェクション、XSS、レート制限の回避など)を防御します。
一般的なアーキテクチャでは、クライアントからのトラフィックはまずAWS Shield Standard (またはAdvanced) によってDDoS攻撃の一次緩和を受け、その後ALBまたはCloudFrontにルーティングされ、そこでAWS WAFによってアプリケーション層の脅威がフィルタリングされ、最後にバックエンドのWebサーバーに到達します。
5. AWS WAFの基本的な設定実践(ALBと連携)
Day 13で作成したALBの前にAWS WAFをデプロイし、基本的なルール(例: 特定のIPアドレスからのアクセスをブロックする)を設定してみましょう。
5.1. AWS WAF Web ACL (Web Access Control List) の作成
- AWSマネジメントコンソールで「WAF」サービスを開きます。
- 左側ナビゲーションペインから「Web ACLs」をクリックし、「Web ACL を作成」ボタンをクリックします。
-
Web ACL の設定:
-
名前:
my-web-app-waf
-
説明:
Web application protection for my-alb
-
リソースタイプ:
Regional resources
を選択します。(ALBにアタッチするため)-
ポイント: CloudFrontにアタッチする場合は
CloudFront distributions
を選択します。
-
ポイント: CloudFrontにアタッチする場合は
-
AWS リソース: Day 13で作成した
my-alb
を選択します。
-
名前:
- 「次へ」をクリックします。
-
ルールを追加し、ルールグループを整理する:
- 「ルールを追加」ドロップダウンから「マネージドルールグループを追加」を選択します。
-
AWS が管理するルールグループ: ここで様々なルールグループを選択できます。
- 例: 「Core rule set (CRS)」を展開し、
Add to Web ACL
をクリックします。これはOWASP Top 10の脅威など、一般的な攻撃から保護する基本的なルールセットです。 - 他にも「SQL database」「PHP application」「Known bad inputs」など、様々なルールグループがあります。
- 例: 「Core rule set (CRS)」を展開し、
- 「ルールを追加」ドロップダウンから「独自のルールを追加」を選択し、「IPセットルール」を選択します。
-
名前:
BlockMyIP
-
タイプ:
IPv4
-
IP アドレス: あなたの現在のパブリックIPアドレス を
/32
で入力します。(例:203.0.113.1/32
) -
ソース IP の設定:
Web リクエストの IP アドレスを評価する
(デフォルト) -
リクエストが IP セットのルールと一致する場合:
ブロック
- 「ルールを追加」をクリックします。
-
名前:
- ルールグループの評価順序: ルールグループの評価順序を設定します。通常、より一般的なルール(マネージドルール)を先に、特定のブロックルール(カスタムIPブロック)を後に配置します。今回はこのままでOKです。
- 「次へ」をクリックします。
-
メトリクスとルール容量を設定する:
- CloudWatch メトリクス名: デフォルトのままでOKです。
- 「次へ」をクリックします。
- Web ACL の確認と作成: 設定内容を確認し、「Web ACL を作成」をクリックします。
Web ACLのプロビジョニングには数分かかる場合があります。
5.2. WAFの動作確認
- WAFがALBに適用され、ステータスが「Active」になったことを確認します。
- まず、あなたの現在のパブリックIPアドレス以外のネットワークからALBのDNS名にアクセスし、Webページが正常に表示されることを確認します。
-
次に、WAFルールでブロック対象として登録したあなたのパブリックIPアドレスのネットワークからALBのDNS名にアクセスしてみてください。
- 通常は「403 Forbidden」のようなエラーページが表示され、アクセスがブロックされるはずです。
- WAFコンソールに戻り、作成したWeb ACLの「メトリクス」タブや「サンプルリクエスト」タブで、ブロックされたリクエストが記録されているかを確認できます。
- 「WAFログ」を有効にすると、CloudWatch LogsやS3に詳細なログが出力され、さらに詳しい分析が可能です。
6. AI時代におけるWAF/Shieldの活用シナリオ
AI/MLワークロードにおいて、特に推論APIやデータ収集フロントエンドは、インターネットに公開されることが多く、WAF/Shieldによる保護が不可欠です。
-
リアルタイム推論APIの保護:
- ALBの背後にある推論APIエンドポイントに対してWAFを適用し、SQLインジェクション、XSS、悪意のあるボットによるAPI乱用などから保護します。
- 特に、Rate Limitingルールは、MLモデルへの過剰なリクエストやDDoS攻撃を検知し、APIの可用性を維持するために重要です。
-
データ収集/データ入力インターフェースの保護:
- センサーデータやユーザー入力データを受け取るAPI GatewayやWebアプリケーションに対してWAFを適用し、不正なデータ注入や攻撃から保護します。
-
MLOpsパイプラインのセキュリティ:
- CI/CDツールがWebフックを使用する場合や、ユーザーインターフェースを持つ場合、それらのエンドポイントをWAFで保護し、不正なアクセスや操作を防ぎます。
-
DDoS攻撃からの防御:
- 学習データのダウンロード元や推論結果のアップロード先となるS3バケットへのアクセスをCloudFrontで配信している場合、CloudFrontにWAFとShieldを連携させることで、大規模なDDoS攻撃からデータパイプラインを保護します。
- ミッションクリティカルな推論サービスの場合、AWS Shield Advancedを導入し、専門的なDDoS対策とコスト保護を享受します。
本日のまとめと次へのステップ
今日は、Webアプリケーションを保護するための重要なAWSサービス、「AWS WAF」と「AWS Shield」について学び、ALBにWAFをデプロイする基本的な実践を行いました。
- AWS WAF: アプリケーション層(L7)のWeb攻撃(SQLインジェクション、XSS、ボットなど)から保護するWebアプリケーションファイアウォール。ALB、CloudFront、API Gatewayにアタッチ可能。
-
AWS Shield: DDoS攻撃から保護するサービス。
- Standard: 全てのAWSユーザーに提供される基本的なネットワーク層 (L3/4) DDoS緩和。
- Advanced: 有料で、より高度なDDoS緩和、DRTアクセス、コスト保護を提供。
- WAFとShieldを組み合わせることで、多層的なWebセキュリティ防御を実現できる。
これらのセキュリティサービスを適切に設定することで、インターネットに公開されるあなたのWebアプリケーションやAPIは、より安全に運用できるようになります。
明日のDay 19では、「AWS Firewall Manager:一元的なセキュリティポリシー管理」と題して、複数のAWSアカウントやVPC、リソースにわたって、WAFルール、Shield Advanced、セキュリティグループなどを一元的に管理・デプロイできる「AWS Firewall Manager」について学びます。大規模なエンタープライズ環境でセキュリティガバナンスを強化するための強力なツールです。
今日のWAF設定、あなたのIPアドレスからのアクセスをブロックできましたか?これでWebアプリのセキュリティが一段と向上しましたね!ぜひ「いいね」👍で教えてください!