Azure WAF-Protokolle erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Azure Web Application Firewall-Logs (WAF) mit einem Azure-Speicherkonto in Google Security Operations exportieren. Der Parser verarbeitet Logs im JSON-Format und wandelt sie in das UDM um. Es werden Logs mit einem records-Array verarbeitet, indem jeder Datensatz durchlaufen und bestimmte Felder UDM-Attributen zugeordnet werden. Wenn das Array records fehlt, verarbeitet der Parser das Log als einzelnes Ereignis und extrahiert und ordnet die Felder entsprechend zu.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz
  • Ein aktiver Azure-Mandant
  • Privilegierter Zugriff auf Azure

Azure Storage-Konto konfigurieren

  1. Suchen Sie in der Azure-Konsole nach Storage accounts (Speicherkonten).
  2. Klicken Sie auf Erstellen.
  3. Geben Sie Werte für die folgenden Eingabeparameter an:
    • Abo: Wählen Sie das Abo aus.
    • Ressourcengruppe: Wählen Sie die Ressourcengruppe aus.
    • Region: Wählen Sie die Region aus.
    • Leistung: Wählen Sie die Leistung aus (Standard wird empfohlen).
    • Redundanz: Wählen Sie die Redundanz aus (GRS oder LRS empfohlen).
    • Storage-Kontoname: Geben Sie einen Namen für das neue Speicherkonto ein.
  4. Klicken Sie auf Überprüfen + Erstellen.
  5. Sehen Sie sich die Übersicht des Kontos an und klicken Sie auf Erstellen.
  6. Wählen Sie auf der Seite Storage Account Overview (Speicherkonto – Übersicht) unter Security + networking (Sicherheit + Netzwerk) das Untermenü Access keys (Zugriffsschlüssel) aus.
  7. Klicken Sie neben key1 oder key2 auf Anzeigen.
  8. Klicken Sie auf In die Zwischenablage kopieren, um den Schlüssel zu kopieren.
  9. Bewahren Sie den Schlüssel an einem sicheren Ort auf, um ihn später zu verwenden.
  10. Wählen Sie auf der Seite Storage Account Overview (Speicherkontoübersicht) unter Settings (Einstellungen) das Untermenü Endpoints (Endpunkte) aus.
  11. Klicken Sie auf In die Zwischenablage kopieren, um die Endpunkt-URL des Blob-Dienstes zu kopieren, z. B. https://<storageaccountname>.blob.core.windows.net.
  12. Speichern Sie die Endpunkt-URL an einem sicheren Ort für die spätere Verwendung.

Logexport für Azure WAF-Logs konfigurieren

  1. Melden Sie sich mit Ihrem privilegierten Konto im Azure-Portal an.
  2. Rufen Sie WAF-Regeln (Web Application Firewall) auf und wählen Sie eine WAF aus, die überwacht werden soll.
  3. Wählen Sie Monitoring > Diagnoseeinstellungen aus.
  4. Klicken Sie auf + Diagnoseeinstellung hinzufügen.
    • Geben Sie einen aussagekräftigen Namen für die Diagnoseeinstellung ein.
  5. Wählen Sie allLogs aus.
  6. Wählen Sie das Kästchen In einem Speicherkonto archivieren als Ziel aus.
    • Geben Sie das Abo und das Speicherkonto an.
  7. Klicken Sie auf Speichern.

Feeds einrichten

Es gibt zwei verschiedene Einstiegspunkte zum Einrichten von Feeds in der Google SecOps-Plattform:

  • SIEM-Einstellungen > Feeds
  • Content Hub> Content-Pakete

Feeds über die SIEM-Einstellungen > „Feeds“ einrichten

Informationen zum Konfigurieren mehrerer Feeds für verschiedene Logtypen in dieser Produktfamilie finden Sie unter Feeds nach Produkt konfigurieren.

So konfigurieren Sie einen einzelnen Feed:

  1. Rufen Sie die SIEM-Einstellungen> Feeds auf.
  2. Klicken Sie auf Neuen Feed hinzufügen.
  3. Klicken Sie auf der nächsten Seite auf Einen einzelnen Feed konfigurieren.
  4. Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B. Azure WAF Logs (Azure WAF-Protokolle).
  5. Wählen Sie Microsoft Azure Blob Storage als Quelltyp aus.
  6. Wählen Sie Azure WAF als Logtyp aus.
  7. Klicken Sie auf Weiter.
  8. Geben Sie Werte für die folgenden Eingabeparameter an:

    • Azure-URI: Die Blob-Endpunkt-URL.
      • ENDPOINT_URL/BLOB_NAME
        • Dabei gilt:
          • ENDPOINT_URL: Die Blob-Endpunkt-URL (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: Der Name des Blobs (z. B. <logname>-logs)
    • URI is a (URI ist ein): Wählen Sie den URI-TYP entsprechend der Logstream-Konfiguration aus (Single file (Einzelne Datei) | Directory (Verzeichnis) | Directory which includes subdirectories (Verzeichnis mit Unterverzeichnissen)).
    • Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen aus.

    • Freigegebener Schlüssel: Der Zugriffsschlüssel für Azure Blob Storage.

    • Asset-Namespace: Der Asset-Namespace.

    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet werden soll.

  9. Klicken Sie auf Weiter.

  10. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

Feeds über den Content Hub einrichten

Geben Sie Werte für die folgenden Felder an:

  • Azure-URI: Die Blob-Endpunkt-URL.
    • ENDPOINT_URL/BLOB_NAME
      • Dabei gilt:
        • ENDPOINT_URL: Die Blob-Endpunkt-URL (https://<storageaccountname>.blob.core.windows.net)
        • BLOB_NAME: Der Name des Blobs (z. B. <logname>-logs)
  • URI is a (URI ist ein): Wählen Sie den URI-TYP entsprechend der Logstream-Konfiguration aus (Single file (Einzelne Datei) | Directory (Verzeichnis) | Directory which includes subdirectories (Verzeichnis mit Unterverzeichnissen)).
  • Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen aus.
  • Freigegebener Schlüssel: Der Zugriffsschlüssel für Azure Blob Storage.

Erweiterte Optionen

  • Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
  • Quelltyp: Methode, die zum Erfassen von Logs in Google SecOps verwendet wird.
  • Asset-Namespace: Namespace, der dem Feed zugeordnet ist.
  • Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value Der Wert wird aus dem Feld backendPoolName im Rohlog übernommen.
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value Der Wert wird aus dem Feld backendSettingName im Rohlog übernommen.
category metadata.product_event_type Der Wert wird aus dem Feld category im Rohlog übernommen.
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value Der Wert wird aus dem Feld EventEnqueuedUtcTime im Rohlog übernommen, wenn das Feld records vorhanden ist.
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value Der Wert wird aus dem Feld EventProcessedUtcTime im Rohlog übernommen, wenn das Feld records vorhanden ist.
operationName additional.fields[?key=='operationName'].value.string_value Der Wert wird aus dem Feld operationName im Rohlog übernommen.
properties.action additional.fields[?key=='action'].value.string_value Der Wert wird aus dem Feld properties.action im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.action security_result.action_details Der Wert wird aus dem Feld properties.action im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
properties.clientIP, properties.clientIp principal.asset.ip, principal.ip Der Wert wird entweder aus dem Feld properties.clientIP oder properties.clientIp im Rohlog übernommen, wobei clientIP Priorität hat.
properties.clientPort principal.port Der Wert wird aus dem Feld properties.clientPort im Rohlog übernommen.
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value Der Wert wird aus dem Feld properties.clientResponseTime im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
properties.details.data additional.fields[?key=='Properties data'].value.string_value Der Wert wird aus dem Feld properties.details.data im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.details.file principal.process.file.full_path Der Wert wird aus dem Feld properties.details.file im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
properties.details.matches[].matchVariableName, properties.details.matches[].matchVariableValue additional.fields[?key.startsWith('%{idx} ')].value.string_value Der Wert wird aus dem properties.details.matches-Array im Rohlog übernommen. key im UDM wird mit dem Index (idx) und matchVariableName erstellt. Der value wird aus matchVariableValue übernommen.
properties.details.message metadata.description Der Wert wird aus dem Feld properties.details.message im Rohlog übernommen, nachdem Backslashes und Anführungszeichen entfernt wurden.
properties.details.msg metadata.description Der Wert wird aus dem Feld properties.details.msg im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.httpMethod network.http.method Der Wert wird aus dem Feld properties.httpMethod im Rohlog übernommen.
properties.httpStatus network.http.response_code Der Wert wird aus dem Feld properties.httpStatus im Rohlog übernommen.
properties.httpVersion network.application_protocol Wenn das Feld properties.httpVersion den Wert HTTP enthält, wird der Wert HTTP zugewiesen.
properties.host, properties.hostname, properties.originalHost principal.asset.hostname, principal.hostname Der Wert wird aus properties.originalHost, properties.host oder properties.hostname übernommen, wobei die Priorität in dieser Reihenfolge festgelegt wird.
properties.policyId security_result.detection_fields[?key=='policyId'].value Der Wert wird aus dem Feld properties.policyId im Rohlog übernommen.
properties.policyMode security_result.detection_fields[?key=='policyMode'].value Der Wert wird aus dem Feld properties.policyMode im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.policy additional.fields[?key=='Properties policy'].value.string_value Der Wert wird aus dem Feld properties.policy im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.receivedBytes network.received_bytes Der Wert wird aus dem Feld properties.receivedBytes im Rohlog übernommen.
properties.requestUri target.url Der Wert wird aus dem Feld properties.requestUri im Rohlog übernommen.
properties.ruleId security_result.rule_id Der Wert wird aus dem Feld properties.ruleId im Rohlog übernommen.
properties.ruleName security_result.rule_name Der Wert wird aus dem Feld properties.ruleName im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.ruleName, ruleSetType security_result.rule_name Der Wert wird aus dem Feld properties.ruleName übernommen. Wenn es leer ist, wird der Wert aus dem Feld ruleSetType im Rohlog übernommen, sofern das Feld records nicht vorhanden ist.
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value Der Wert wird aus dem Feld properties.ruleSetVersion im Rohlog übernommen.
properties.sentBytes network.sent_bytes Der Wert wird aus dem Feld properties.sentBytes im Rohlog übernommen.
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value Der Wert wird aus dem Feld properties.serverResponseLatency im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
properties.serverRouted target.asset.ip, target.ip, target.port Die IP-Adresse und der Port werden aus dem Feld properties.serverRouted extrahiert.
properties.sslCipher network.tls.cipher Der Wert wird aus dem Feld properties.sslCipher im Rohlog übernommen.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Der Wert wird aus dem Feld properties.sslClientCertificateIssuerName im Rohlog übernommen.
properties.sslProtocol network.tls.version Der Wert wird aus dem Feld properties.sslProtocol im Rohlog übernommen.
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value Der Wert wird aus dem Feld properties.timeTaken im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value Der Wert wird aus dem Feld properties.trackingReference im Rohlog übernommen, wenn das Feld records vorhanden ist.
properties.transactionId network.session_id Der Wert wird aus dem Feld properties.transactionId im Rohlog übernommen.
properties.userAgent network.http.user_agent Der Wert wird aus dem Feld properties.userAgent im Rohlog übernommen.
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value Der Wert wird aus dem Feld properties.WAFEvaluationTime im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value Der Wert wird aus dem Feld properties.WAFMode im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
rec.category metadata.product_event_type Der Wert wird aus dem Feld rec.category im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.operationName additional.fields[?key=='operationName'].value.string_value Der Wert wird aus dem Feld rec.operationName im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.properties.clientIP, rec.properties.clientIp principal.asset.ip, principal.ip Der Wert wird entweder aus dem Feld rec.properties.clientIP oder rec.properties.clientIp im Rohlog übernommen, wobei clientIP Vorrang hat, wenn das Feld records vorhanden ist.
rec.properties.clientPort principal.port Der Wert wird aus dem Feld rec.properties.clientPort im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.properties.host principal.asset.hostname, principal.hostname Der Wert wird aus dem Feld rec.properties.host im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value Der Wert wird aus dem Feld rec.properties.policy im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.properties.requestUri target.url Der Wert wird aus dem Feld rec.properties.requestUri im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.properties.ruleName security_result.rule_name Der Wert wird aus dem Feld rec.properties.ruleName im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value Der Wert wird aus dem Feld rec.properties.trackingReference im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.resourceId target.resource.id Der Wert wird aus dem Feld rec.resourceId im Rohlog übernommen, wenn das Feld records vorhanden ist.
rec.time metadata.event_timestamp Der Wert wird aus dem Feld rec.time im Rohlog übernommen, wenn das Feld records vorhanden ist.
resourceId target.resource.id Der Wert wird aus dem Feld resourceId im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
timeStamp metadata.event_timestamp Der Wert wird aus dem Feld timeStamp im Rohlog übernommen, wenn das Feld records nicht vorhanden ist.
metadata.event_type Der Wert wird auf NETWORK_CONNECTION festgelegt, wenn sowohl der Prinzipal (Hostname oder Client-IP) als auch die Ziel-IP vorhanden sind. Der Wert ist auf STATUS_UPDATE festgelegt, wenn ein Prinzipal vorhanden ist, aber die Ziel-IP fehlt. Andernfalls wird standardmäßig GENERIC_EVENT oder der Wert des Felds event_type verwendet.
metadata.log_type Der Wert ist auf AZURE_WAF hartcodiert.
metadata.product_name Der Wert ist auf Azure WAF Logs hartcodiert.
metadata.vendor_name Der Wert ist auf Microsoft hartcodiert.
security_result.action Der Wert wird auf ALLOW gesetzt, wenn properties.action gleich Matched ist, und auf BLOCK, wenn properties.action gleich Block ist.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten