アプリケーションに対する正当なリクエストが、AWS WAF の AWS マネージドルールのルールグループによってブロックされます。これらのルールがどのように誤検知を引き起こすのかを理解したいと考えています。また、マネージドルールを有効にしたまま、正当なトラフィックが通過できるようにしたいと考えています。
解決策
まず、AWS マネージドルールによって発生した誤検知を特定します。次に、ラベルまたはスコープダウンステートメントを使用して、それらの誤検出を許可リストに追加します。
マネージドルールグループからの誤検知エラーを検出する
次の手順を実行します。
-
AWS WAF ログの TerminatingRuleID で、正当なリクエストをブロックしているマネージャールールグループを見つけます。AWS WAF ログの例を以下に示します。
"timestamp": 1712236911743,
"formatVersion": 1,
"webaclId": "arn:aws:wafv2:us-west-2:***:regional/webacl/WAFtester/3c372***-***",
"terminatingRuleId": "AWS-AWSManagedRulesCommonRuleSet",
"terminatingRuleType": "MANAGED_RULE_GROUP",
"action": "BLOCK",
"terminatingRuleMatchDetails": [],
"ruleGroupList": [{
"ruleGroupId": "AWS#AWSManagedRulesCommonRuleSet",
"terminatingRule": {
"ruleId": "SizeRestrictions_BODY",
"action": "BLOCK",
"overriddenAction": "BLOCK",
"ruleMatchDetails": null
},
"nonTerminatingMatchingRules": [],
"excludedRules": null,
"customerConfig": null
}],
-
terminatingRule で ruleId を見つけて、正当なリクエストをブロックするルールを特定します (例: ****"SizeRestrictions_Body")。
-
誤検出を引き起こす属性または基準を特定します。例えば、データベース管理者がストアドプロシージャをリモートで実行する場合、そのリクエストに大量のデータが含まれる可能性があります。ManagedRulesCommon RuleSet ルールグループは、SizeRestrictions_Body により、これらのリクエストをブロックします。
許可リストに誤検知を追加する
ウェブアクセスコントロールリスト (ウェブ ACL) を設定して、誤検知の原因となるマネージドルールグループ経由の正当なリクエストを許可します。マネージドルールグループを変更するには、ラベルを使用するか、スコープダウンステートメントを使用します。
注: 明示的な詳細ルールの場合は、ラベルを使用するのがベストプラクティスです。スコープダウンステートメントは、ルールグループ内のすべてのルールに対して、スコープ外のリクエストを検査しません。
ラベル
AWS マネージドルールによって追加されたラベルを使用して、誤検知を防ぐことができます。ラベルが付されたリクエストを照合するカスタムルールを作成することで、マネージドルールグループ内のルールのデフォルトアクションを変更できます。
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインで [AWS WAF] を選択します。
- [リソースと保護パック] を選択します。
- [保護パック] でドロップダウンの [マネージドセットとグループ] を選択し、[IP セットの管理] を選択します。
- 右側のペインで、[新しい IP セットの作成] を選択します。
- IP セット名を入力します。
この IP セットを CloudFront で使用する場合は、[スコープ] で [CloudFront] を選択します。
(オプション) [説明] を入力します。
IP バージョンを選択します。
IP アドレスを入力します。
- [保存] を選択します。
- 目的の保護パックを探し、[ルール] の隣にある [表示と編集] を選択します。
- 右側のペインから、リクエストをブロックしている AWS マネージドルールを選択します。
- [ルールのオーバーライド] において、リクエストをブロックするルールのアクションを [カウント] に変更します。
- [ルールを保存] を選択します。
- 右側のペインで [ルールを追加] を選択します。
[カスタムルール] を選択し、[次へ] を選択します。
[カスタムルール] を再度選択し、[次へ] を選択します。
- ルールの [アクション] を BLOCK に設定します。
- [ルール名] を入力します。
- [リクエストが次の場合] でドロップダウンを展開し、[すべてのステートメントに一致 (AND)] を選択します。
- [ステートメント 1] で次の手順を実行します。
[検査] で [ラベルあり] を選択します。
[ステートメント] で [ラベル] を選択します。
[マッチキー] において、リクエストをブロックしている AWS マネージドグループのルールグループ内のルールに対するラベルを選択します。
- [ステートメント 2] で次の手順を実行します。
[検査] で [送信元の IP アドレス] を選択します。
[ステートメント] の [IP アドレスリスト] で 目的の IP セットを選択します。
[ルール設定] を展開し、[ステートメントの否定 (NOT)] で [ステートメント結果の否定] を選択します。
発信元アドレスとして使用する IP アドレスには、[ソース IP アドレス] を選択します。
- [ルールの作成] を選択します。
- ルールの優先度を設定するには、右側のペインで [ルール順序の編集] を選択し、このルールを AWS マネージドルールグループよりも下にドラッグします。
注: ルールは表示された順序で適用されます。
- [ルール順序を保存] を選択します。
**スコープダウンステートメント **
スコープダウンステートメントを使用して、ルールまたはルールグループが評価するリクエストの範囲を絞り込みます。スコープダウンステートメントをルールグループに追加すると、リクエストを検査できます。このステートメントは、ステートメントに含まれる正当な IP アドレスをスキップします。
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインで [AWS WAF] を選択します。
- [リソースと保護パック] を選択します。
- [保護パック] で [マネージドセットとグループ] をクリックし、[IP セットの管理] を選択します。
- 右側のペインで、[新しい IP セットの作成] を選択します。
- IP セット名を入力します。
この IP セットを CloudFront で使用する場合は、[スコープ] で [CloudFront] を選択します。
(オプション) [説明] を入力します。
IP バージョンを選択します。
IP アドレスを入力します。
- [保存] を選択します。
- 目的の保護パックを探し、[ルール] の隣にある [表示と編集] を選択します。
- 右側のペインから、リクエストをブロックしている AWS マネージドルールのルールグループを選択します。
- [検査] で [一致ステートメント] を選択します。
- [リクエストが以下の場合] で [ステートメントと一致しない (NOT)] を選択します。
- [検査] で [送信元の IP アドレス] を選択します。
- [ステートメント] の [IP アドレスリスト] で 目的の IP セットを選択します。
- [ルール設定] を展開し、[送信元 IP アドレス] を送信元として選択します。
- [ルールを保存] を選択します。