AWS WAF と AWS Shieldについてざっくり
AWS WAF と AWS Shield
AWS公式ドキュメントに基づいた、AWS WAF と AWS Shield の解説記事。 両者の違い、使い分け、組み合わせパターンまでをまとめる。
参考: AWS WAF or AWS Shield? / How AWS Shield and Shield Advanced work / AWS Shield Advanced capabilities and options
1. はじめに:なぜ2つのサービスがあるのか
AWSにおけるWebアプリケーション保護は、攻撃が どのネットワーク階層(OSIレイヤー)で発生するか によって担当サービスが分かれる。
| レイヤー | 攻撃例 | 担当サービス |
|---|---|---|
| L3(ネットワーク層) | ICMP/UDP flood、ボリューメトリック攻撃 | AWS Shield |
| L4(トランスポート層) | TCP SYN flood、UDP reflection | AWS Shield |
| L7(アプリケーション層) | SQL Injection、XSS、HTTP flood | AWS WAF |
公式の整理:
AWS Shield Standard and AWS Shield Advanced provide protections against Distributed Denial of Service (DDoS) attacks for AWS resources at the network and transport layers (layer 3 and 4) and the application layer (layer 7).
つまり Shield が下位層、WAF が上位層 を主に守る分担になっている。両者を併用することで、多層防御 (defense in depth) が成立する。
2. AWS Shield
2.1 概要
AWS Shield は マネージドDDoS保護サービス。 すべてのAWSアカウントに Shield Standard が無償で自動有効化されており、より高度な防御が必要な場合に有償の Shield Advanced を追加契約する2階建て構造。
2.2 Shield が検知する攻撃クラス(公式分類)
公式ドキュメントは検知対象を3クラスに整理している:
- Network volumetric attacks (Layer 3) ネットワーク容量を飽和させてサービス拒否を狙う攻撃。
- Network protocol attacks (Layer 4) プロトコルを悪用する攻撃。代表例が TCP SYN flood で、サーバー・ロードバランサー・ファイアウォールの接続状態テーブルを枯渇させる。
- Application layer attacks (Layer 7) 正規に見えるリクエスト(例: Webリクエストフラッド)でアプリを過負荷にする攻撃。
2.3 Shield Standard
- すべてのAWS顧客に追加料金なしで自動適用
- 保護対象: Amazon EC2、ELB、CloudFront、Route 53 などのAWSサービス
- 設定不要、常時稼働(always-on)
- 一般的なネットワーク層・トランスポート層 DDoS を自動緩和
2.4 Shield Advanced
サブスクリプション契約で利用する有償サービス。Standardの保護に加え、以下の機能が追加される。
| 機能 | 内容 |
|---|---|
| AWS WAF統合 | Shield Advanced保護対象リソースの標準WAF費用(Web ACL、ルール、最大1,500 WCU・5,000万リクエスト/月まで)をカバー |
| 自動アプリ層DDoS緩和 | 既知のDDoSソースに対するWAFレート制限と、検知時のカスタム保護を自動適用 |
| ヘルスベース検知 | Route 53ヘルスチェックと連携し、誤検知低減と早期検知を実現 |
| 保護グループ | リソースを論理グループ化し、グループ単位での検知・緩和 |
| 詳細な可視化 | リアルタイムメトリクス、攻撃レポート、CloudWatchメトリクス |
| AWS Firewall Manager連携 | 複数アカウントへのShield Advanced保護とWAFルールを一元展開 |
| AWS Shield Response Team (SRT) | DDoS攻撃時に24/7サポートを受けられる専門チーム(Business/Enterprise Support契約が必要) |
| プロアクティブエンゲージメント | ヘルスチェックの異常時にSRTから直接連絡 |
| コスト保護 | 攻撃起因のデータ転送量などのスパイクに対するサービスクレジット |
2.5 Shield Standard と Advanced の比較
| 項目 | Standard | Advanced |
|---|---|---|
| 料金 | 無償(全AWSアカウントに自動付与) | 月額固定 + 従量課金 |
| 保護対象 | 全AWSサービス | 明示的に登録したリソース |
| L3/L4 DDoS防御 | 自動 | 自動(より高度) |
| L7 DDoS自動緩和 | なし | あり(WAF連携) |
| SRTサポート | なし | あり |
| コスト保護 | なし | あり |
| 詳細レポート | 限定的 | 完全 |
3. AWS WAF
3.1 概要
AWS WAF は Web Application Firewall。HTTP/HTTPSリクエスト(L7)を検査し、不正なリクエストを ブロック / 許可 / カウント / Captcha などのアクションで制御する。
3.2 動作レイヤーと統合先サービス
- 動作レイヤー: アプリケーション層(L7)のみ
- 検査単位: リクエスト単位(パケット単位ではない)
- デプロイ先:
- Amazon CloudFront
- Application Load Balancer (ALB)
- Amazon API Gateway
- AWS AppSync
- Amazon Cognito user pool
- AWS App Runner
- AWS Verified Access
- AWS Amplify
3.3 主要コンポーネント
Web ACL(Access Control List)
WAFの中核。1つ以上のルールを束ねた ルールセット で、AWSリソースに関連付けて利用する。 未マッチリクエストに対する デフォルトアクション(allow / block)を持つ。
ルール(Rule)
リクエストの 検査条件 + マッチ時のアクション を定義。 条件はIPアドレス、HTTPヘッダー、クエリ文字列、ボディ、地理情報など多岐にわたる。
ルールグループ(Rule Group)
複数ルールをまとめた再利用可能なユニット。以下の種類がある:
- Self-managed(自前で作成)
- AWS Managed Rules(AWS提供)
- AWS Marketplace Managed Rules(サードパーティ)
- Shield Advanced / Firewall Manager 所有
3.4 AWS Managed Rules(公式マネージドルール)
AWSが提供する事前定義済みルール群。OWASP Top 10 や PCI / HIPAA などの規制対応 を支援する。
主要なマネージドルールグループ:
| ルールグループ | 用途 |
|---|---|
| Core rule set | 一般的なWeb脆弱性への基本防御 |
| Known bad inputs | 既知の不正リクエストパターン |
| SQL database | SQLインジェクション対策 |
| Linux operating system | LFI(ローカルファイルインクルージョン)等 |
| PHP application | PHP固有の攻撃パターン |
| WordPress application | WordPress固有の攻撃パターン |
| Amazon IP reputation list | 既知の不正IP |
| Anonymous IP list | VPN/プロキシ/Tor |
| Bot Control(追加料金) | 悪性Bot対策(スクレイピング、スキャナー等) |
| Account Takeover Prevention (ATP)(追加料金) | クレデンシャルスタッフィング対策 |
| Account Creation Fraud Prevention (ACFP)(追加料金) | 不正アカウント作成対策 |
注意: マネージドルールの自動更新により新たな脅威にも追従できるが、ルール詳細はAWS側で非公開(知財・回避防止のため)。本番適用前に 必ず非本番環境でテスト すること(公式推奨)。
3.5 カスタムルールの主要な条件
| 条件タイプ | 用途例 |
|---|---|
| IPセット | 特定IP/CIDRの許可・拒否 |
| 地理情報マッチ | 国単位のアクセス制御(例: 日本以外をブロック) |
| レートベース | IP単位での流量制御(例: 5分間で1000リクエスト超でブロック) |
| サイズ制約 | ボディ・ヘッダーのサイズ制限 |
| SQLインジェクション検査 | クエリ・ボディ内のSQL文検出 |
| XSS検査 | スクリプトタグ検出 |
| 正規表現マッチ | 任意パターン |
| ラベル | 他ルールの判定結果を引き回し |
3.6 高度な機能
- Captcha / Challenge: 自動化されたアクセスをふるい落とす
- JavaScript SDK / Mobile SDK: クライアント側でチャレンジトークンを発行
- CloudWatchメトリクス連携: ブロック数・許可数・ルール別効果の可視化
- ログ配信: CloudWatch Logs / S3 / Kinesis Data Firehose
4. WAF vs Shield ─ 詳細比較
公式の比較表を整理:
| 比較軸 | AWS WAF | AWS Shield |
|---|---|---|
| 主目的 | Webアプリの脆弱性悪用(SQLi、XSS等)からの保護 | DDoS攻撃(SYN flood、UDP flood等)からの保護 |
| 動作レイヤー | L7(アプリケーション層) | L3/L4 中心、Advanced は L7 にも対応 |
| デプロイ | 明示的にWeb ACLを作成・関連付け | Standard は全アカウント自動。Advanced は明示契約 |
| カスタマイズ | 高い(自前ルール + マネージドルール) | 限定的(Advanced で一部設定可能) |
| マネージドルール | あり(AWS / Marketplace) | 該当機能なし |
| 料金モデル | 従量制(Web ACL数 × ルール数 × リクエスト数) | Standard: 無償 / Advanced: 月額 + 従量 |
| 攻撃対応チーム | なし | Advanced で SRT(24/7)に連絡可能 |
| リアルタイム監視 | あり(CloudWatch連携) | あり(Advanced はより詳細) |
| トラフィック検査 | リクエストレベル(HTTP内容) | パケットレベル(ヘッダー、流量パターン) |
5. 使い分けと組み合わせパターン
5.1 ケース別の選択指針
| 守りたいもの | 主に使うサービス |
|---|---|
| SQLインジェクション、XSS等の脆弱性悪用 | WAF |
| 海外IPからのアクセス制限 | WAF(Geo match rule) |
| 単一IPからの過剰リクエスト | WAF(Rate-based rule) |
| Bot / スクレイピング対策 | WAF(Bot Control) |
| クレデンシャルスタッフィング | WAF(ATP) |
| 一般的なDDoS攻撃(SYN flood等) | Shield Standard(自動) |
| 大規模・高度なDDoS攻撃、24/7サポート | Shield Advanced |
| L7 DDoSの自動緩和 | Shield Advanced + WAF |
5.2 推奨構成(多層防御)
公式が推奨する多層防御構成:
インターネット
│
▼
┌─────────────────┐
│ AWS Shield │ ← L3/L4 DDoS をネットワークエッジで遮断
│ (Standard/Adv) │ (SYN flood, UDP flood 等)
└────────┬────────┘
│
▼
┌─────────────────┐
│ CloudFront / │ ← エッジ配信、TLS終端
│ ALB │
└────────┬────────┘
│
▼
┌─────────────────┐
│ AWS WAF │ ← L7 攻撃を検査
│ (Web ACL) │ (SQLi, XSS, HTTP flood, Bot 等)
└────────┬────────┘
│
▼
┌─────────────────┐
│ アプリケーション │
└─────────────────┘
5.3 Shield Advanced と WAF の連携
Shield Advanced を契約すると WAFと密接に連携する:
- 保護対象リソースの 標準WAF費用がカバー される(1,500 WCU、5,000万リクエスト/月まで)
- 自動アプリ層DDoS緩和 を有効化すると、Shield Advancedが管理するルールグループ(150 WCU)がWeb ACLに追加され、攻撃検知時に動的にWAFルールを適用
- Layer 7 Anti-DDoS Amazon Managed Rule group が利用可能
ただし以下は Shield Advanced のカバー対象外:
- Bot Control、ATP、ACFP などの追加料金マネージドルール
- CAPTCHAアクション
- 1,500 WCUを超えるWeb ACL
- デフォルトボディサイズを超える検査
6. 「海外IPからの大量アクセス」への対処例
実際にありがちな「海外から大量アクセスが来ている」シナリオでの判断フロー:
海外IPから大量アクセス
│
▼
┌─ パケット段階で集中(TCP接続できない)
│ → L3/L4 DDoS の可能性
│ → Shield に任せる(Advanced を契約していればより堅牢)
│
├─ HTTPリクエストとして大量来る
│ → L7 DDoS / Bot / スクレイピング
│ → WAF の Rate-based rule + Bot Control
│ → 必要なら Shield Advanced の自動L7緩和
│
├─ /login や /signup への試行が多い
│ → クレデンシャルスタッフィング / アカウント作成詐欺
│ → WAF ATP / ACFP
│
└─ 特定の国からのみ来る
→ WAF の Geographic match rule で地域ブロック
7. コストの考え方
AWS WAF
- Web ACL: 1つあたり月額固定
- ルール: ルール数に応じた月額固定
- リクエスト数: 100万リクエストあたりの従量
- 追加機能: Bot Control / ATP / ACFP / Captcha は別料金
AWS Shield
- Standard: 無償
- Advanced:
- 月額固定(組織単位の支払いアカウントで一括)
- データ転送量に応じた従量
- 保護対象リソースの標準WAF費用は無料に
- 攻撃時のコストスパイクは サービスクレジット で補填可能
詳細は公式の Shield Pricing と WAF Pricing を参照。
8. まとめ
| 観点 | 結論 |
|---|---|
| WAFだけでDDoSを防げるか | L7 DDoSの一部のみ可能。L3/L4 DDoSはWAFには届かないため不可 |
| ShieldだけでWeb脆弱性を防げるか | 不可。SQLi/XSS等はWAFが担当 |
| 一般的なWebサービスの基本構成 | Shield Standard(自動)+ WAF で開始 |
| 高い可用性が必要な場合 | Shield Advanced + WAF + Firewall Manager で組織横断防御 |
| 多層防御の原則 | エッジ(Shield)→ 配信層(CloudFront/ALB)→ アプリ前段(WAF)→ アプリ本体 |
「何の攻撃から守りたいか → どのレイヤーか → どのサービスか」の順で考えると、迷わず構成を選択できる。