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 のメトリックにアクセスするには:
- Azure portal にサインインし、Azure Front Door プロファイルに移動します。
- 左端のペインの [監視] で、[メトリック] タブを選択します。
- [Web Application Firewall 要求数] メトリックを追加して、WAF ルールに一致する要求の数を追跡します。
アクションの種類とルール名に基づいて、カスタム フィルターを作成できます。 メトリックには、"ログ" を除くすべてのアクションとともに要求が含まれます。Log
ログと診断
Azure Front Door WAF は、要求ごと、および検出された脅威ごとに詳細なレポートを提供します。 ログ記録は、Azure Monitor のログを使用して Azure の診断ログおよびアラートと統合されます。
既定では、ログは有効になっていません。 ログを明示的に有効にする必要があります。 Azure portal で、[診断設定] タブを使用してログを構成できます。
ログ記録が有効で WAF ルールがトリガーされた場合は、WAF ポリシーの動作を分析およびデバッグするために、一致するパターンがプレーン テキストでログに記録されます。 除外を使用すると、ルールを微調整し、ログから除外するデータを除外できます。 詳細については、「Front Door の除外リストを使用する Web Application Firewall (WAF)」を参照してください。
Azure Front Door には、アクセス ログと WAF ログという 2 種類のログが用意されています。
アクセス ログ
ログ FrontDoorAccessLog
には、Azure Front Door を経由するすべての要求が含まれます。 ログ スキーマなど、Azure Front Door アクセス ログの詳細については、「Azure Front Door でのメトリックとログの監視」を参照してください。
ログ FrontdoorAccessLog
には、Azure Front Door を経由するすべての要求が含まれます。 ログ スキーマなど、Azure 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 | 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 の詳細を確認します。