【目次】
1. はじめに
2019/11/25 AWS から new AWS WAF がリリースされました。今回は画面【パターンセット・ルールグループ】について解説していきます。
第1回 : 【new AWS WAF】変更点まとめ
第2回 : 【new AWS WAF】AWS マネジメントコンソール操作(マネージドルール編)
第3回 : 【new AWS WAF】AWS マネジメントコンソール操作(オリジナルルール編)
第4回 : 【new AWS WAF】AWS マネジメントコンソール操作(パターンセット・ルールグループ編)(本記事)
第5回 : 【new AWS WAF】JSON 解説
2. パターンセットとは
AWS WAF Classic で正規表現で使用されていましたパターンセットが、IP 制限にも適用出来るようになりました。パターンセットは予め定義しておいた内容(正規表現、IP 制限)をルールを構築する際に紐づけて使用するものです。
IP でも使用出来るようになったので、例えば、関連会社の IP を全て許可するパターンを作っておけば、新しく作った環境にその IP パターンセットをホワイトリストで使用し、少し絞った自社のみの IP パターンセットも用意して、サイトとの特性により、使い分けることも出来そうです。変更は、パターンセット側のみに実施すればいいので、複数の管理を行っている方には、嬉しい機能となっています。
3. 登録方法
画面左側の「 Regex pattern sets 」を選択して、画面右上の「 Create regex pattern set 」を押下します。
名前と説明を入力して、画面下部に正規表現を入力していきます。
一つの正規表現パターンを一行ずつ記載していきます。
最後に右下の「Create regex pattern set 」を押下して、終了です。
Web ACL にルールを紐付けていきます。「 Add rules 」を押下します。
「 Add my own rules and rule groups 」を選択します。
前回のオリジナルルール編と同様にルールを作成していきます。
今回選ぶ「 Match type 」が、正規表現のルールとなります。
「 Match type 」を選択すると、正規表現のパターンセットを選択する項目が、追加されました。先ほど作成されたパターンセットを選択します。
このまま進んで保存すれば、ルールの設定は終了です。
JSON 形式を見てみます。
{ "Name": "test-regex-rule", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "test-regex-rule" }, "Statement": { "RegexPatternSetReferenceStatement": { "FieldToMatch": { "QueryString": {} }, "ARN": "arn:aws:wafv2:ap-northeast-1:***********:regional/regexpatternset/test-regex/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "TextTransformations": [ { "Type": "LOWERCASE", "Priority": 0 } ] } } }
パターンセットの内容が書いてあるわけではなく、ARN とのリンクのみでした。
中身を更新しても ARN が変わるわけではないので、パターンセットの更新で紐づいている対象は更新されることになります。
IP パターンセットも同様のため設定画面のみ確認します。
4. ルールグループとは
AWS WAF Classic でも使用できましたが、複数のルールをグループとしてまとめる機能も ARN で呼び出す形になります。他のルールセットと同様にルールグループを書き換えれば紐づいているルールも変わることになるので、複数 ACL を管理している場合は便利な機能です。
まずは作成してみます。
名前を入力します。
ルールとキャパシティの設定画面です。
試しにルールを入れてみます。
ルールを入れると、キャパシティが自動で更新されました。
次の画面では、ルール順の変更が出来ます。
最後に確認画面です。
設定自体は、簡単に出来ました。
キャパシティを編集しない状態で登録したルールで、自動更新された内容を利用したところ、一点問題がありました。
画面上からルールグループにルールを追加しようとすると、キャパシティを超えてしまうという注意文が出て、追加出来ませんでした。変更の発生を考えると、事前にある程度の値で、宣言しておく必要がありました。このキャパシティは、WCU でのコストとなります。独自に作成可能なマネージドルールのようなもの、とイメージすると、分かりやすいかと思います。
では実際に紐づけていきます。
ルール追加は、ACL の画面から行います。
ルールグループを選択して、登録済みのルールグループを選択するだけで完了です。
ルール全体を COUNT で登録することも出来ます。
マネージドルールと同様にルールグループ内の一部ルールのみを COUNT にする
ことも可能です。まずはルールの編集を選びます。
特定のルールを COUNT に出来ました。
JSON の状態を確認します。
正規表現のルールセット同様に ARN で呼び出されています。
また、マネージドルールと同様に一部ルールが ExcludedRules になっていることが確認出来ました。
{ "Name": "test", "Id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ARN": "arn:aws:wafv2:ap-northeast-1:************:regional/webacl/test/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "DefaultAction": { "Allow": {} }, "Description": "", "Rules": [ { "Name": "test-rule-group", "Priority": 0, "Statement": { "RuleGroupReferenceStatement": { "ARN": "arn:aws:wafv2:ap-northeast-1:************:regional/rulegroup/test-group/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ExcludedRules": [ { "Name": "test_rule1" } ] } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "test-rule-group" } }, { "Name": "test-regex-rule", "Priority": 1, "Statement": { "RegexPatternSetReferenceStatement": { "ARN": "arn:aws:wafv2:ap-northeast-1:************:regional/regexpatternset/test-regex/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "FieldToMatch": { "QueryString": {} }, "TextTransformations": [ { "Priority": 0, "Type": "LOWERCASE" } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "test-regex-rule" } }, { "Name": "AWS-AWSManagedRulesAdminProtectionRuleSet", "Priority": 2, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesAdminProtectionRuleSet", "ExcludedRules": [ { "Name": "AdminProtection_URIPATH" } ] } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesAdminProtectionRuleSet" } }, { "Name": "AWS-AWSManagedRulesCommonRuleSet", "Priority": 3, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesCommonRuleSet", "ExcludedRules": [ { "Name": "UserAgent_BadBots_HEADER" }, { "Name": "SizeRestrictions_URIPATH" }, { "Name": "EC2MetaDataSSRF_URIPATH" } ] } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesCommonRuleSet" } } ], "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "test" }, "Capacity": 860 }
5. おわりに
WCU を意識すれば、独自のルールセットを作成して管理することが可能です。操作も分かりやすく JSON 形式でも認識しやすいものでした。