Dzienniki zasobów dla usługi Azure Web Application Firewall

Zasoby Web Application Firewall można monitorować przy użyciu dzienników. Możesz zapisać wydajność, dostęp i inne dane lub użyć ich 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ębniać 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ć z następującej listy:

  • 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.
  • Uzyskiwanie dostępu do dziennika zasobów: ten dziennik służy do wyświetlania wzorców dostępu Application Gateway i analizowania ważnych informacji. Obejmuje to adres IP elementu wywołującego, żądany adres URL, opóźnienie odpowiedzi, kod powrotu i bajty w i na wył. Ten dziennik zawiera poszczególne rekordy dla każdego żądania i kojarzy je z unikatowymi Application Gateway, które przetworzyły żądanie. Unikatowe wystąpienia Application Gateway można zidentyfikować za pomocą identyfikatora instanceId właściwości.
  • Dziennik zasobów wydajności: możesz użyć tego dziennika, aby wyświetlić sposób działania wystąpień 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 dobrej 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 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. Należy włączyć rejestrowanie dostępu i wydajności, aby rozpocząć zbieranie danych dostępnych za pośrednictwem tych dzienników. Aby włączyć rejestrowanie, wykonaj następujące kroki:

  1. Zanotuj identyfikator zasobu konta magazynu, w ramach którego są przechowywane dane dzienników. Ta wartość ma postać: /subscriptions/<identyfikatorSubskrypcji>/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.

    Portal: identyfikator zasobu dla konta magazynu

  2. 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.

    Portal: identyfikator zasobu dla bramy aplikacji

  3. 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     
    

Porada

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

  1. W Azure Portal znajdź zasób i wybierz pozycję Ustawienia diagnostyczne.

    W przypadku Application Gateway dostępne są trzy dzienniki:

    • Dziennik dostępu
    • Dziennik wydajności
    • Dziennik zapory
  2. Wybierz pozycję Dodaj ustawienia diagnostyczne.

  3. 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.

    Zrzut ekranu przedstawiający ustawienia diagnostyczne.

  4. 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 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 Application Gateway jest rejestrowany w formacie JSON, jak pokazano w poniższym przykładzie dla wersji 1:

Wartość Opis
instanceId Application Gateway wystąpienie, które obsłużyło żądanie.
clientIP Źródłowy adres IP żądania.
clientPort Port źródłowy żądania.
httpMethod Metoda HTTP używana przez żądanie.
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, który Application Gateway odebrany z zaplecza.
Useragent Agent użytkownika z nagłówka żądania HTTP.
httpStatus Kod stanu HTTP zwrócony do klienta z Application Gateway.
httpVersion Wersja HTTP żądania.
odebranebajty 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 czasu, gdy Application Gateway odbiera pierwszy bajt żądania HTTP do czasu zakończenia operacji wysyłania odpowiedzi. Należy pamiętać, że pole Time-Taken zwykle obejmuje czas, przez który pakiety żądań i odpowiedzi są przesyłane przez sieć.
sslEnabled Czy komunikacja z pulami zaplecza korzystała z protokołu TLS/SSL. Prawidłowe wartości są włączone i wyłączone.
host Nazwa hosta, z którą żądanie zostało wysłane na serwer zaplecza. Jeśli nazwa hosta zaplecza jest zastępowana, ta nazwa będzie odzwierciedlać tę nazwę.
originalHost Nazwa hosta, z którą żądanie zostało odebrane przez 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": "191.96.249.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=874f1f0f-6807-41c9-b7bc-f3cfa74aa0b1&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 Application Gateway i zapory aplikacji internetowej w wersji 2 dzienniki zawierają nieco więcej informacji:

Wartość Opis
instanceId Application Gateway wystąpienie, które obsłużyło żądanie.
clientIP Źródłowy adres IP żądania.
clientPort Port źródłowy żądania.
httpMethod Metoda HTTP używana przez żądanie.
Requesturi Identyfikator URI odebranego żądania.
Useragent Agent użytkownika z nagłówka żądania HTTP.
httpStatus Kod stanu HTTP zwrócony do klienta z Application Gateway.
httpVersion Wersja HTTP żądania.
odebranebajty 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 czasu, gdy Application Gateway odbiera pierwszy bajt żądania HTTP do czasu zakończenia operacji wysyłania odpowiedzi. Należy pamiętać, że pole Time-Taken zwykle obejmuje czas, przez który pakiety żądań i odpowiedzi są przesyłane przez sieć.
sslEnabled Czy komunikacja z pulami zaplecza korzystała z 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": "191.96.249.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 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 Application Gateway wystąpienie, 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, które obsługuje żą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 ostatniej bajtu odpowiedzi HTTP. Jest to suma czasu przetwarzania Application Gateway oraz koszt sieci do zaplecza, a także 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 po włączeniu rejestrowania. Rejestrowane są następujące dane:

Wartość Opis
instanceId Application Gateway wystąpienie, 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.
clientPort Port źródłowy żądania.
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.
message 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 — jeden/więcej warunków został dopasowany do danej reguły, ale decyzja o zablokowaniu lub przekazaniu żądania będzie wymagała dalszej oceny i zostanie obliczona na podstawie ostatecznej reguły oceniania anomalii.
lokacja Lokacja, dla której został wygenerowany dziennik. Obecnie na liście znajduje się tylko wartość Global, ponieważ reguły są globalne.
szczegóły Szczegóły zdarzenia wyzwalającego.
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 Application Gateway.
transactionId Unikatowy identyfikator 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 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": "52.161.109.147",
      "clientPort": "0",
      "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/1496a758-b2ff-43ef-b738-8e9eb5161a86/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:

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.

Porada

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 Resource Manager, który instaluje i uruchamia popularny analizator dzienników funkcji GoAccess dla dzienników dostępu Application Gateway. Funkcja GoAccess zapewnia cenne statystyki ruchu HTTP, takie jak unikatowe osoby odwiedzające, żądane pliki, hosty, systemy operacyjne, przeglądarki, kody stanu HTTP i inne. Aby uzyskać więcej informacji, zobacz plik Readme w folderze szablonu Resource Manager w usłudze GitHub.

Następne kroki