Elastic Auditbeat-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Elastic Auditbeat-Logs mit Amazon S3 in Google Security Operations aufnehmen. Der Parser extrahiert Felder aus den JSON-Logs, normalisiert sie im Unified Data Model (UDM) und reichert die Daten mit zusätzlichem Kontext wie Hostinformationen, Netzwerkdetails und Sicherheitsklassifizierungen an. Es werden verschiedene Ereignistypen verarbeitet, indem event1.action und andere Felder bestimmten UDM-Metadaten-Ereignistypen zugeordnet werden. Standardmäßig wird GENERIC_EVENT oder, falls möglich, eine spezifischere Kategorie verwendet.

Hinweise

Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz.
  • Privilegierter Zugriff auf den Elastic Auditbeat-Server.
  • Privilegierter Zugriff auf den Logstash-Server.
  • Privilegierter Zugriff auf AWS (S3, Identity and Access Management (IAM)).

Voraussetzungen für Elastic Auditbeat

  1. Elastic Auditbeat muss auf Ihren Servern installiert und konfiguriert sein.
  2. Installieren Sie Logstash auf einem dedizierten Server oder zusammen mit Auditbeat.
  3. Notieren Sie sich den Speicherort der Auditbeat-Konfigurationsdatei (in der Regel /etc/auditbeat/auditbeat.yml).

AWS S3-Bucket und IAM für Google SecOps konfigurieren

  1. Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu der Anleitung unter Bucket erstellen.
  2. Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B. elastic-auditbeat-logs).
  3. Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
  4. Wählen Sie den erstellten Nutzer aus.
  5. Wählen Sie den Tab Sicherheitsanmeldedaten aus.
  6. Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
  7. Wählen Sie Drittanbieterdienst als Anwendungsfall aus.
  8. Klicken Sie auf Weiter.
  9. Optional: Fügen Sie ein Beschreibungstag hinzu.
  10. Klicken Sie auf Zugriffsschlüssel erstellen.
  11. Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) für die zukünftige 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.
  18. Wählen Sie die Richtlinie aus.
  19. Klicken Sie auf Weiter.
  20. Klicken Sie auf Berechtigungen hinzufügen.

Auditbeat so konfigurieren, dass Daten an Logstash gesendet werden

  1. Bearbeiten Sie die Auditbeat-Konfigurationsdatei /etc/auditbeat/auditbeat.yml.
  2. Kommentieren Sie alle vorhandenen Ausgabekonfigurationen (Elasticsearch usw.) aus.
  3. Fügen Sie die Logstash-Ausgabekonfiguration hinzu:

    # ==================== Outputs ====================
    output.logstash:
      hosts: ["localhost:5044"]
      # If Logstash is on a different server, use its IP/hostname
      # hosts: ["logstash-server:5044"]
    
      # Optional: Enable load balancing if using multiple Logstash instances
      loadbalance: true
    
      # Optional: Configure bulk settings (default is 2048)
      bulk_max_size: 2048
    
      # Optional: Configure SSL if needed
      # ssl.enabled: true
      # ssl.certificate_authorities: ["/path/to/ca.crt"]
    
  4. Starten Sie Auditbeat neu, damit die Änderungen übernommen werden:

    sudo systemctl restart auditbeat
    

Logstash-Pipeline konfigurieren

  1. Erstellen Sie eine neue Logstash-Pipeline-Konfigurationsdatei /etc/logstash/conf.d/auditbeat-to-s3.conf:

    input {
      beats {
        port => 5044
        # Optional: Configure SSL
        # ssl => true
        # ssl_certificate => "/path/to/server.crt"
        # ssl_key => "/path/to/server.key"
      }
    }
    
    filter {
      # Add any necessary transformations here
      # The data should remain in raw JSON format for Chronicle parsing
    
      # Optional: Add metadata for debugging
      mutate {
        add_field => { "[@metadata][pipeline]" => "auditbeat-to-s3" }
      }
    }
    
    output {
      s3 {
        # AWS credentials
        access_key_id => "YOUR_AWS_ACCESS_KEY_ID"
        secret_access_key => "YOUR_AWS_SECRET_ACCESS_KEY"
    
        # S3 bucket configuration
        region => "us-east-1"  # Replace with your bucket region
        bucket => "elastic-auditbeat-logs"  # Replace with your bucket name
    
        # Organize logs by date using Logstash timestamp interpolation
        prefix => "auditbeat/%{+YYYY}/%{+MM}/%{+dd}/"
    
        # File rotation settings
        size_file => 10485760  # 10MB files
        time_file => 5  # Rotate every 5 minutes
    
        # Compression for cost optimization
        encoding => "gzip"
    
        # Output format - keep as JSON for Chronicle
        codec => "json_lines"
    
        # Optional: Server-side encryption
        # server_side_encryption => true
        # server_side_encryption_algorithm => "AES256"
      }
    
      # Optional: Keep a local copy for debugging
      # stdout { 
      #   codec => rubydebug 
      # }
    }
    
    • Ersetzen Sie YOUR_AWS_ACCESS_KEY_ID und YOUR_AWS_SECRET_ACCESS_KEY durch Ihre tatsächlichen AWS-Anmeldedaten.
    • Aktualisieren Sie die Werte region und bucket entsprechend Ihrer S3-Konfiguration.
    • Starten Sie Logstash oder starten Sie es neu:
    sudo systemctl restart logstash
    

(Optional) IAM-Nutzer mit Lesezugriff und Schlüssel für Google SecOps erstellen

  1. Rufen Sie die AWS-Konsole > IAM > Nutzer auf.
  2. Klicken Sie auf Add users (Nutzer hinzufügen).
  3. Geben Sie die folgenden Konfigurationsdetails an:
    • Nutzer: Geben Sie secops-reader ein.
    • Zugriffstyp: Wählen Sie Zugriffsschlüssel – programmatischer Zugriff aus.
  4. Klicken Sie auf Nutzer erstellen.
  5. Minimale Leseberechtigung (benutzerdefiniert) anhängen: Nutzer > secops-reader > Berechtigungen > Berechtigungen hinzufügen > Richtlinien direkt anhängen > Richtlinie erstellen.
  6. JSON:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::elastic-auditbeat-logs"
        }
      ]
    }
    
  7. Name = secops-reader-policy.

  8. Klicken Sie auf Richtlinie erstellen> suchen/auswählen> Weiter> Berechtigungen hinzufügen.

  9. Erstellen Sie einen Zugriffsschlüssel für secops-reader: Sicherheitsanmeldedaten > Zugriffsschlüssel.

  10. Klicken Sie auf Zugriffsschlüssel erstellen.

  11. Laden Sie die Datei .CSV herunter. Sie fügen diese Werte in den Feed ein.

Feed in Google SecOps konfigurieren, um Elastic Auditbeat-Logs aufzunehmen

  1. Rufen Sie die SIEM-Einstellungen > Feeds auf.
  2. Klicken Sie auf + Neuen Feed hinzufügen.
  3. Geben Sie im Feld Feedname einen Namen für den Feed ein, z. B. Elastic Auditbeat Logs.
  4. Wählen Sie Amazon S3 V2 als Quelltyp aus.
  5. Wählen Sie Elastic Audit Beats als Logtyp aus.
  6. Klicken Sie auf Weiter.
  7. Geben Sie Werte für die folgenden Eingabeparameter an:
    • S3-URI: s3://elastic-auditbeat-logs/auditbeat/
    • Optionen zum Löschen der Quelle: Wählen Sie die gewünschte Option zum Löschen aus.
    • Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
    • Zugriffsschlüssel-ID: Nutzerzugriffsschlüssel mit Zugriff auf den S3-Bucket.
    • Geheimer Zugriffsschlüssel: Der geheime Schlüssel des Nutzers mit Zugriff auf den S3-Bucket.
    • Asset-Namespace: Der Asset-Namespace.
    • Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
  8. Klicken Sie auf Weiter.
  9. Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
@timestamp metadata.event_timestamp Der Ereigniszeitstempel wird aus dem Feld @timestamp geparst.
agent.id observer.asset_id Dem Wert muss „agent_id: “ vorangestellt werden.
agent.type observer.application Die Observer-Anwendung ist auf den Agent-Typ festgelegt.
agent.version observer.platform_version Die Observer-Plattformversion wird auf die Agent-Version festgelegt.
client.bytes principal.labels Als Label mit dem Schlüssel „Bytes“ hinzugefügt. In String umgewandelt.
client.ip principal.ip Die IP-Adresse des Hauptkontos wird auf die Client-IP-Adresse festgelegt.
client.packets principal.labels Als Label mit dem Schlüssel „Packets“ hinzugefügt. In String umgewandelt.
client.port principal.port Der Hauptport wird auf den Clientport festgelegt. In Ganzzahl konvertiert.
cloud.availability_zone principal.cloud.availability_zone Die primäre Cloud-Verfügbarkeitszone wird auf die Cloud-Verfügbarkeitszone festgelegt.
cloud.instance.id principal.resource.id Die Hauptkonto-Ressourcen-ID wird auf die Cloud-Instanz-ID festgelegt.
cloud.machine.type principal.resource.resource_subtype Der primäre Ressourcenuntertyp wird auf den Cloud-Maschinentyp festgelegt.
cloud.region principal.cloud.availability_zone Wenn eine Cloud-Region vorhanden ist, wird die Verfügbarkeitszone überschrieben.
destination.bytes target.labels Als Label mit dem Schlüssel „Bytes“ hinzugefügt. In String umgewandelt.
destination.ip target.ip Die Ziel-IP wird auf die Ziel-IP festgelegt.
destination.packets target.labels Als Label mit dem Schlüssel „Packets“ hinzugefügt. In String umgewandelt.
destination.port target.port Der Zielport wird auf den Zielport festgelegt. In Ganzzahl konvertiert.
ecs.version metadata.product_version Falls vorhanden, wird der Wert aus jsonPayload.@metadata.version überschrieben.
event1.category security_result.category_details Alle Werte werden „category_details“ hinzugefügt.
event1.duration network.session_duration.seconds In Ganzzahl konvertiert.
event1.id metadata.product_log_id Die Metadaten-Produktlog-ID wird auf die Ereignis-ID festgelegt.
event1.outcome extensions.auth.auth_details Die Autorisierungsdetails werden auf das Ergebnis des Ereignisses festgelegt.
file.extension target.file.mime_type Der MIME-Typ der Zieldatei wird auf die Dateiendung festgelegt.
file.hash.sha1 target.file.sha1 Der SHA-1-Wert der Zieldatei wird auf den SHA-1-Hash der Datei festgelegt.
file.path target.file.full_path Der vollständige Pfad der Zieldatei wird auf den Pfad festgelegt.
file.size target.file.size In „uinteger“ konvertiert.
group.id principal.group.product_object_id Die ID des Hauptgruppenprodukts wird auf die Gruppen-ID festgelegt.
group.name principal.group.group_display_name Der Anzeigename der Hauptgruppe wird auf den Gruppennamen festgelegt.
host.architecture principal.asset.hardware.cpu_platform Wird in der temporären Variablen hardware.cpu_platform gespeichert und dann in principal.asset.hardware zusammengeführt.
host.hostname principal.hostname Der Prinzipal-Hostname wird auf den Host-Hostname festgelegt.
host.id principal.asset.asset_id Beginnt mit „Host-ID: “.
host.ip principal.asset.ip Alle Werte werden den IP-Adressen des Haupt-Assets hinzugefügt.
host.mac principal.mac Bindestriche werden durch Doppelpunkte ersetzt.
host.name principal.hostname, observer.hostname Falls vorhanden, wird der Wert aus host.hostname überschrieben.
host.os.kernel principal.platform_patch_level Das Haupt-Patch-Level der Plattform wird auf den Kernel des Hostbetriebssystems festgelegt.
host.os.version principal.platform_version Die Hauptplattformversion wird auf die Version des Hostbetriebssystems festgelegt. In der temporären Variablen host_os_version gespeichert.
httpRequest.remoteIp target.ip Wenn dieser Wert vorhanden ist und keine andere Ziel-IP festgelegt ist, wird er verwendet.
httpRequest.requestMethod network.http.method Die HTTP-Methode des Netzwerks wird auf die HTTP-Anfragemethode festgelegt.
httpRequest.requestSize network.sent_bytes In „uinteger“ konvertiert.
httpRequest.requestUrl network.http.referral_url Die HTTP-Referrer-URL des Netzwerks wird auf die HTTP-Anfrage-URL festgelegt.
httpRequest.responseSize network.received_bytes In „uinteger“ konvertiert.
httpRequest.serverIp principal.ip Wenn dieser Wert vorhanden ist und keine andere Haupt-IP-Adresse festgelegt ist, wird er verwendet.
httpRequest.status network.http.response_code In Ganzzahl konvertiert.
httpRequest.userAgent network.http.user_agent Der HTTP-User-Agent des Netzwerks wird auf den User-Agent der HTTP-Anfrage festgelegt.
insertId network.session_id Die Netzwerk-Sitzungs-ID wird auf die Insert-ID festgelegt.
jsonPayload.@metadata.beat metadata.product_event_type Der Ereignistyp für Metadatenprodukte wird auf den Metadaten-Beat festgelegt.
jsonPayload.@metadata.version metadata.product_version Die Metadaten-Produktversion wird auf die Metadatenversion festgelegt.
jsonPayload.destination.ip target.ip Wenn dieser Wert vorhanden ist und keine andere Ziel-IP festgelegt ist, wird er verwendet.
jsonPayload.destination.port target.port Wenn dieser Wert vorhanden ist und kein anderer Zielport festgelegt ist, wird er verwendet. In Ganzzahl konvertiert.
jsonPayload.event1.category security_result.category_details Alle Werte werden „category_details“ hinzugefügt.
jsonPayload.file.path target.file.full_path Wenn dieser Wert vorhanden ist und kein anderer Zielpfad festgelegt ist, wird er verwendet.
jsonPayload.process.executable principal.process.file.full_path, target.process.file.full_path Wird verwendet, um sowohl den vollständigen Pfad des Hauptprozesses als auch des Zielprozesses festzulegen, wenn kein anderer Wert vorhanden ist.
jsonPayload.process.name principal.application Wenn dieser Wert vorhanden ist und keine andere primäre Anwendung festgelegt ist, wird er verwendet.
jsonPayload.process.parent.pid principal.process.pid Wenn dieser Wert vorhanden ist und keine andere PID für den Hauptprozess festgelegt ist, wird er verwendet. In String umgewandelt.
jsonPayload.process.parent.ppid principal.process.parent_process.pid Wenn dieser Wert vorhanden ist und keine andere PID des übergeordneten Hauptprozesses festgelegt ist, wird dieser Wert verwendet. In String umgewandelt.
jsonPayload.process.parent.process.executable principal.process.file.full_path Wenn dieser Wert vorhanden ist und kein anderer vollständiger Pfad für den Hauptprozess festgelegt ist, wird dieser Wert verwendet.
jsonPayload.process.parent.process.exe principal.process.file.full_path Wenn dieser Wert vorhanden ist und kein anderer vollständiger Pfad für den Hauptprozess festgelegt ist, wird dieser Wert verwendet.
jsonPayload.process.parent.process.title principal.process.command_line Wenn dieser Wert vorhanden ist und keine andere Befehlszeile für den Hauptprozess festgelegt ist, wird er verwendet.
jsonPayload.process.pid target.process.pid Die PID des Zielprozesses wird auf die PID des Prozesses in der JSON-Nutzlast festgelegt.
jsonPayload.process.title target.process.command_line Die Befehlszeile des Zielprozesses wird auf den Prozesstitel der JSON-Nutzlast festgelegt.
jsonPayload.user.id target.user.userid Wenn dieser Wert vorhanden ist und keine andere Zielnutzer-ID festgelegt ist, wird er verwendet. In String umgewandelt.
jsonPayload.user.name target.user.user_display_name Wenn dieser Wert vorhanden ist und kein anderer Anzeigename für den Zielnutzer festgelegt ist, wird er verwendet.
msg metadata.description Die Metadatenbeschreibung wird auf die Nachricht festgelegt.
network.bytes network.sent_bytes In „uinteger“ konvertiert.
network.community_id network.community_id Die Netzwerk-Community-ID wird auf die Netzwerk-Community-ID festgelegt.
network.transport network.ip_protocol In Großbuchstaben umgewandelt.
package.description security_result.description Die Beschreibung des Sicherheitsergebnisses wird auf die Paketbeschreibung festgelegt.
package.name security_result.rule_name Der Name der Sicherheitsergebnisregel wird auf den Paketnamen festgelegt.
package.reference security_result.about.url Die URL des Sicherheitsergebnisses ist auf die Paketreferenz festgelegt.
package.size security_result.about.file.size In „uinteger“ konvertiert.
package.type security_result.about.file.mime_type, security_result.rule_type Der MIME-Typ und der Regeltyp des Sicherheitsergebnisses werden auf den Pakettyp festgelegt.
process.created principal.asset.creation_time Falls vorhanden, wird dieser Wert verwendet. Wird als ISO8601 geparst.
process.entity_id principal.process.product_specific_process_id Beginnt mit „Process:“ (Prozess:).
process.executable principal.process.file.full_path, target.process.file.full_path Wird verwendet, um sowohl den vollständigen Pfad des Hauptprozesses als auch des Zielprozesses festzulegen, wenn kein anderer Wert vorhanden ist.
process.hash.sha1 principal.process.file.sha1 Der SHA-1-Hash des Hauptprozesses wird auf den SHA-1-Hash des Prozesses festgelegt.
process.name principal.application Wenn dieser Wert vorhanden ist und keine andere primäre Anwendung festgelegt ist, wird er verwendet.
process.pid principal.process.pid Wenn dieser Wert vorhanden ist und keine andere PID für den Hauptprozess festgelegt ist, wird er verwendet. In String umgewandelt.
process.ppid principal.process.parent_process.pid Wenn dieser Wert vorhanden ist und keine andere PID des übergeordneten Hauptprozesses festgelegt ist, wird dieser Wert verwendet. In String umgewandelt.
process.start principal.asset.creation_time Wenn process.created nicht vorhanden ist und dieses Feld vorhanden ist, wird dieser Wert verwendet. Wird als ISO8601 geparst.
resource.labels.backend_service_name target.resource.name Der Name der Zielressource wird auf den Namen des Backend-Dienstes der Ressource festgelegt.
resource.labels.forwarding_rule_name target.resource.attribute.labels Als Label mit dem Schlüssel „Name der Weiterleitungsregel“ hinzugefügt.
resource.labels.project_id target.resource.product_object_id Die Produktobjekt-ID der Zielressource wird auf die Projekt-ID der Ressource festgelegt.
resource.labels.target_proxy_name target.resource.attribute.labels Als Label mit dem Schlüssel „Target proxy name“ hinzugefügt.
resource.labels.url_map_name target.resource.attribute.labels Als Label mit dem Schlüssel „URL map name“ (Name der URL-Zuordnung) hinzugefügt.
server.bytes intermediary.labels Als Label mit dem Schlüssel „Bytes“ hinzugefügt. In String umgewandelt.
server.ip intermediary.ip Die Zwischen-IP wird auf die Server-IP festgelegt.
server.packets intermediary.labels Als Label mit dem Schlüssel „Packets“ hinzugefügt. In String umgewandelt.
server.port intermediary.port Der Zwischenport wird auf den Serverport festgelegt. In Ganzzahl konvertiert.
service.type target.application Die Zielanwendung ist auf den Diensttyp festgelegt.
source.bytes src.labels Als Label mit dem Schlüssel „Bytes“ hinzugefügt. In String umgewandelt.
source.ip src.ip Die Quell-IP wird auf die Quell-IP festgelegt.
source.packets src.labels Als Label mit dem Schlüssel „Packets“ hinzugefügt. In String umgewandelt.
source.port src.port Der Quellport wird auf den Quellport festgelegt. In Ganzzahl konvertiert.
system.audit.host.boottime about.asset.last_boot_time Wird als ISO8601 geparst.
system.audit.host.hostname about.hostname Der Hostname „about“ wird auf den Hostnamen des System-Audit-Hosts festgelegt.
system.audit.host.id principal.user.userid Die Hauptnutzer-ID wird auf die System-Audit-Host-ID festgelegt.
system.audit.host.mac.0 about.mac Die MAC-Adresse „about“ wird auf die MAC-Adresse des ersten System-Audit-Hosts festgelegt.
trace target.process.file.full_path Wenn dieser Wert vorhanden ist und kein anderer vollständiger Pfad für den Zielprozess festgelegt ist, wird er verwendet.
user.effective.id target.user.userid Wenn dieser Wert vorhanden ist und keine andere Zielnutzer-ID festgelegt ist, wird er verwendet.
user.effective.name target.user.user_display_name Wenn dieser Wert vorhanden ist und kein anderer Anzeigename für den Zielnutzer festgelegt ist, wird er verwendet.
user.id target.user.userid Wenn dieser Wert vorhanden ist und keine andere Zielnutzer-ID festgelegt ist, wird er verwendet. In String umgewandelt.
user.name target.user.user_display_name Wenn dieser Wert vorhanden ist und kein anderer Anzeigename für den Zielnutzer festgelegt ist, wird er verwendet.
metadata.event_type Wird anfangs auf „GENERIC_EVENT“ festgelegt. Geändert basierend auf der Logik, die in den Parser-Codekommentaren beschrieben ist.
metadata.log_type Legen Sie diesen Wert auf „ELASTIC_AUDITBEAT“ fest.
metadata.product_name Auf „Auditbeat“ festgelegt.
metadata.vendor_name Legen Sie diesen Wert auf „Elastisch“ fest.
extensions.auth.type Für USER_LOGIN- und USER_LOGOUT-Ereignisse auf „AUTHTYPE_UNSPECIFIED“ festgelegt.
auditd.data.syscall metadata.product_event_type Der Metadaten-Produkt-Ereignistyp wird auf den auditd-Systemaufruf festgelegt.

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