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

Azure Web アプリケーション ファイアウォール (WAF) の監視とログ記録は、Azure Monitor および Azure Monitor ログのログ記録およびそれらとの統合を通じて提供されます。

Azure Monitor

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

Azure portal から、Front Door リソースの種類に移動します。 左側の [監視] > [メトリック] タブから WebApplicationFirewallRequestCount を追加し、WAF 規則に一致する要求の数を追跡できます。 アクションの種類と規則の名前に基づいて、カスタム フィルターを作成できます。

WAFMetrics

ログと診断

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

WAFDiag

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

Front Door には、アクセス ログと WAF ログという 2 種類のログが用意されています。

アクセス ログ

FrontDoorAccessLog には、Front Door を経由するすべての要求が含まれます。 ログ スキーマなど、Front Door アクセス ログの詳細については、「Azure Front Door のログ」を参照してください。

FrontdoorAccessLog には、Front Door を経由するすべての要求が含まれます。 ログ スキーマなど、Front Door アクセス ログの詳細については、「Azure Front Door (クラシック) でのメトリックとログの監視」を参照してください。

次のクエリの例では、アクセス ログ エントリが返されます。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorAccessLog"
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorAccessLog"

ログ エントリの例を次に示します。

{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontDoorAccessLog",
  "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}
{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontdoorAccessLog",
  "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}

WAF ログ

FrontDoorWebApplicationFirewallLog には、WAF 規則に一致する要求が含まれます。

FrontdoorWebApplicationFirewallLog には、WAF 規則と一致するすべての要求が含まれます。

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

プロパティ 説明
アクション 要求に対して実行されるアクション。 ログには、すべてのアクションとともに要求が含まれます。 メトリックには、"ログ" を除くすべてのアクションとともに要求が含まれます。
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 Front Door によって提供される要求を示す一意の参照文字列。 この値は、X-Azure-Ref 応答ヘッダーでクライアントに送信されます。 このフィールドは、ログ内の特定の要求を検索するときに使用します。

次のクエリの例は、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"
        }
      ]
    }
  }
}

次のステップ