Dzienniki zasobów dla usługi Azure Web Application Firewall
Zasoby zapory aplikacji internetowej można monitorować przy użyciu dzienników. Możesz zapisywać wydajność, dostęp i inne dane lub wykorzystywać je z zasobu do celów monitorowania.
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.
Dzienniki diagnostyczne
Do zarządzania bramami aplikacji i rozwiązywania problemów z nimi można używać różnych typów dzienników na platformie Azure. Niektóre z tych dzienników są dostępne za pośrednictwem portalu. Wszystkie dzienniki można wyodrębnić z usługi Azure Blob Storage i wyświetlać w różnych narzędziach, takich jak dzienniki usługi Azure Monitor, program Excel i usługa Power BI. Więcej informacji na temat różnych typów dzienników można uzyskać na poniższej liście:
- Dziennik aktywności: możesz użyć dzienników aktywności platformy Azure, aby wyświetlić wszystkie operacje przesyłane do subskrypcji platformy Azure i ich stan. Wpisy dziennika aktywności są zbierane domyślnie i można je wyświetlać w witrynie Azure Portal.
- Dostęp do dziennika zasobów: ten dziennik służy do wyświetlania wzorców dostępu usługi Application Gateway i analizowania ważnych informacji. Obejmuje to adres IP elementu wywołującego, żądany adres URL, opóźnienie odpowiedzi, kod zwrotny i bajty w i na wyjęcie. Ten dziennik zawiera poszczególne rekordy dla każdego żądania i kojarzy je z unikatową usługą Application Gateway, która przetworzyła żądanie. Unikatowe wystąpienia usługi Application Gateway można zidentyfikować za pomocą identyfikatora wystąpienia właściwości.
- Dziennik zasobów wydajności: ten dziennik umożliwia wyświetlenie sposobu działania wystąpień usługi Application Gateway. Ten dziennik przechwytuje informacje o wydajności dla każdego wystąpienia, w tym łączną liczbę obsługiwanych żądań, przepływność w bajtach, łączną liczbę obsługiwanych żądań, liczbę żądań zakończonych niepowodzeniem oraz liczbę wystąpień zaplecza w złej kondycji i złej kondycji. Dziennik wydajności jest zbierany co 60 sekund. Dziennik wydajności jest dostępny tylko dla jednostki SKU w wersji 1. W przypadku jednostki SKU w wersji 2 użyj metryk dla danych wydajności.
- Dziennik zasobów zapory: ten dziennik służy do wyświetlania żądań rejestrowanych za pośrednictwem trybu wykrywania lub zapobiegania bramy aplikacji skonfigurowanej za pomocą zapory aplikacji internetowej.
Uwaga
Dzienniki są dostępne tylko dla zasobów wdrożonych w modelu wdrażania usługi Azure Resource Manager. Nie można używać dzienników dla zasobów w klasycznym modelu wdrażania. Aby lepiej zrozumieć dwa modele, zobacz artykuł Understanding Resource Manager deployment and classic deployment (Opis wdrażania przy użyciu usługi Resource Manager i wdrażania klasycznego).
Masz trzy opcje przechowywania dzienników:
- Konto magazynu: konta magazynu najlepiej sprawdzają się w przypadku dzienników przechowywanych przez dłuższy czas i przeglądanych w razie potrzeby.
- Event Hubs: usługa Event Hubs to świetna opcja integracji z innymi narzędziami do zarządzania informacjami i zdarzeniami zabezpieczeń (SIEM), aby otrzymywać alerty dotyczące zasobów.
- Dzienniki usługi Azure Monitor: dzienniki usługi Azure Monitor najlepiej używać do ogólnego monitorowania aplikacji w czasie rzeczywistym lub analizowania trendów.
Włączanie rejestrowania za pomocą programu PowerShell
Rejestrowanie aktywności jest automatycznie włączone dla wszystkich zasobów usługi Resource Manager. Aby rozpocząć zbieranie danych dostępnych za pośrednictwem tych dzienników, należy włączyć rejestrowanie dostępu i wydajności. Aby włączyć rejestrowanie, wykonaj następujące czynności:
Zanotuj identyfikator zasobu konta magazynu, w ramach którego są przechowywane dane dzienników. Ta wartość ma postać: /subscriptions/subscriptionId/<resourceGroups/<nazwa grupy> zasobów/providers/Microsoft.Storage/storageAccounts/<nazwa> konta> magazynu. Użyć możesz dowolnego konta magazynu w ramach subskrypcji. Te informacje możesz znaleźć w witrynie Azure Portal.
Zanotuj identyfikator zasobu bramy aplikacji, dla którego włączono rejestrowanie. Ta wartość ma postać: /subscriptions/subscriptionId/<resourceGroups/<nazwa grupy> zasobów/providers/Microsoft.Network/applicationGateways/<nazwa> bramy> aplikacji. Te informacje możesz znaleźć w portalu.
Włącz rejestrowanie zasobów przy użyciu następującego polecenia cmdlet programu PowerShell:
Set-AzDiagnosticSetting -ResourceId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Network/applicationGateways/<application gateway name> -StorageAccountId /subscriptions/<subscriptionId>/resourceGroups/<resource group name>/providers/Microsoft.Storage/storageAccounts/<storage account name> -Enabled $true
Napiwek
Dzienniki aktywności nie wymagają oddzielnego konta magazynu. Użycie magazynu na potrzeby rejestrowania danych o dostępie i wydajności powoduje naliczenie opłat za usługę.
Włączanie rejestrowania za pośrednictwem witryny Azure Portal
W witrynie Azure Portal znajdź zasób i wybierz pozycję Ustawienia diagnostyczne.
W przypadku usługi Application Gateway dostępne są trzy dzienniki:
- Dziennik dostępu
- Dziennik wydajności
- Dziennik zapory
Wybierz pozycję Dodaj ustawienia diagnostyczne.
Strona Ustawienia diagnostyczne zawiera ustawienia dzienników zasobów. W tym przykładzie usługa Log Analytics przechowuje dzienniki. Możesz również użyć centrum zdarzeń, konta magazynu lub rozwiązania partnerskiego, aby zapisać dzienniki zasobów.
Wpisz nazwę ustawień, potwierdź ustawienia i wybierz pozycję Zapisz.
Dziennik aktywności
Platforma Azure domyślnie generuje dziennik aktywności. Dzienniki są zachowywane przez 90 dni w magazynie dzienników zdarzeń platformy Azure. Dowiedz się więcej o tych dziennikach, czytając artykuł Wyświetlanie zdarzeń i dziennika aktywności.
Dziennik dostępu
Dziennik dostępu jest generowany tylko wtedy, gdy włączono go w każdym wystąpieniu usługi Application Gateway, zgodnie z opisem w poprzednich krokach. Dane są przechowywane na koncie magazynu określonym podczas włączania rejestrowania. Każdy dostęp do usługi Application Gateway jest rejestrowany w formacie JSON, jak pokazano w poniższym przykładzie dla wersji 1:
Wartość | Opis |
---|---|
instanceId | Wystąpienie usługi Application Gateway, które obsłużyło żądanie. |
clientIP | Źródłowy adres IP żądania. |
clientPort | Port źródłowy dla żądania. |
httpMethod | Metoda HTTP używana przez żądanie. |
identyfikator requestUri | Identyfikator URI odebranego żądania. |
RequestQuery | Server-Routed: wystąpienie puli zaplecza, które zostało wysłane żądanie. X-AzureApplicationGateway-LOG-ID: identyfikator korelacji używany dla żądania. Może służyć do rozwiązywania problemów z ruchem na serwerach zaplecza. STAN SERWERA: kod odpowiedzi HTTP odebrany przez usługę Application Gateway z zaplecza. |
UserAgent | Agent użytkownika z nagłówka żądania HTTP. |
httpStatus | Kod stanu HTTP zwrócony klientowi z usługi Application Gateway. |
httpVersion | Wersja HTTP żądania. |
odebrane bajty | Rozmiar odebranego pakietu w bajtach. |
sentBytes | Rozmiar wysyłanego pakietu w bajtach. |
timeTaken | Czas (w milisekundach), który wymaga przetworzenia żądania i wysłania jego odpowiedzi. Jest to obliczane jako interwał od momentu odebrania przez usługę Application Gateway pierwszego bajtu żądania HTTP do czasu zakończenia operacji wysyłania odpowiedzi. Należy pamiętać, że pole Czas podjąć zwykle obejmuje czas, przez który pakiety żądań i odpowiedzi są przesyłane przez sieć. |
sslEnabled | Określa, czy komunikacja z pulami zaplecza używa protokołu TLS/SSL. Prawidłowe wartości są włączone i wyłączone. |
host | Nazwa hosta, za pomocą której żądanie zostało wysłane do serwera zaplecza. Jeśli nazwa hosta zaplecza jest zastępowana, ta nazwa będzie odzwierciedlać tę nazwę. |
originalHost | Nazwa hosta, za pomocą której żądanie zostało odebrane przez usługę Application Gateway od klienta. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"timestamp": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIP": "203.0.113.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e&SERVER-STATUS=404",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"host": "www.contoso.com",
"originalHost": "www.contoso.com"
}
}
W przypadku usługi Application Gateway i zapory aplikacji internetowej w wersji 2 dzienniki zawierają nieco więcej informacji:
Wartość | Opis |
---|---|
instanceId | Wystąpienie usługi Application Gateway, które obsłużyło żądanie. |
clientIP | Źródłowy adres IP żądania. |
clientPort | Port źródłowy dla żądania. |
httpMethod | Metoda HTTP używana przez żądanie. |
identyfikator requestUri | Identyfikator URI odebranego żądania. |
UserAgent | Agent użytkownika z nagłówka żądania HTTP. |
httpStatus | Kod stanu HTTP zwrócony klientowi z usługi Application Gateway. |
httpVersion | Wersja HTTP żądania. |
odebrane bajty | Rozmiar odebranego pakietu w bajtach. |
sentBytes | Rozmiar wysyłanego pakietu w bajtach. |
timeTaken | Czas (w milisekundach), który wymaga przetworzenia żądania i wysłania jego odpowiedzi. Jest to obliczane jako interwał od momentu odebrania przez usługę Application Gateway pierwszego bajtu żądania HTTP do czasu zakończenia operacji wysyłania odpowiedzi. Należy pamiętać, że pole Czas podjąć zwykle obejmuje czas, przez który pakiety żądań i odpowiedzi są przesyłane przez sieć. |
sslEnabled | Określa, czy komunikacja z pulami zaplecza używa protokołu TLS. Prawidłowe wartości są włączone i wyłączone. |
sslCipher | Pakiet szyfrowania używany do komunikacji TLS (jeśli protokół TLS jest włączony). |
sslProtocol | Używany protokół TLS (jeśli protokół TLS jest włączony). |
serverRouted | Serwer zaplecza, do którego brama aplikacji kieruje żądanie. |
serverStatus | Kod stanu HTTP serwera zaplecza. |
serverResponseLatency | Opóźnienie odpowiedzi z serwera zaplecza. |
host | Adres wymieniony w nagłówku hosta żądania. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayAccess",
"time": "2017-04-26T19:27:38Z",
"category": "ApplicationGatewayAccessLog",
"properties": {
"instanceId": "appgw_1",
"clientIP": "203.0.113.97",
"clientPort": 46886,
"httpMethod": "GET",
"requestUri": "/phpmyadmin/scripts/setup.php",
"userAgent": "-",
"httpStatus": 404,
"httpVersion": "HTTP/1.0",
"receivedBytes": 65,
"sentBytes": 553,
"timeTaken": 205,
"sslEnabled": "off",
"sslCipher": "",
"sslProtocol": "",
"serverRouted": "104.41.114.59:80",
"serverStatus": "200",
"serverResponseLatency": "0.023",
"host": "www.contoso.com",
}
}
Dziennik wydajności
Dziennik wydajności jest generowany tylko wtedy, gdy włączono go w każdym wystąpieniu usługi Application Gateway, zgodnie z opisem w poprzednich krokach. Dane są przechowywane na koncie magazynu określonym podczas włączania rejestrowania. Dane dziennika wydajności są generowane w 1-minutowych odstępach czasu. Jest ona dostępna tylko dla jednostki SKU w wersji 1. W przypadku jednostki SKU w wersji 2 użyj metryk dla danych wydajności. Rejestrowane są następujące dane:
Wartość | Opis |
---|---|
instanceId | Wystąpienie usługi Application Gateway, dla którego są generowane dane wydajności. W przypadku bramy aplikacji z wieloma wystąpieniami istnieje jeden wiersz na wystąpienie. |
healthyHostCount | Liczba hostów w dobrej kondycji w puli zaplecza. |
unHealthyHostCount | Liczba hostów w złej kondycji w puli zaplecza. |
requestCount | Liczba obsługiwanych żądań. |
opóźnienie | Średnie opóźnienie (w milisekundach) żądań z wystąpienia do zaplecza obsługującego żądania. |
failedRequestCount | Liczba żądań zakończonych niepowodzeniem. |
danych | Średnia przepływność od ostatniego dziennika mierzona w bajtach na sekundę. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayPerformance",
"time": "2016-04-09T00:00:00Z",
"category": "ApplicationGatewayPerformanceLog",
"properties":
{
"instanceId":"ApplicationGatewayRole_IN_1",
"healthyHostCount":"4",
"unHealthyHostCount":"0",
"requestCount":"185",
"latency":"0",
"failedRequestCount":"0",
"throughput":"119427"
}
}
Uwaga
Opóźnienie jest obliczane od momentu odebrania pierwszego bajtu żądania HTTP do momentu wysłania ostatniego bajtu odpowiedzi HTTP. Jest to suma czasu przetwarzania usługi Application Gateway oraz koszt sieci do zaplecza oraz czas potrzebny na przetworzenie żądania przez zaplecze.
Dziennik zapory
Dziennik zapory jest generowany tylko wtedy, gdy włączono go dla każdej bramy aplikacji, zgodnie z opisem w poprzednich krokach. Ten dziennik wymaga również skonfigurowania zapory aplikacji internetowej w bramie aplikacji. Dane są przechowywane w miejscu docelowym określonym podczas włączania rejestrowania. Rejestrowane są następujące dane:
Wartość | Opis |
---|---|
instanceId | Wystąpienie usługi Application Gateway, dla którego są generowane dane zapory. W przypadku bramy aplikacji z wieloma wystąpieniami istnieje jeden wiersz na wystąpienie. |
clientIp | Źródłowy adres IP żądania. |
identyfikator requestUri | Adres URL odebranego żądania. |
ruleSetType | Typ zestawu reguł. Dostępna wartość to OWASP. |
ruleSetVersion | Używana wersja zestawu reguł. Dostępne wartości to 2.2.9 i 3.0. |
ruleId | Identyfikator reguły zdarzenia wyzwalającego. |
wiadomość | Przyjazny dla użytkownika komunikat dotyczący zdarzenia wyzwalającego. Więcej szczegółów znajduje się w sekcji szczegółów. |
action | Tryb zasad: Wykryto wykrywanie - — jest to jedyna akcja zapory aplikacji internetowej w trybie wykrywania. Wszystkie warunki dla danej reguły zostały dopasowane, a żądanie zostało zarejestrowane, a następnie przekazane do zaplecza. Tryb zasad: Dozwolone zapobieganie - — wszystkie warunki zostały dopasowane dla danej reguły, a żądanie zostało przekazane do zaplecza. - Zablokowane — wszystkie warunki zostały dopasowane dla danej reguły i żądanie zostało zablokowane. - Dopasowane — co najmniej jeden warunek został dopasowany dla danej reguły, ale decyzja o zablokowaniu lub przekazaniu żądania będzie wymagała dalszej oceny i będzie oceniana na podstawie ostatecznej reguły oceniania anomalii. Tryb zasad: wyzwanie JS - JSChallengeIssued: wystawiony z powodu braku/nieprawidłowego rozliczenia wyzwania, brak odpowiedzi. Ten dziennik jest tworzony, gdy klient żąda dostępu do aplikacji internetowej po raz pierwszy i nie został wcześniej zakwestionowany. Ten klient otrzymuje stronę wyzwania JS i przechodzi do obliczenia wyzwania JS. Po pomyślnym obliczeniu klient otrzymuje plik cookie ważności. - JSChallengePass: Przekazano ze względu na prawidłową odpowiedź na wyzwanie. Ten dziennik jest tworzony, gdy klient rozwiązuje wyzwanie JS i ponownie przesyła żądanie z prawidłową odpowiedzią. W takim przypadku zapora aplikacji internetowej platformy Azure weryfikuje plik cookie i przechodzi do przetwarzania pozostałych reguł bez generowania innego wyzwania JS. - JSChallengeValid: Zarejestrowane/przekazywane z powodu ważnego wyzwania Ten dziennik jest tworzony, gdy klient wcześniej rozwiązał problem. W takim przypadku zapora aplikacji internetowej platformy Azure rejestruje żądanie i przechodzi do przetwarzania pozostałych reguł. - JSChallengeBlock: Zablokowane Ten dziennik jest tworzony, gdy obliczenia wyzwania JS kończą się niepowodzeniem. |
lokacja | Lokacja, dla której wygenerowano dziennik. Obecnie na liście znajduje się tylko wartość Global, ponieważ reguły są globalne. |
szczegóły | Szczegóły zdarzenia wyzwalania. |
details.message | Opis reguły. |
details.data | Określone dane znalezione w żądaniu, które pasują do reguły. |
details.file | Plik konfiguracji zawierający regułę. |
details.line | Numer wiersza w pliku konfiguracji, który wyzwolił zdarzenie. |
nazwa hosta | Nazwa hosta lub adres IP usługi Application Gateway. |
transactionId | Unikatowy identyfikator dla danej transakcji, która ułatwia grupowanie wielu naruszeń reguł, które wystąpiły w ramach tego samego żądania. |
policyId | Unikatowy identyfikator zasad zapory skojarzonych z usługą Application Gateway, odbiornikiem lub ścieżką. |
policyScope | Lokalizacja zasad — wartości mogą być "Globalne", "Odbiornik" lub "Lokalizacja". |
policyScopeName | Nazwa obiektu, w którym są stosowane zasady. |
{
"resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
"operationName": "ApplicationGatewayFirewall",
"time": "2017-03-20T15:52:09.1494499Z",
"category": "ApplicationGatewayFirewallLog",
"properties": {
"instanceId": "ApplicationGatewayRole_IN_0",
"clientIp": "203.0.113.147",
"requestUri": "/",
"ruleSetType": "OWASP",
"ruleSetVersion": "3.0",
"ruleId": "920350",
"ruleGroup": "920-PROTOCOL-ENFORCEMENT",
"message": "Host header is a numeric IP address",
"action": "Matched",
"site": "Global",
"details": {
"message": "Warning. Pattern match \"^[\\\\d.:]+$\" at REQUEST_HEADERS:Host ....",
"data": "127.0.0.1",
"file": "rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
"line": "791"
},
"hostname": "127.0.0.1",
"transactionId": "16861477007022634343",
"policyId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/drewRG/providers/Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies/perListener",
"policyScope": "Listener",
"policyScopeName": "httpListener1"
}
}
}
Wyświetlanie i analizowanie dziennika aktywności
Dane dziennika aktywności można wyświetlać i analizować przy użyciu dowolnej z następujących metod:
- Narzędzia platformy Azure: pobierz informacje z dziennika aktywności przy użyciu programu Azure PowerShell, interfejsu wiersza polecenia platformy Azure, interfejsu API REST platformy Azure lub witryny Azure Portal. Instrukcje krok po kroku dla każdej metody są szczegółowo opisane w artykule Activity operations with Resource Manager (Operacje działań przy użyciu usługi Resource Manager).
- Usługa Power BI: jeśli nie masz jeszcze konta usługi Power BI, możesz ją wypróbować bezpłatnie. Korzystając z aplikacji szablonu usługi Power BI, możesz analizować dane.
Wyświetlanie i analizowanie dzienników dostępu, wydajności i zapory
Dzienniki usługi Azure Monitor mogą zbierać pliki dziennika liczników i zdarzeń z konta usługi Blob Storage. Obejmuje ona wizualizacje oraz zaawansowane możliwości wyszukiwania na potrzeby analizowania dzienników.
Ponadto możesz połączyć się z kontem magazynu i pobrać wpisy dziennika JSON dotyczące dostępu i wydajności. Po pobraniu plików JSON możesz je przekonwertować do formatu CSV i wyświetlać w programie Excel, usłudze Power BI lub innym narzędziu do wizualizacji danych.
Napiwek
Jeśli znasz program Visual Studio oraz podstawowe pojęcia dotyczące zmiany wartości stałych i zmiennych w języku C#, możesz skorzystać z konwerterów dzienników dostępnych w witrynie GitHub.
Analizowanie dzienników dostępu za pośrednictwem funkcji GoAccess
Opublikowaliśmy szablon usługi Resource Manager, który instaluje i uruchamia popularny analizator dzienników usługi GoAccess dla dzienników dostępu usługi Application Gateway. Funkcja GoAccess udostępnia cenne statystyki ruchu HTTP, takie jak unikatowe odwiedzający, żądane pliki, hosty, systemy operacyjne, przeglądarki, kody stanu HTTP i inne. Aby uzyskać więcej informacji, zobacz plik Readme w folderze szablonu usługi Resource Manager w usłudze GitHub.
Następne kroki
- Wizualizowanie dzienników liczników i zdarzeń przy użyciu dzienników usługi Azure Monitor.
- Wizualizowanie dziennika aktywności platformy Azure za pomocą wpisu w blogu usługi Power BI .
- Wyświetlanie i analizowanie dzienników aktywności platformy Azure w usłudze Power BI i więcej wpisu w blogu.