AWS WAF 新コンソールの「保護パック」を新規作成する時に、何をどう選択したら良いのか調べてみた
いわさです。
先日の AWS re:Inforce 2025 のアップデートで AWS WAF のコンソールが大幅に変更されたのをご存知ですか。
変更されたというか、最早別物でして、多くの方はまだ新しいコンソールを使いこなせていないのではないでしょうか。
私もまだ新しいコンソールを使えておらず、「古い WAF コンソールに切り替える」をつい押してしまっています。
ただ、新しいコンソールは中々高機能そうなので、使いこなしてみたいとも思っています。
そこで今回は、まず新しいコンソールで AWS WAF の構築を行う際に最初に必要となる新概念「保護パック」の作成パターンを整理してみたので、紹介します。
先にまとめ
- 自分でルールを選択したい人は「AWS WAF が提供するすべての保護」を選択しましょう
- これが従来どおり、マネージドルールの選択含めて自分で一から Web ACL を構築するやつ
- この時のアプリカテゴリとかトラフィックソースはなんでも良い
- それ以外の場合は「アプリカテゴリ」と「保護を選択」によってルールが自動で作成されます。要はお任せモード。ただ、後からルールのカスタマイズは可能です。
- 「組織と技術スタックの重大な保護」を選択すると、選択したアプリカテゴリに適したルールが自動で組み合わされる
- 「組織と技術スタックの推奨保護」を選択すると、重大な保護のルールに加えていくつかのルールが追加される。推奨保護だけ選択とかはない。「重要保護ルール+その他の推奨ルール」という意味。
- 「トラフィックソース」はルール選択には影響しなくて、一部ルールのアクションが変わるだけ(デフォルト or カウント)
アプリカテゴリによって選択されるルールをまとめました。我ながらちょっとわかりにくい図になってしまった。チバユキ氏の爪の垢を煎じて飲ませたい。いや、飲ませてください。
アプリカテゴリで「APIおよび統合サービス」を選んだ場合は基本ルール(CommonRule や IPリスト、地理的ブロックなど)のみで、それ以外のカテゴリは SQLiRuleSet + α が追加で自動構成されます。
注意点としてはこれらの自動構成の場合、先日登場した「AntiDDosRuleSet」が必ず含まれます。20ドル/月かかるので注意。[1]
推奨保護で追加されるルールは、アプリカテゴリに関わらずすべてこのルールが追加されました。
BotControl はともかく、AmazonIpReputationList とか AnonymousIpList ってマストなのかなと思っていたのですが推奨くらいな温度感だったのか。
保護パック作成の流れ
では実際に保護パック作成の細かい部分を解説していきます。
まず、保護パック = 従来の Web ACL と考えて OK です。公式ドキュメントでもほぼ同じ機能だと言われています。
A protection pack or web ACL performs essentially the same function. [2]
保護パック作成時にはアプリカテゴリ、トラフィックソース、保護するリソース、保護内容を選択する必要があります。初めてだとおそらくここで「ど、どれを選択すれば良いんだ...」となると思います。
上記を選択して保護パックを作成すると次のように保護パックの一覧から簡易的なダッシュボードや対象リソース、ルール、ログ記録などを確認することが出来ます。
流れはそれだけです。
「どれを選択すれば良いんだ...」とならないために、何を選択したらどういう挙動になるのかを把握しておくと良さげです。
「AWS WAF が提供するすべての保護」は従来どおり一からルールを構築する
まず、一番単純なところなのですが「保護を選択」にて3つめの選択肢「AWS WAF が提供するすべての保護」を選択すると、ユースケースごとのルールの自動選択がされず、一からユーザーがルールを設定していく形になります。
旧コンソールの Web ACL 作成と同じイメージです。
以下はマネージドルールの選択画面です。
従来のコンソールとかなり違うので慣れるまで大変かもしれませんが、追加料金が発生するルールとしないルールで大きくグループ分けされています。
特にルールを選択しなければ、従来どおりルールなしの Web ACL(保護パック)を作成しておくことも可能です。
トラフィックソースを選択すると一部ルールのアクションが変わる
続いて、トラフィックソースも単純なのでこちらも先に説明します。
こちらを選択すると、Bot Control 保護と、レイヤー7 DDoS 攻撃対策のアクションが切り替わります。
両方あるいは API を選択した場合はカウントモードで、ウェブの場合はデフォルト、になります。
それぞれのデフォルトアクションは後ほど変更も可能ですが、上記の挙動だけ知っておけばあまりここも悩まなくて済むと思います。
推奨保護を選択すると重要な保護に加えていくつかの推奨ルールが追加される
ユースケースに応じたルールの自動作成を行う場合、「保護を選択」で「推奨保護」か「重要な保護」のどちらかを選択することになります。
後ほど後述しますがアプリカテゴリで何を選択するかによって「重要な保護」を選択した時で自動選択されるルールが変わります。
そして、推奨保護を選択すると、その重要な保護で選択されるルールに加えて以下のルールが追加選択されます。
Web ACL で見たとき、以下のカスタムルール/マネージドルールが追加されます。
- HTTPメソッド別レート制限 - RateBasedRuleGET
- HTTPメソッド別レート制限 - RateBasedRulePOST
- IPレピュテーションリスト - AmazonIpReputationList
- DDoS IP向けレート制限 - ManagedIPDDoSRateLimit
- 匿名IPリスト - AnonymousIpList
- ボット制御 - BotControlRuleSet
こちらに関してはアプリカテゴリの選択状況に関わらずどうやら一律で上記ルールが追加対象となるようです。
アプリカテゴリごとの自動ルール選択
ここがほぼメインというか変わるところですが、選択したアプリカテゴリによって自動で選択されるルールが変わります。アプリカテゴリは複数選択することが可能で、複数選択するとその全てを満たす形で対象ルールが全て選択されます。
本日時点では以下の 6 つのアプリカテゴリから 1 つ以上選択します。
今回、これらを使うルールをひとつづつ作成し、どういったルール構成の Web ACL が作成されるか確認してみました。
各アプリカテゴリごとに次のルールが作成されました。
-
APIおよび統合サービス
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
-
コンテンツおよび公開システム
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
- SQLインジェクション対策 - AWS-AWSManagedRulesSQLiRuleSet
- 管理者保護 - AWS-AWSManagedRulesAdminProtectionRuleSet
-
eコマースおよび取引プラットフォーム
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
- 既知悪意入力対策 - AWS-AWSManagedRulesKnownBadInputsRuleSet
- PHP脆弱性対策 - AWS-AWSManagedRulesPHPRuleSet
- SQLインジェクション対策 - AWS-AWSManagedRulesSQLiRuleSet
- 管理者保護 - AWS-AWSManagedRulesAdminProtectionRuleSet
-
エンタープライズおよびビジネスアプリケーション
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
- 既知悪意入力対策 - AWS-AWSManagedRulesKnownBadInputsRuleSet
- SQLインジェクション対策 - AWS-AWSManagedRulesSQLiRuleSet
- Linux脆弱性対策 - AWS-AWSManagedRulesLinuxRuleSet
-
メディアおよびファイル処理
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
- 既知悪意入力対策 - AWS-AWSManagedRulesKnownBadInputsRuleSet
- SQLインジェクション対策 - AWS-AWSManagedRulesSQLiRuleSet
- Linux脆弱性対策 - AWS-AWSManagedRulesLinuxRuleSet
-
その他
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
- 既知悪意入力対策 - AWS-AWSManagedRulesKnownBadInputsRuleSet
- SQLインジェクション対策 - AWS-AWSManagedRulesSQLiRuleSet
- Linux脆弱性対策 - AWS-AWSManagedRulesLinuxRuleSet
整理すると、まず「APIおよび統合サービス」は基本ルールのみという感じで次の9ルールが選択されます。
- DDoS対策 - AWS-AWSManagedRulesAntiDDoSRuleSet
- IPv4許可リスト - {カテゴリ名}_IPV4_Allow
- IPv6許可リスト - {カテゴリ名}_IPV6_Allow
- IPv4ブロックリスト - {カテゴリ名}_IPV4_Block
- IPv6ブロックリスト - {カテゴリ名}_IPV6_Block
- 地理的ブロック - GeoRule
- 全体レート制限 - GlobalRateBasedRule
- ボディサイズ制限 - BodySizeRestrictionRule
- 共通ルールセット - AWS-AWSManagedRulesCommonRuleSet
おもしろいのは、IP許可リスト/ブロックリストや地理的ブロック、レート制限などのカスタムルールが自動作成される点です。マネージドルール以外に最低限必要になりそうなカスタムルールが含まれていて良いなと思いました。
そして、それ以外のアプリカテゴリを選択すると、上記に加えてSQLインジェクション対策(AWS-AWSManagedRulesSQLiRuleSet)+αが設定される感じです。
プラスアルファの部分はカテゴリごとに異なっていて、「コンテンツおよび公開システム」と「eコマースおよび取引プラットフォーム」であれば管理者保護(AWS-AWSManagedRulesAdminProtectionRuleSet)が追加されたり、「エンタープライズおよびビジネスアプリケーション」「メディアおよびファイル処理」「その他」であればLinux脆弱性対策(AWS-AWSManagedRulesLinuxRuleSet)が設定されます。
ユースケースごとにどういったルールを設定すべきかひとつの参考になりそうです。
さいごに
本日は AWS WAF 新コンソールの「保護パック」を新規作成する時に、何をどう選択したら良いのかわからなかったので調べてみました。
一からルール構築しても良いですし、ユースケースごとに自動選択しつつチューニングするのも良いですね。
まだ全然慣れていないんですけども、しばらく頑張って新コンソールを使ってみます。