次の方法で共有


Azure Web アプリケーション ファイアウォールの監視とログ記録

Azure Front Door の Azure Web Application Firewall には、Web アプリケーション ファイアウォール (WAF) のパフォーマンスと実行するアクションを把握するのに役立つ豊富なログとテレメトリが用意されています。

Azure Front Door の WAF ログは、Azure Monitor と統合されています。 Azure Monitor により、WAF のアラートやログなどの診断情報を追跡できます。 Azure Front Door リソース内での WAF の監視は、Azure portal の [診断] タブから、コードとしてのインフラストラクチャ手法によって、または Azure Monitor を直接使用して構成できます。

メトリック

Azure Front Door では、WAF の動作を把握するのに役立つメトリックが自動的に記録されます。

WAF のメトリックにアクセスするには:

  1. Azure portal にサインインし、Azure Front Door プロファイルに移動します。
  2. 左端のペインの [監視] で、[メトリック] タブを選択します。
  3. [Web Application Firewall 要求数] メトリックを追加して、WAF ルールに一致する要求の数を追跡します。

アクションの種類とルール名に基づいて、カスタム フィルターを作成できます。 メトリックには、Log を除くすべてのアクションとともに要求が含まれます。

Azure Front Door WAF のメトリックを示すスクリーンショット。

JavaScript チャレンジ (プレビュー) メトリック

JavaScript チャレンジ WAF メトリックにアクセスするには、次のようにします。

  • Web Application Firewall の JS Challenge Request Count メトリックを追加して、JavaScript チャレンジ WAF ルールに一致する要求の数を追跡します。

このメトリックの一部として、次のフィルターが提供されます。

  • PolicyName: これは WAF ポリシー名です
  • ルール: これには、任意のカスタム ルールまたはボット ルールを指定できます
  • アクション: JS チャレンジ アクションには指定できる以下の 4 つの値があります
    • Issued (発行): JS チャレンジが初めて呼び出されます
    • Passed (合格): JS チャレンジの計算に成功し、応答を受け取りました
    • Valid (有効): JS チャレンジの有効性 Cookie が存在しました
    • Blocked (ブロック): JS チャレンジの計算に失敗しました

JavaScript チャレンジ メトリックを示すスクリーンショット。

ログと診断

Azure Front Door WAF は、要求ごと、および検出された脅威ごとに詳細なレポートを提供します。 ログ記録は、Azure Monitor のログを使用して Azure の診断ログおよびアラートと統合されます。

既定では、ログは有効になっていません。 ログを明示的に有効にする必要があります。 Azure portal で、[診断設定] タブを使用してログを構成できます。

WAF ログを有効にする方法を示すスクリーンショット。

ログ記録が有効で WAF ルールがトリガーされた場合は、WAF ポリシーの動作を分析およびデバッグするために、一致するパターンがプレーン テキストでログに記録されます。 除外を使用すると、ルールを微調整し、ログから除外するデータを除外できます。 詳細については、「Front Door の除外リストを使用する Web Application Firewall (WAF)」を参照してください。

次の 3 種類の Azure Front Door ログを有効にすることができます。

  • WAF ログ
  • アクセス ログ
  • 正常性プローブ ログ

アクティビティ ログは既定で有効になっており、Azure Front Door プロファイルへの構成変更など、Azure リソースに対して実行される操作を可視化します。

WAF ログ

ログ FrontDoorWebApplicationFirewallLog には、WAF ルールに一致する要求が含まれます。

ログ FrontdoorWebApplicationFirewallLog には、WAF ルールに一致する要求が含まれます。

次の表に、要求ごとにログに記録される値を示します。

プロパティ 説明
アクション 要求に対して実行されるアクション。 ログには、すべてのアクションとともに要求が含まれます。 アクションは次のとおりです。
  • Allowallow: 要求は処理を続行することが許可されました。
  • Blockblock: 要求は、要求をブロックするように構成された WAF 規則と一致しました。 または、異常スコアリングのしきい値に達したために、要求がブロックされました。
  • Loglog: 要求は、Log アクションを使用するように構成された WAF 規則と一致しました。
  • AnomalyScoringlogandscore: 要求が WAF ルールに一致しました。 この規則は異常スコアリングに反映されます。 同じ要求で実行される他の規則によって、要求がブロックされる場合とされない場合があります。
  • JS ChallengeJSChallengeIssued: チャレンジ クリアランスがないか無効のため、または応答がないために発行されました。

    このログは、クライアントが初めて Web アプリケーションへのアクセスを要求し、以前にチャレンジが行われていない場合に作成されます。 このクライアントは JS チャレンジ ページを受け取り、JS チャレンジの計算に進みます。 計算が成功すると、クライアントには有効性 Cookie が付与されます。
  • JS ChallengeJSChallengePass: 有効なチャレンジ応答のため、合格しました。

    このログは、クライアントが JS チャレンジを解決し、正しい応答で要求を再送信したときに作成されます。 この場合、Azure WAF は Cookie を検証し、別の JS チャレンジを生成せずに残りのルールの処理に進みます。
  • JS ChallengeJSChallengeValid: 有効なチャレンジのため、ログに記録/パススルーされます。

    このログは、クライアントが以前にチャレンジを解決したときに作成されます。 この場合、Azure WAF は要求をログに記録し、残りのルールの処理に進みます。
  • JS Challenge および JSChallengeBlock: ブロックされています

    このログは、JS チャレンジの計算に失敗したときに作成されます。
ClientIP 要求を行ったクライアントの IP アドレス。 要求に X-Forwarded-For ヘッダーがあった場合、代わりにヘッダー フィールドからクライアント IP が取得されます。
ClientPort 要求を行ったクライアントの IP アドレス。
詳細 検出された脅威など、要求に関する追加の詳細。
matchVariableName: ヘッダー名など、一致する要求の HTTP パラメーター名 (最大 100 文字)。
matchVariableValue: 一致をトリガーした値 (最大 100 文字)。
Host 要求の Host ヘッダー。
ポリシー 要求を処理した WAF ポリシーの名前。
PolicyMode WAF ポリシーの操作モード。 設定可能な値は Prevention および Detection です。
RequestUri 要求の完全 URI。
RuleName 要求が一致した WAF 規則の名前。
SocketIP WAF によって検出されたソース IP アドレス。 この IP アドレスは TCP セッションに基づいており、いずれの要求ヘッダーも考慮されません。
TrackingReference Azure Front Door によって提供される要求を示す一意の参照文字列。 この値は、X-Azure-Ref 応答ヘッダーでクライアントに送信されます。 このフィールドは、ログ内の特定の要求を検索するときに使用します。

次のクエリの例は、Azure Front Door WAF によってブロックされた要求を示しています。

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorWebApplicationFirewallLog" 
| where action_s == "Block" 
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorWebApplicationFirewallLog"
| where action_s == "Block"

要求がブロックされた理由など、ログ エントリの例を次のスニペットに示します。

{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Cdn/Profiles/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}
{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Network/FrontDoorWebApplicationFirewallLog/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}

他の Azure Front Door ログの詳細については、「Azure Front Door でのメトリックとログの監視」を参照してください。

次のステップ

Azure Front Door の詳細を確認します。