AWS WAF-Logs erfassen

Parserversion: 11.0

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie AWS Web Application Firewall-Logs (WAF) erfassen, indem Sie einen Google Security Operations-Feed einrichten. Der Parser wandelt Logs im JSON-Rohformat in ein strukturiertes Format um, das dem Google SecOps-UDM entspricht. Es werden Felder wie IP-Adressen, URLs, User-Agents und Details zu Sicherheitsregeln extrahiert und den entsprechenden UDM-Feldern zugeordnet, um eine einheitliche Darstellung und Analyse zu ermöglichen.

Hinweis

*Folgende Voraussetzungen müssen erfüllt sein:

  • Google SecOps-Instanz
  • Privilegierter Zugriff auf AWS

Amazon S3-Bucket konfigurieren

  1. Erstellen Sie einen Amazon S3-Bucket gemäß diesem Nutzerhandbuch: Bucket erstellen.
  2. Speichern Sie den Namen und die Region des Buckets für die spätere Verwendung.
  3. Erstellen Sie einen Nutzer gemäß diesem Nutzerhandbuch: IAM-Nutzer erstellen.
  4. Wählen Sie den erstellten Nutzer aus.
  5. Wählen Sie den Tab Sicherheitsanmeldedaten aus.
  6. Klicken Sie im Bereich Access Keys (Zugriffsschlüssel) auf Create Access Key (Zugriffsschlüssel erstellen).
  7. Wählen Sie als Anwendungsfall die Option Drittanbieterdienst aus.
  8. Klicken Sie auf Weiter.
  9. Optional: Fügen Sie ein Beschreibungs-Tag hinzu.
  10. Klicken Sie auf Zugriffsschlüssel erstellen.
  11. Klicken Sie auf CSV-Datei herunterladen, um den Zugriffsschlüssel und den geheimen Zugriffsschlüssel für die spätere Verwendung zu speichern.
  12. Klicken Sie auf Fertig.
  13. Wählen Sie den Tab Berechtigungen aus.
  14. Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
  15. Wählen Sie Berechtigungen hinzufügen aus.
  16. Wählen Sie Richtlinien direkt anhängen aus.
  17. Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
  18. Klicken Sie auf Weiter.
  19. Klicken Sie auf Berechtigungen hinzufügen.

WAF-Web-ACL (Access Control List) erstellen

Wenn Sie AWS WAF noch nicht eingerichtet haben, müssen Sie eine WAF-Web-ACL (Access Control List) erstellen. Wenn Sie bereits eine Einrichtung haben, können Sie mit dem nächsten Verfahren fortfahren.

  1. Suchen Sie in der AWS-Konsole nach AWS WAF & Shield und wählen Sie es aus.
  2. Klicken Sie auf Create web ACL (Web-ACL erstellen).
  3. Legen Sie die folgenden Einstellungen fest:
    • Name: Geben Sie der ACL einen Namen (z. B. my-waf-web-acl).
    • Region: Wählen Sie die Region aus, in der Sie die WAF anwenden möchten.
    • CloudWatch-Messwerte: Aktivieren Sie die Messwerterfassung, um die Aktivität und die ausgelösten Regeln zu verfolgen.
  4. Wählen Sie nach dem Erstellen die Web-ACL aus, für die Sie das Logging aktivieren möchten.

AWS WAF-Logging konfigurieren

  1. Rufen Sie in der AWS WAF-Konsole den Tab Logging Ihrer Web-ACL auf.
  2. Klicken Sie auf Logging aktivieren.
  3. Wählen Sie Amazon S3 als Ziel für Ihre Logs aus.
  4. Wählen Sie den zuvor erstellten S3-Bucket aus, um die Logs zu speichern.
  5. Optional: Konfigurieren Sie ein Logpräfix, um die Logs zu organisieren (z. B. waf-logs/).
  6. Klicken Sie auf Speichern.

Berechtigungen für den S3-Bucket prüfen

Achten Sie darauf, dass der S3-Bucket die richtigen Berechtigungen für AWS WAF zum Schreiben von Logs hat.

  1. Rufen Sie die S3-Konsole auf.
  2. Wählen Sie den Bucket aus, in dem die Logs gespeichert werden sollen.
  3. Fügen Sie auf dem Tab Berechtigungen die folgende Bucket-Richtlinie hinzu, damit AWS WAF Logs schreiben kann:

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. Klicken Sie auf Speichern.

Feeds einrichten

Es gibt zwei verschiedene Einstiegspunkte, um Feeds in der Google SecOps-Plattform einzurichten:

  • Einstellungen > Datenverwaltung > Feeds > Neuen Feed hinzufügen (auf einer reinen SIEM-Plattform: Einstellungen > Feeds > Neuen Feed hinzufügen)
  • Content Hub > Content-Pakete > Jetzt starten

AWS WAF-Feed einrichten

  1. Klicken Sie auf das Paket Amazon Cloud Platform.
  2. Suchen Sie den Logtyp AWS WAF.
  3. Geben Sie die Werte in den folgenden Feldern an.

    • Quelltyp: Amazon SQS V2
    • Warteschlangenname: Der Name der SQS-Warteschlange, aus der gelesen werden soll.
    • S3-URI: Der Bucket-URI.
      • s3://your-log-bucket-name/
        • Ersetzen Sie your-log-bucket-name durch den tatsächlichen Namen Ihres S3-Buckets.
    • Optionen zum Löschen der Quelle: Wählen Sie die Löschoption entsprechend Ihren Einstellungen für die Aufnahme aus.

    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.

    • SQS Queue Access Key ID: Ein Konto-Zugriffsschlüssel, der ein alphanumerischer String mit 20 Zeichen ist.

    • Geheimer Zugriffsschlüssel für SQS-Warteschlange: Ein Konto-Zugriffsschlüssel, der ein alphanumerischer String mit 40 Zeichen ist.

    Erweiterte Optionen

    • Feedname: Ein vorausgefüllter Wert, der den Feed identifiziert.
    • Asset-Namespace: Der mit dem Feed verknüpfte Namespace.
    • Aufnahme-Labels: 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 innerhalb dieser Produktfamilie finden Sie unter Feeds nach Produkt konfigurieren.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
Aktion security_result.action Wenn die Aktion ALLOW ist, setzen Sie „security_result.action“ auf ALLOW und „security_result.severity“ auf INFORMATIONAL. Wenn die Aktion BLOCK ist, setzen Sie security_result.action auf BLOCK. Wenn die Aktion CAPTCHA ist und captchaResponse.responseCode 405 ist, setzen Sie security_result.action auf BLOCK und security_result.action_details auf „CAPTCHA {captchaResponse.failureReason}“.
captchaResponse.failureReason security_result.action_details Wird in Verbindung mit „action“ und „captchaResponse.responseCode“ verwendet, um „security_result.action_details“ zu bestimmen.
captchaResponse.responseCode security_result.action_details Wird in Verbindung mit „action“ und „captchaResponse.failureReason“ verwendet, um „security_result.action_details“ zu bestimmen.
httpRequest.clientIp principal.ip, principal.asset.ip Direkt zugeordnet zu principal.ip und principal.asset.ip.
httpRequest.headers target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid Iteriert durch jeden Header in httpRequest.headers. Wenn der Headername „host“ oder „Host“ lautet, wird der Wert „target.hostname“ und „target.asset.hostname“ zugeordnet. Wenn der Headername „User-Agent“ oder „user-agent“ lautet, wird der Wert network.http.user_agent zugeordnet und in network.http.parsed_user_agent geparst. Wenn der Headername „Referer“ oder „referer“ lautet, wird der Wert network.http.referral_url zugeordnet. Wenn der Headername „(?i)time-zone“ lautet, wird der Wert „target.location.country_or_region“ zugeordnet. Wenn der Headername „authorization“ lautet, wird der Wert decodiert und der Nutzername extrahiert und „target.user.userid“ zugeordnet. Alle anderen Header werden als Schlüssel/Wert-Paare zu target.resource.attribute.labels hinzugefügt.
httpRequest.httpMethod network.http.method Direkt network.http.method zugeordnet.
httpRequest.requestId network.session_id Direkt network.session_id zugeordnet.
httpRequest.uri target.url Direkt target.url zugeordnet.
httpSourceId target.resource.name Direkt zugeordnet zu target.resource.name.
httpSourceName metadata.product_event_type Direkt zugeordnet zu metadata.product_event_type.
Labels security_result.rule_labels Iteriert durch jedes Label in „labels“. Wenn der Labelname nicht leer ist, wird er als Schlüssel/Wert-Paar zu „security_result.rule_labels“ hinzugefügt.
nonTerminatingMatchingRules security_result.action_details, security_result.rule_labels Iteriert durch jede Regel in nonTerminatingMatchingRules. Wenn die Aktion ALLOW und die Regelaktion CAPTCHA ist, setzen Sie security_result.action_details auf „CAPTCHA SUCCESSFUL“ und fügen Sie die Regel-ID zu security_result.rule_labels mit dem Schlüssel „nonTerminatingCaptchaRuleName“ hinzu. Wenn die Aktion BLOCK oder ALLOW und die Regelaktion COUNT ist, setzen Sie security_result.action_details auf „COUNT RULE“ und fügen Sie die Regel-ID zu security_result.rule_labels mit dem Schlüssel „nonTerminatingCountRuleName“ hinzu. Wenn die Aktion BLOCK oder ALLOW ist und die Regelaktion CHALLENGE ist, setzen Sie security_result.action_details auf „COUNT RULE“ und fügen Sie die Regel-ID zu security_result.rule_labels mit dem Schlüssel „nonTerminatingChallengeRuleName“ hinzu.
rateBasedRuleList security_result.rule_id, security_result.rule_name, security_result.description Wenn „terminatingRuleType“ „RATE_BASED“ ist, wird jede Regel in „rateBasedRuleList“ durchlaufen. Wenn „terminatingRuleId“ mit dem Regelnamen übereinstimmt, werden die Regel-ID, der Regelname und die Beschreibung den Feldern „security_result.rule_id“, „security_result.rule_name“ und „security_result.description“ zugeordnet.
responseCodeSent network.http.response_code Wird direkt network.http.response_code zugeordnet und in eine Ganzzahl konvertiert.
ruleGroupList intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields Iteriert durch jede Regelgruppe in ruleGroupList. Die Regelgruppen-ID wird als Schlüssel/Wert-Paar zu intermediary.labels hinzugefügt. Wenn „terminatingRuleType“ den Wert „MANAGED_RULE_GROUP“ hat und „terminatingRuleId“ mit der Regelgruppen-ID übereinstimmt, werden die Regel-ID, der Regelname und die Beschreibung „security_result.rule_id“, „security_result.rule_name“ bzw. „security_result.description“ zugeordnet. Wenn „terminatingRuleType“ den Wert „GROUP“ hat, wird die ID der beendenden Regel extrahiert und „security_result.rule_name“ und „security_result.description“ zugeordnet. Die ID der beendenden Regelgruppe wird mit dem Schlüssel „terminatingRuleGroupName“ zu „security_result.rule_labels“ hinzugefügt. Wenn „terminatingRuleType“ den Wert „REGULAR“ hat, wird die Aktion der beendenden Regel extrahiert und den Feldern „security_result.detection“ mit dem Schlüssel „terminatingRuleAction{index}“ hinzugefügt.
terminatingRuleId security_result.rule_id, security_result.rule_name, security_result.description Wenn „terminatingRuleType“ den Wert „RATE_BASED“, „MANAGED_RULE_GROUP“ oder „REGULAR“ hat, wird „terminatingRuleId“ „security_result.rule_id“ und „security_result.rule_name“ zugeordnet und zum Erstellen von „security_result.description“ verwendet.
terminatingRuleMatchDetails security_result.description, security_result.category_details, security_result.detection_fields Iteriert durch jede Übereinstimmung in terminatingRuleMatchDetails. Setzt security_result.description auf „Terminating Rule“. Wenn der Bedingungstyp nicht leer ist, wird er zu „security_result.category_details“ hinzugefügt. Wenn der Standort nicht leer ist, wird er mit dem Schlüssel „location“ zu „security_result.detection_fields“ hinzugefügt. Jedes übereinstimmende Datenelement wird mit dem Schlüssel „matchedData“ zu „security_result.detection_fields“ hinzugefügt.
terminatingRuleType security_result.rule_type Direkt zugeordnet zu security_result.rule_type.
timestamp metadata.event_timestamp Wird in einen Zeitstempel konvertiert und metadata.event_timestamp zugeordnet.
webaclId intermediary.resource.name Direkt zugeordnet zu intermediary.resource.name.
metadata.vendor_name Legen Sie diesen Wert auf „AMAZON“ fest.
metadata.product_name Legen Sie „AWS Web Application Firewall“ fest.
metadata.log_type Legen Sie diesen Wert auf „AWS_WAF“ fest.
network.application_protocol Legen Sie diesen Wert auf „HTTP“ fest.
metadata.event_type Wird auf „NETWORK_HTTP“ gesetzt, wenn httpRequest.headers einen „host“- oder „Host“-Header enthält. Andernfalls legen Sie „STATUS_UPDATE“ fest.

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

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