Azure Web Application Firewall 모니터링 및 로깅
Azure Front Door의 Azure Web Application Firewall은 WAF(웹 애플리케이션 방화벽)가 수행되는 방식과 수행하는 작업을 이해하는 데 도움이 되는 광범위한 로깅 및 원격 분석을 제공합니다.
Azure Front Door WAF 로그는 Azure Monitor와 통합됩니다. Azure Monitor를 통해 WAF 경고 및 로그를 포함하여 진단 정보를 추적할 수 있습니다. 진단 탭 아래의 Azure Portal에 있는 Azure Front Door 리소스 내에서 코드 접근 방식의 인프라를 통해 또는 직접 Azure Monitor를 사용하여 WAF 모니터링을 구성할 수 있습니다.
메트릭
Azure Front Door는 WAF의 동작을 이해하는 데 도움이 되는 메트릭을 자동으로 기록합니다.
WAF의 메트릭에 액세스하려면 다음을 수행합니다.
- Azure Portal에 로그인하고 Azure Front Door 프로필로 이동합니다.
- 모니터링 아래의 맨 왼쪽 창에서 메트릭 탭을 선택합니다.
- Web Application Firewall 요청 수 메트릭을 추가하여 WAF 규칙과 일치하는 요청 수를 추적합니다.
작업 유형 및 규칙 이름을 기반으로 사용자 지정 필터를 만들 수 있습니다. 메트릭에는 Log
를 제외한 모든 작업이 포함된 요청이 포함됩니다.
JavaScript 챌린지(미리 보기) 메트릭
JavaScript 챌린지 WAF 메트릭에 액세스하려면:
- Web Application Firewall
JS Challenge Request Count
메트릭을 추가하여 JavaScript 챌린지 WAF 규칙과 일치하는 요청 수를 추적합니다.
이 메트릭의 일부로 다음 필터가 제공됩니다.
- PolicyName: WAF 정책 이름입니다.
- 규칙: 사용자 지정 규칙 또는 봇 규칙일 수 있습니다.
- 작업: JS 챌린지 작업에 대해 가능한 값은 4가지입니다.
- 발급됨: JS Challenge가 처음으로 호출됩니다.
- 통과됨: JS 챌린지 계산이 성공했으며 답변을 받았습니다.
- 유효함: JS Challenge 유효성 쿠키가 있었습니다.
- 차단됨: JS 챌린지 계산이 실패했습니다.
로그 및 진단
Azure Front Door WAF는 각 요청과 탐지된 각 위협에 대한 상세 보고를 제공합니다. 로깅은 Azure Monitor 로그를 사용하여 Azure의 진단 로그 및 경고와 통합됩니다.
로그는 기본적으로 사용되지 않습니다. 로그를 명시적으로 사용하도록 설정해야 합니다. 진단 설정 탭을 사용하여 Azure Portal에서 로그를 구성할 수 있습니다.
로깅을 사용하도록 설정하고 WAF 규칙이 트리거되면 일치하는 패턴이 일반 텍스트로 기록되어 WAF 정책 동작을 분석하고 디버그하는 데 도움이 됩니다. 제외를 사용하여 규칙을 미세 조정하고 로그에서 제외하려는 데이터를 제외할 수 있습니다. 자세한 내용은 Azure Front Door의 웹 애플리케이션 방화벽 제외 목록을 참조하세요.
세 가지 형식의 Azure Front Door 로그를 사용하도록 설정할 수 있습니다.
- WAF 로그
- 액세스 로그
- 상태 프로브 로그
활동 로그는 기본적으로 사용하도록 설정되며 Azure Front Door 프로필의 구성 변경과 같이 Azure 리소스에서 수행되는 작업에 대한 표시 여부를 제공합니다.
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 로그에 대한 자세한 내용은 Azure Front Door에서 메트릭 및 로그 모니터링을 참조하세요.
다음 단계
Azure Front Door에 대해 자세히 알아봅니다.