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, um sie später zu verwenden.

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 > Neu hinzufügen
  • Content Hub > Content-Packs > Erste Schritte

Azure WAF-Feed einrichten

  1. Klicken Sie auf das Paket Azure-Plattform.
  2. Suchen Sie den Protokolltyp Azure WAF und klicken Sie auf Neuen Feed hinzufügen.
  3. Geben Sie Werte für die folgenden Felder an:

    • Quelltyp: Microsoft Azure Blob Storage V2.
    • 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)
    • Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Aufnahmeeinstellungen aus. Hinweis: Wenn Sie die Option Delete transferred files oder Delete transferred files and empty directories auswählen, müssen Sie dem Dienstkonto die entsprechenden Berechtigungen erteilen.
    • Maximales Dateialter: Enthält Dateien, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
    • Freigegebener Schlüssel: Der Zugriffsschlüssel für Azure Blob Storage. Erweiterte Optionen

    • Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.

    • Asset-Namespace: Namespace, der dem Feed zugeordnet ist.

    • Aufnahmelabels: Labels, die auf alle Ereignisse aus diesem Feed angewendet werden.

  4. Klicken Sie auf Feed erstellen.

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

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-Adresse 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