Cloud Service
AWS WAF
Web アプリへの不正リクエストをルールで検査し、許可・ブロック・カウントして保護するマネージド型 Web アプリケーションファイアウォール
- 1.HTTP/HTTPS リクエストをルールで検査し、SQL インジェクションや XSS、ボットなどの不正アクセスを防ぐ
- 2.CloudFront、ALB、API Gateway、AppSync、App Runner などに Web ACL を関連付けて利用する
- 3.AWS マネージドルールで主要な脅威に即座に対応でき、独自ルールやレート制限も組み合わせられる
AWS WAF は、Web アプリケーションに届く HTTP/HTTPS リクエストをルールに基づいて検査し、不正なトラフィックを許可・ブロック・カウントするマネージド型の Web アプリケーションファイアウォールです。アプリケーション層(レイヤー 7)での防御を担い、ネットワーク層やトランスポート層を主対象とする AWS Shield や Security Group とは保護のレイヤーが異なります。
解決する課題
公開された Web アプリケーションは、SQL インジェクションやクロスサイトスクリプティング(XSS)といった既知の攻撃手法、悪意あるボットによるスクレイピングや在庫買い占め、不正ログイン試行、急増する自動化リクエストなど、多様な脅威にさらされます。これらをアプリケーション側のコードだけで網羅的に防ぐのは負担が大きく、対応漏れも生じやすくなります。
AWS WAF は、こうした不正リクエストをアプリケーションの手前で検査・遮断する層を提供します。マネージドルールを使えば代表的な脆弱性パターンへ即座に備えられ、独自ルールやレート制限を加えることでアプリケーション固有の要件にも対応できます。結果として、アプリケーション本体の改修を最小限に抑えつつ、防御層を独立して運用・更新できます。
主要概念と用語
- Web ACL(Web Access Control List): リクエストを評価するルールの集合体。CloudFront ディストリビューションや ALB などのリソースに関連付けて適用する。
- ルール: リクエストの検査条件と、一致したときの動作を定めた単位。複数のステートメントを AND や OR、NOT で組み合わせられる。
- ルールグループ: 複数のルールをまとめて再利用可能にした単位。AWS マネージドルールグループとユーザー定義のルールグループがある。
- アクション: ルールに一致したリクエストへの処理。Allow(許可)、Block(ブロック)、Count(カウントのみ)、CAPTCHA、Challenge などがある。
- マネージドルール: AWS や AWS Marketplace のセラーが提供・維持するルールグループ。一般的な脆弱性や既知の不正パターンに対応する。
- レートベースルール: 一定時間内に同一送信元から届くリクエスト数を数え、しきい値を超えた送信元を制限するルール。
- スコープダウンステートメント: マネージドルールなどの適用対象を、特定の条件に合致するリクエストへ絞り込むための条件。
- ロギングとサンプリング: Web ACL が処理したリクエストのログ出力と、コンソールで確認できるサンプルリクエストの仕組み。
仕様・制限・クォータ
WAF は Web ACL を 1 つ以上のリソースに関連付けて動作します。関連付け可能なリソースには CloudFront、Application Load Balancer、API Gateway(REST API)、AppSync GraphQL API、App Runner、Cognito ユーザープール、Verified Access などがあります。CloudFront に関連付ける Web ACL はグローバルスコープ(CLOUDFRONT)で作成し、それ以外のリージョナルリソースは各リソースと同じリージョンのリージョナルスコープで作成します。
ルールの評価には WCU(Web ACL Capacity Unit)という指標があり、ルールの複雑さに応じて消費量が決まります。1 つの Web ACL に組み込めるルールの総 WCU には上限があり、複雑なルールほど消費が大きくなります。検査できるリクエストボディのサイズや、1 アカウントあたりの Web ACL 数・ルール数などにも上限が設けられています。これらの具体的な数値は変動するため、最新値は AWS 公式ドキュメントのクォータ一覧で確認してください。多くのクォータは Service Quotas から引き上げ申請が可能です。
CloudFront 用の Web ACL は必ずグローバルスコープで作成する必要があります。リージョナルスコープで作った Web ACL は CloudFront に関連付けられないため、構築時にスコープを取り違えないよう注意してください。
内部の仕組み
Web ACL がリソースに関連付けられると、そのリソースに届く各リクエストは Web ACL 内のルールによって順に評価されます。ルールには優先順位があり、番号の小さいものから順に処理されます。あるルールがリクエストに一致して終端アクション(Allow または Block)を返すと、その時点で評価が終了し、後続ルールは評価されません。Count アクションのルールは一致してもカウントするだけで評価を止めないため、本番適用前のルール検証に活用できます。
すべてのルールに一致しなかったリクエストには、Web ACL に設定したデフォルトアクション(Allow または Block)が適用されます。CAPTCHA や Challenge のアクションは、リクエスト送信元が人間あるいは正規のブラウザかどうかを確認する仕組みで、確認に成功すると後続の処理へ進み、失敗すると遮断されます。
リクエストの検査では、ヘッダー、クエリ文字列、URI パス、ボディ、Cookie、IP アドレスなどの要素を対象に、文字列一致、正規表現、IP セットとの照合、地理的位置、サイズ条件といった多様な検査が可能です。検査前にテキスト変換(小文字化や URL デコードなど)を適用し、回避を狙った難読化に対応できます。
設計パターン / ベストプラクティス
基盤として AWS マネージドルールのコアルールセットや既知の不正入力対策ルールを採用し、その上にアプリケーション固有の独自ルールを重ねる多層構成が定石です。新しいルールは最初に Count アクションで導入し、ログとメトリクスで誤検知(正規リクエストの遮断)が起きないことを確認してから Block へ切り替えると、安全に展開できます。
マネージドルールはスコープダウンステートメントで適用範囲を絞り込み、不要な検査を避けて WCU 消費とコストを抑えます。レートベースルールを併用すれば、短時間に大量のリクエストを送る送信元を自動的に制限できます。複数の Web ACL に共通するルール構成は、AWS Firewall Manager を使えば組織全体で一元的に展開・統制できます。設定はコンソールではなく IaC(CloudFormation や Terraform など)で管理し、変更履歴と再現性を確保することが望ましいです。
本番のリクエストパターンは事前に予測しきれません。新規ルールはまず Count で観測し、サンプルリクエストとログで影響範囲を見極めてから Block へ昇格させると、正規ユーザーへの誤遮断を防げます。
運用・監視
WAF は CloudWatch にルールごとの許可数・ブロック数・カウント数などのメトリクスを送信します。これらを監視し、急なブロック増加や想定外のパターンを CloudWatch アラームで検知できます。詳細なリクエストログは、Amazon CloudWatch Logs、Amazon S3、Amazon Data Firehose のいずれかへ出力でき、フィールドの編集や条件によるフィルタリングも設定できます。
出力したログは Amazon Athena でクエリして攻撃傾向を分析したり、SIEM へ連携して相関分析に用いたりできます。コンソールでは直近に評価されたサンプルリクエストを確認でき、どのルールがどのリクエストに一致したかを素早く把握できます。運用では、マネージドルールの更新内容を定期的に確認し、誤検知や新たな脅威への対応状況を継続的に見直すことが重要です。
コスト
AWS WAF の料金は主に、作成した Web ACL の数、設定したルールの数、そして処理したリクエスト数に基づく従量課金で構成されます。AWS マネージドルールグループの一部や、ボット対策・不正防止などの高度な機能には、追加の料金が発生する場合があります。
コストを抑えるには、不要なルールや使われていない Web ACL を整理し、スコープダウンステートメントで検査対象を必要な範囲に絞ることが有効です。料金体系や単価は変動するため、見積もりの際は AWS の料金ページと料金計算ツールで最新の情報を確認してください。
セキュリティ
WAF はアプリケーション層の防御を担いますが、単独で全脅威を防げるわけではありません。DDoS 対策の AWS Shield、ネットワーク層のフィルタリングを担う Security Group やネットワーク ACL、転送経路の暗号化を担う TLS 終端などと組み合わせ、多層防御を構成することが前提です。WAF 自体の設定変更は IAM で権限を最小化し、誰が何を変更したかを CloudTrail で追跡できるようにします。
ルールの構成情報や IP セットなどの管理操作は IAM ポリシーで細かく制御できます。ログには機微な情報が含まれる場合があるため、ログ出力時のフィールド編集機能で不要な項目を除外し、保存先の S3 バケットや CloudWatch Logs のアクセス権限を適切に保護してください。
Well-Architected の観点
- セキュリティの柱において、WAF はアプリケーション層(レイヤー 7)の境界防御として位置づけられ、ネットワーク層を守る他のサービスと役割を分担する。
- マネージドルールの活用により、運用負荷を抑えつつ既知の脅威へ継続的に対応でき、防御の最新性を保てる。
- ログとメトリクスを CloudWatch や S3 に集約し、検知・分析・対応のサイクルを回すことが推奨される。
- IaC によるルール管理と Firewall Manager による組織横断の統制が、再現性とガバナンスの観点で評価される。
試験で問われるポイント
- WAF が防ぐのはレイヤー 7 の攻撃(SQL インジェクション、XSS、不正ボットなど)であり、レイヤー 3 や 4 の大規模 DDoS は AWS Shield が主に担う、という役割の違い。
- CloudFront 用の Web ACL はグローバルスコープ、ALB や API Gateway などリージョナルリソース用はリージョナルスコープで作成するという区別。
- レートベースルールで送信元あたりのリクエスト数を制限できること。
- 新規ルールは Count で検証してから Block に切り替える運用の流れ。
- 複数アカウントや多数のリソースに共通ルールを展開する場合は AWS Firewall Manager が適すること。
関連サービス・比較
WAF はアプリケーション層の防御を担い、AWS Shield は DDoS 攻撃に対する防御を担います。両者は競合ではなく補完関係にあり、組み合わせて多層防御を構成するのが一般的です。
| 観点 | AWS WAF | AWS Shield |
|---|---|---|
| 主な防御レイヤー | アプリケーション層(レイヤー7) | ネットワーク層・トランスポート層(レイヤー3と4が中心) |
| 主な対象脅威 | インジェクション・XSS・不正ボット・レート超過 | 大規模な DDoS 攻撃 |
| 防御の仕組み | リクエストをルールで検査し許可・ブロック | DDoS トラフィックの検知と緩和 |
| カスタマイズ性 | ルールやレート制限を柔軟に定義できる | 自動緩和が中心で上位版は専門サポートを含む |
| 関連付け先 | CloudFront・ALB・API Gateway など | CloudFront・ELB・Global Accelerator など |
ハンズオン / CLI例
リージョナルスコープで Web ACL を作成し、ALB に関連付ける流れの例です。実際のリソース ARN やルール定義は環境に合わせて置き換えてください。
# リージョナルスコープで Web ACL を作成(ルール定義は rules.json から読み込む)
aws wafv2 create-web-acl \
--name my-web-acl \
--scope REGIONAL \
--region ap-northeast-1 \
--default-action Allow={} \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=myWebAclMetric \
--rules file://rules.json
# 作成済み Web ACL を ALB に関連付け(リソース ARN は対象に合わせて指定)
aws wafv2 associate-web-acl \
--web-acl-arn arn:aws:wafv2:ap-northeast-1:123456789012:regional/webacl/my-web-acl/EXAMPLE-ID \
--resource-arn arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/my-alb/EXAMPLE \
--region ap-northeast-1
AWS Service
AWS WAFを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
セキュリティ・ID
比較で見る軸
クラウド: AWS / カテゴリ: セキュリティ・ID / 難易度: intermediate
導入後に効く点
CloudFront、ALB、API Gateway、AppSync、App Runner などに Web ACL を関連付けて利用する
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- セキュリティ・ID
- 難易度
- intermediate
- 関連資格
- SCS-C02 / SAA-C03
- 設計柱
- security
判断チェックリスト
- 自社の用途が「セキュリティ・ID / security」に近いか確認する。
- 強みである「HTTP/HTTPS リクエストをルールで検査し、SQL インジェクションや XSS、ボットなどの不正アクセスを防ぐ」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。