アプリケーションに対する正当なリクエストが、AWS WAF の AWS マネージドルールのルールグループによってブロックされます。これらのルールがどのように誤検知を引き起こすのかを理解したいと考えています。また、マネージドルールを有効にしたまま、正当なトラフィックが通過できるようにしたいと考えています。
解決策
まず、AWS マネージドルールによって発生した誤検知を特定します。次に、ラベルまたは scope-down ステートメントを使用して、それらの誤検出を許可リストに追加します。
注: 次の例では IP セットを使用しています。ただし、ヘッダーや URI などのラベルを使用して AWS WAF が検査できる任意の属性をカスタムルールで使用できます。
マネージドルールグループからの誤検知エラーを検出する
次の手順を実行します。
-
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) を設定します。最初に IP セットを作成し、次にラベルまたは scope-down ステートメントを使用します。
注: 明示的な詳細ルールの場合は、ラベルを使用するのがベストプラクティスです。scope-down ステートメントは、ルールグループ内のすべてのルールに対して、範囲外のリクエストを検査しません。
ラベル
AWS マネージドルールによって追加されたラベルを使用して、誤検知を防ぐことができます。これらのラベルが付いたリクエストと一致するカスタムルールを作成する場合は、マネージドルールグループ内のルールのデフォルトアクションを変更してください。
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインで、[保護パック (ウェブ ACL)] をクリックします。
- 該当の保護パックを選択し、[ルールを管理] をクリックします。
- リクエストをブロックする AWS マネージドルールを選択します。
注: リクエストをブロックするルールをログから特定してください。
- [ルールオーバーライド] で、リクエストをブロックするルールのアクションを [カウント] に変更します。
- [ルールを保存] をクリックします。
- 右側のペインで、[ルールを管理] をクリックし、[ルールを追加] を選択します。
- [カスタムルール] を選択し、[次へ] をクリックします。
- [ルールタイプ] で [カスタムルール] を選択し、[次へ] をクリックします。
- [アクション] で [BLOCK] を選択します。
- ルール名を入力します。
- [リクエストが以下の場合:] で [すべてのステートメントに一致 (AND)] を選択します。
- [ステートメント 1] では、以下のオプションを使用します。
[検査] で [ラベルあり] を選択します。
[ステートメント] で [ラベル] を選択します。
[マッチキー] で、リクエストをブロックする AWS マネージドグループのルールグループのルールに対するラベルを選択します。
- [ステートメント 2] では、以下のオプションを使用します。
[検査] で [送信元の IP アドレス] を選択します。
[IP アドレスリスト] で、該当の IP セットを選択します。
[ルール設定] で、[ステートメントを否定します (NOT)] を選択します。
[オリジンの送信元 IP アドレス] で、[送信元 IP アドレス] を選択します。
- [ルールを追加] をクリックします。
- [ルール順序を編集] をクリックし、新しいルールを AWS マネージドルールグループの下にドラッグします。
注: ルールは表示された順序で適用され、新しいルールは AWS マネージドルールグループの下に配置する必要があります。
- [ルール順序を保存] をクリックします。
scope-down ステートメント
scope-down ステートメントを使用して、ルールまたはルールグループが評価するリクエストの範囲を絞り込みます。scope-down ステートメントをルールグループに追加すると、リクエストが検査されます。このステートメントは、ステートメントに含まれる正当な IP アドレスをスキップします。
次の手順を実行します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] で [保護パック (ウェブ ACL)] を選択します。
- 保護パックを選択し、[ルールを管理] をクリックします。
- リクエストをブロックする AWS マネージドルールのルールグループを選択します。
- [検査] で、[一致ステートメント] を選択し、次のオプションを使用します。
[リクエストが以下の場合:] で [ステートメントと一致しない (NOT)] を選択します。
[検査] で [送信元の IP アドレス] を選択します。
[IP アドレスリスト] で、該当の IP セットを選択します。
[ルール設定] の [オリジンの送信元 IP アドレス] で、[送信元 IP アドレス] をオリジンとして選択します。
- [ルールを保存] をクリックします。