AWS WAF のカウントルールアクションのメトリクスとログはどのようにフォーマットされていますか?

所要時間3分
0

AWS WAF をセットアップしましたが、ウェブ ACL の一部のルールはカウントアクションにあります。カウントルールアクションのルールについて、Amazon CloudWatch メトリクスとログを分析するにはどうすればよいですか?

簡単な説明

カウントルールアクションを使用して、通常のアクション設定でルールを実装する前に、ルールをテストすることができます。AWS WAF では、カウントルールアクションのルールに対してリクエストを評価し、メトリックス、リクエストサンプル、およびログの一致を報告します。

また、カウントルールアクションを使用して、誤検出を生成しているルールに対してトラブルシューティングすることもできます。誤検出は、ルールまたはルールグループが、予期しないブロックするトラフィックをブロックした場合に発生します。許可したいリクエストをブロックしているルールを特定した場合、そのルールのアクションを更新してカウントすることができます。これにより、そのルールはリクエストに基づいて動作しなくなります。詳細については、「AWS マネージドルールが原因で発生する誤検知を検出してセーフリストに追加する方法を教えてください」を参照してください。

解決方法

カウントルールのアクションでメトリクスとログがどのようにフォーマットされるかを理解するために、次の 3 つのシナリオを考えてみましょう。

  1. カスタムルールのルールアクションをカウントモードに設定します。
  2. AWS Managed Rules ルールグループで、個々のルールのルールアクションをカウントモードに設定します。
  3. カウントするルールグループ全体のアクションを上書きします。

カスタムルールのルールアクションをカウントモードに設定する

カウントルールアクションを持つ単一のカスタムルールである (Geo-Count) を持つウェブ ACL (Test1-ACL) があります。Geo-Count ルールは、リクエストが米国から発信された場合にリクエストをカウントします。クライアント IP が別の国に属している場合、ウェブ ACL のデフォルトアクションと Allow アクションが一致します。

以下は、このルールの JSON 表現です。

{
  "Name": "Geo-Count",
  "Priority": 0,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "Geo-Count"
  }
}

リクエストが米国にあるクライアント IP から発信された場合は、次のようになります。

  • リクエストはカウントされます。
  • カスタムルールである Geo-Count の CloudWatch メトリクスは、CountedRequests メトリクスのデータポイントを示します。
    注: CloudWatch は、ゼロ以外の値がある場合にのみ CountedRequests メトリクスを報告します。データを表示するには、CloudWatch コンソールの [Graphed metrics] タブで統計を [Sum] に切り替えます。
  • Geo-Count はカウントアクションを含むカスタムルールであるため、AWS WAF はリクエストをカウントします。
  • 次に、AWS WAF はウェブ ACL のデフォルトアクションに対してリクエストを評価します。ウェブ ACL のデフォルトアクションは Allow に設定されているため、リクエストは許可されます。
  • このアクションのデータポイントは、ウェブ ACL の AllowedRequests メトリクスに表示されます。

AWS WAF 名前空間に含まれるメトリックスとディメンションの詳細については、「AWS WAF のメトリクスとディメンション」を参照してください。

カスタムルールのアクションをカウントに更新すると、そのルールはロギングの観点からは非終了ルールと見なされます。そのため、リクエストがカウントモードのカスタムルールに一致すると、次のフィールドがログに記録されます。

  • nonTerminatingMatchingRules: リクエストに一致する非終了ルールのリスト。
  • ruleId: リクエストに一致し、終了していなかったルールの ID。
  • action: これは常にカウントです。
  • ruleMatchDetails: リクエストに一致したルールに関する詳細情報。このフィードは、SQL インジェクション (SQLi) およびクロスサイトスクリプティング (XSS) の一致ルールステートメントに対してのみ入力されます。

Geo-Count ルールがリクエストと一致する場合、次の例に示すように、ログには nonTerminatingMatchingRules の詳細が表示されます。

"nonTerminatingMatchingRules": [{
  "ruleId": "Geo-Count",
  "action": "COUNT",
  "ruleMatchDetails": [

  ]
}]

使用可能なすべてのログフィールドの詳細については、「ログフィールド」を参照してください。

ウェブ ACL のログ記録を有効にするには、「ウェブ ACL のログ記録の管理」を参照してください。

AWS Managed Rules ルールグループで、個々のルールのルールアクションをカウントモードに設定する

ルールグループ内のルールのアクションを上書きして、ルールの一部またはすべてをカウントするように設定することができます。ルールグループ内でカウント以外に設定されたルールアクションの場合、上書きによってそのアクションが変更され、一致するリクエストのみがカウントされます。

ウェブリクエストがルールに一致する場合、AWS WAF は一致をカウントとして処理し、ルールグループ内の後続のルールを引き続き評価します。

ルールグループでカウントするようにルールアクションを設定する方法の詳細については、「ルールグループ内でカウントするようにルールアクションを設定する」を参照してください。

AWS マネージドルールルールグループ (AWSManagedRulesKnownBadInputsRulesSet) を含むウェブ ACL (Test2-ACL) があります。このウェブ ACL には他のルールはなく、ウェブ ACL のデフォルトアクションは Allow アクションで設定されています。

AWSManagedRulesKnownBadInputsRulesSet ルールグループ内の Log4JRCE ルールを、カウントアクションに更新するとします。これで、クライアントリクエストのコンポーネント (URI、クエリ文字列など) に Log4j の脆弱性がある場合、そのリクエストは Log4JRCE ルールによってカウントされます。リクエストがルールグループ内の他のルールと一致しない場合、ウェブ ACL のデフォルトアクションによって許可されます。

以下は、このルールの JSON 表現です。

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet",
      "ExcludedRules": [
        {
          "Name": "Log4JRCE"
        }
      ]
    }
  },
  "OverrideAction": {
    "None": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

ルールグループ内のルールをカウントするようにルールアクションを設定した場合、これらのルールはルールグループ内の除外ルールと見なされます。メトリクスをオンにしている場合、除外されたルールごとにカウントメトリクスを受け取ります。

リクエストが Log4JRCE ルールに一致すると、次のようになります。

  • リクエストはカウントされます。
  • Log4JRCE ルールの CloudWatch メトリクスは、CountedRequests メトリクスにデータポイントを示します。

AWSManagedRulesKnownBadInputsRuleSet 内の他のルールがリクエストに一致しない場合、以下が発生します。

  • リクエストは、ウェブ ACL のデフォルトアクションによって許可されます。
  • ウェブ ACL の AllowedRequests メトリクスにデータポイントが表示されます。

除外されたルールの場合、以下のフィールドが AWS WAF ログにキャプチャされます。

  • excludedRules: 除外したルールグループ内のルールのリスト。これらのルールのアクションは、カウントに設定されています。
  • exclusionType: 除外されたルールにアクションカウントがあることを示すタイプ。
  • ruleId: 除外されるルールグループ内のルールの ID。

Log4JRCE ルールがリクエストと一致する場合、次の例に示すように、ログには excludedRules の詳細が表示されます。

"ruleGroupList":[
  {
    "ruleGroupId":"AWS#AWSManagedRulesKnownBadInputsRuleSet",
    "terminatingRule":null,
    "nonTerminatingMatchingRules":[
      
      ],
    "excludedRules":[
      {
        "exclusionType":"EXCLUDED_AS_COUNT",
        "ruleId":"Log4JRCE"
      }
    ]
  }
]

ルールグループ内の個々のルールがカウントルールアクションに更新されると、次のようになります。

  • このルールに一致するリクエストのログには、nonTerminatingMatchingRules フィールドのルールのカウントアクションは含まれません。
  • AWS WAF ログでは、excludedRules フィールドの下にこのルールが表示されます。

ルールグループ全体のアクションをカウントに上書きする

カウントするルールグループのアクションを上書きする方法については、「結果ルールグループのアクションをカウントに上書きする」を参照してください。

カウントするルールグループのアクションを上書きする方法については、「ルールグループのアクションをカウントに上書きする」を参照してください。

AWS マネージドルールルールグループ (AWSManagedRulesKnownBadInputsRulesSet) を含むウェブ ACLである (Test3-ACL) があるとします。このウェブ ACL には他のルールはなく、ウェブ ACL のデフォルトアクションは Allow です。AWSManagedRulesKnownBadInputsRuleSet ルールグループ内のすべてのルールは、ルールで定義されているデフォルトのアクションを使用しています。これは、このルールグループ内のルールがカウントに設定されていないことを意味します。ただし、[ルールグループのアクションをカウントに上書き] オプションはオンになっています。

以下は、このルールの JSON 表現です。

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet"
    }
  },
  "OverrideAction": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

クライアントリクエストのコンポーネント (URI、クエリ文字列など) に Log4j の脆弱性があると、次のようになります。

  • リクエストは Log4JRCE ルールによってブロックされます。
  • ブロックは終了アクションであるため、AWS WAF はルールグループの評価を停止し、終了アクションの結果をウェブ ACL に返します。
  • この時点で、ルールグループのアクションをカウントに上書きが有効になります。ルールグループの終了アクションは、カウントに上書きされます。
  • その後、AWS WAF はウェブ ACL の残りのルールを処理し続けます。

リクエストが AWSManagedRulesKnownBadInputsRuleSet ルールグループ内の Log4JRCE ルール (またはその他のルール) と一致すると、次のようになります。

  • CloudWatch は、ルールグループ名 AWSManagedRulesKnownBadInputsRuleSet に対応するデータポイントをCountedRequests メトリクスに表示します。
  • AWS WAF は、上書きが行われた後もウェブ ACL の残りのルールを処理し続けます。そのため、リクエストは最終的にウェブ ACL のデフォルトアクションと照合されます。これは、ウェブ ACL の AllowedRequests メトリクスのデータポイントとして表示されます。
  • AWS WAF ログでは、一致するリクエストの nonTerminatingMatchingRules フィールドにカウントアクションが含まれています。
  • さらに、ruleGroupList には、終了アクションがカウントに上書きされる前にリクエストを最初にブロックしたルールグループ内のルールが表示されます。
  • Log4JRCE ルールがリクエストと一致する場合、次の例に示すように、ログには ruleGroupListnonTerminatingMatchingRules の詳細が表示されます。
"ruleGroupList": [{
  "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
  "terminatingRule": {
      "ruleId": "Log4JRCE",
      "action": "BLOCK",
      "ruleMatchDetails": null
    },
  "nonTerminatingMatchingRules": [

  ],
    "excludedRules": null
  }
],
"rateBasedRuleList": [

],
"nonTerminatingMatchingRules": [{
    "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
    "action": "COUNT",
    "ruleMatchDetails": [

  ]
}]

関連情報

ウェブ ACL でのルールおよびルールグループアクションの基本的な処理

AWS公式
AWS公式更新しました 2年前