MongoDB-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie MongoDB-Logs mit Bindplane in Google Security Operations aufnehmen.

MongoDB ist eine NoSQL-Dokumentdatenbank, die Audit-Logs für CRUD-Vorgänge, Authentifizierungsereignisse, Datenbankbefehle und Replikatset-Vorgänge generiert. MongoDB schreibt strukturierte JSON-Logdateien lokal, die der Bindplane-Agent direkt aus dem Dateisystem erfassen kann.

Hinweis

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

  • Eine Google SecOps-Instanz
  • Windows Server 2016 oder höher oder Linux-Host mit systemd
  • Netzwerkverbindung zwischen dem Bindplane-Agent und dem MongoDB-Server
  • Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.
  • Privilegierter Zugriff auf den MongoDB-Server (Root- oder Datenbankadministratorrolle)
  • MongoDB Enterprise oder MongoDB Community Edition mit aktiviertem Audit-Logging

Authentifizierungsdatei für die Google SecOps-Datenaufnahme abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme herunter. Speichern Sie die Datei sicher auf dem System, auf dem Bindplane installiert wird.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > Profile auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.

Windows-Installation

  1. Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
  2. Führen Sie dazu diesen Befehl aus:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Warte, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sc query observiq-otel-collector
    

Der Dienst sollte als RUNNING angezeigt werden.

Linux-Installation

  1. Öffnen Sie ein Terminal mit Root- oder sudo-Berechtigungen.
  2. Führen Sie dazu diesen Befehl aus:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Warte, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sudo systemctl status observiq-otel-collector
    

Der Dienst sollte als active (running) angezeigt werden.

Zusätzliche Installationsressourcen

Weitere Installationsoptionen und Informationen zur Fehlerbehebung finden Sie im Installationsleitfaden für den Bindplane-Agent.

Bindplane-Agenten zum Erfassen von Logs und Senden an Google SecOps konfigurieren

Konfigurationsdatei suchen

  • Linux:

    sudo systemctl status observiq-otel-collector
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Konfigurationsdatei bearbeiten

  • Ersetzen Sie den gesamten Inhalt von config.yaml durch die folgende Konfiguration:

    receivers:
        filelog:
            include:
                - /var/log/mongodb/auditLog.json
            start_at: beginning
    
    exporters:
        chronicle/mongodb:
            compression: gzip
            creds_file_path: '/etc/bindplane-agent/ingestion-auth.json'
            customer_id: '<customer_id>'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: MONGO_DB
            raw_log_field: body
            ingestion_labels:
                env: production
    
    service:
        pipelines:
            logs/mongodb_to_chronicle:
                receivers:
                    - filelog
                exporters:
                    - chronicle/mongodb
    

Konfigurationsparameter

Ersetzen Sie die folgenden Platzhalter:

  • Empfängerkonfiguration:

    • filelog: Der Empfängertyp zum Erfassen von Logdateien vom Laufwerk
    • include: Liste der zu überwachenden Dateipfade:
      • Linux: /var/log/mongodb/auditLog.json (Standardpfad für MongoDB-Audit-Logs)
      • Windows: C:\data\log\auditLog.json oder der von Ihnen konfigurierte Audit-Log-Pfad
    • start_at: Wird auf beginning gesetzt, um vorhandene Logs zu lesen, oder auf end, um nur neue Einträge zu lesen.
  • Exporter-Konfiguration:

    • mongodb: Aussagekräftiger Name für den Exportvorgang
    • creds_file_path: Vollständiger Pfad zur Authentifizierungsdatei für die Datenaufnahme:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>: Kunden-ID aus dem vorherigen Schritt
    • endpoint: Regionale Endpunkt-URL:
      • USA: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Asien: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Eine vollständige Liste finden Sie unter Regionale Endpunkte.
    • MONGO_DB: Logtyp, genau wie er in Chronicle angezeigt wird
    • ingestion_labels: Optionale Labels im YAML-Format (z. B. env: production)
  • Pipelinekonfiguration:

    • mongodb_to_chronicle: Aussagekräftiger Name für die Pipeline

Konfigurationsdatei speichern

  • Speichern Sie die Datei nach der Bearbeitung:
    • Linux: Drücken Sie Ctrl+O, dann Enter und dann Ctrl+X.
    • Windows: Klicken Sie auf Datei > Speichern.

Bindplane-Agent neu starten, um die Änderungen zu übernehmen

So starten Sie den Bindplane-Agent unter Linux neu:

  1. Führen Sie dazu diesen Befehl aus:

    sudo systemctl restart observiq-otel-collector
    
  2. Prüfen Sie, ob der Dienst ausgeführt wird:

    sudo systemctl status observiq-otel-collector
    
  3. Logs auf Fehler prüfen:

    sudo journalctl -u observiq-otel-collector -f
    

So starten Sie den Bindplane-Agent unter Windows neu:

  1. Wählen Sie eine der folgenden Optionen aus:

    • Eingabeaufforderung oder PowerShell als Administrator:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Dienstkonsole:
      1. Drücken Sie Win+R, geben Sie services.msc ein und drücken Sie die Eingabetaste.
      2. Suchen Sie nach observIQ OpenTelemetry Collector.
      3. Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
  2. Prüfen Sie, ob der Dienst ausgeführt wird:

    sc query observiq-otel-collector
    
  3. Logs auf Fehler prüfen:

    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

MongoDB so konfigurieren, dass Audit-Logs generiert werden

  1. Melden Sie sich mit Administrator- oder Root-Berechtigungen auf dem MongoDB-Server an.
  2. Öffnen Sie die MongoDB-Konfigurationsdatei (mongod.conf). Standardpfade:
    • Linux: /etc/mongod.conf
    • Windows: C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
  3. Prüfen Sie, ob das Audit-Logging aktiviert ist. Prüfen Sie in der Datei mongod.conf die folgenden Einstellungen:

    • auditLog.destination ist auf file gesetzt.
    • auditLog.format ist auf JSON gesetzt.
    • Notieren Sie sich die auditLog.path (z. B. /var/log/mongodb/auditLog.json).

    • Wenn das Audit-Logging nicht aktiviert ist, fügen Sie mongod.conf Folgendes hinzu:

      auditLog:
        destination: file
        format: JSON
        path: /var/log/mongodb/auditLog.json
      
  4. Starten Sie den MongoDB-Dienst neu, um die Konfiguration anzuwenden:

    • Linux:

      sudo systemctl restart mongod
      
    • Windows:

      net stop MongoDB && net start MongoDB
      
  5. Prüfen Sie, ob die Audit-Logdatei in den konfigurierten Pfad geschrieben wird (z. B. /var/log/mongodb/auditLog.json).

  6. Achten Sie darauf, dass der Pfad include des Bindplane-Agents in config.yaml mit dem in mongod.conf konfigurierten auditLog.path übereinstimmt.

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
ctx, connectionId, connectionCount, attr.protocol, attr.storage.data.bytesRead, attr.storage.data.timeReadingMicros, attr.command.$readPreference.mode, attr.queryHash, param_old, cluster_node, param.indexName, temp_db_value additional.fields Aus verschiedenen Feldern zusammengeführt, basierend auf Bedingungen
db_mechanism, param.mechanism extensions.auth.auth_details Wert aus „db_mechanism“, falls nicht leer, andernfalls „param.mechanism“
extensions.auth.mechanism Auf „MECHANISM_OTHER“ festgelegt
extensions.auth.type Legen Sie „AUTHTYPE_UNSPECIFIED“ fest.
lb_hostname, src_hostname intermediary.hostname Wert aus lb_hostname, wenn nicht leer, andernfalls src_hostname
lb_port, src_port intermediary.port Wert aus „lb_port“, falls nicht leer, andernfalls „src_port“ (in eine Ganzzahl konvertiert)
msg metadata.description Wert direkt kopiert
metadata.event_type Wird basierend auf den Bedingungen msg_atype, category, param_passwordChanged, param_command und remote_ip festgelegt.
msg_atype, category metadata.product_event_type Wert aus „msg_atype“, falls nicht leer, andernfalls „category“
id, type, traceId metadata.product_log_id Wert aus „id“, falls nicht leer, andernfalls „uuid.$binary“, falls „type“ == „04“, andernfalls „traceId“
metadata.product_name Auf „MongoDB Enterprise“ festgelegt
metadata.vendor_name Auf „MongoDB“ festgelegt
application_name principal.application Wert direkt kopiert
accessLog.hostname principal.asset.hostname Wert direkt kopiert
remote_ip principal.asset.ip Wert direkt kopiert
software_label principal.asset.software Zusammengeführt aus software_label
accessLog.hostname principal.hostname Wert direkt kopiert
remote_ip principal.ip Wert direkt kopiert
os_type principal.platform Wird auf WINDOWS gesetzt, wenn es mit Windows übereinstimmt; auf MAC, wenn es mit osx oder mac übereinstimmt; auf LINUX, wenn es mit Linux übereinstimmt
os_name, param.clientMetadata.os.name principal.platform_patch_level Wert aus os_name, falls nicht leer, andernfalls param.clientMetadata.os.name
os_version, param.clientMetadata.os.version principal.platform_version Wert aus „os_version“, falls nicht leer, andernfalls „param.clientMetadata.os.version“
remote_port principal.port In Ganzzahl umgewandelt
principal_userid principal.user.userid Wert direkt kopiert
sr_action security_result.action Wert direkt kopiert
param.reason, param.indexBuildState security_result.description Wert aus „param.reason“, wenn „msg_atype“ == „logout“; aus „param.indexBuildState“, wenn „msg_atype“ in [„createIndex“, „dropIndex“]
severity, level security_result.severity Wird auf INFORMATIONAL gesetzt, wenn die Schweregradangabe in ["i", "I"] oder die Stufe in ["INFO", "DEBUG"] liegt; auf ERROR, wenn die Schweregradangabe in ["e", "E"] oder die Stufe auf "ERROR" liegt; auf MEDIUM, wenn die Schweregradangabe in ["w", "W", "f", "F"] liegt.
msg_result, attr.error, attr.planSummary, reason, attr.msg_data security_result.summary Wird basierend auf den Bedingungen „msg_result“, „attr.error“, „attr.planSummary“, „reason“ und „attr.msg_data“ festgelegt.
db_value target.administrative_domain Wert direkt kopiert
application_name target.application Wert direkt kopiert
local_ip target.asset.ip Wert direkt kopiert
host_group target.group.group_display_name Wert direkt kopiert
local_ip target.ip Wert direkt kopiert
local_port target.port In Ganzzahl umgewandelt
old_name_label, cluster_node_label, mode_label, query_hash_label, bytes_read_label, time_reading_micro_label, environment_label, area_label target.resource.attribute.labels Aus verschiedenen Label-Feldern zusammengeführt
param_ns, db_value, param_new, param.args.find target.resource.name Basierend auf den Bedingungen „msg_atype“ und „param_command“ festgelegt
target.resource.resource_subtype Auf „MongoDB Database“ für Datenbank-/Nutzerereignisse, „MongoDB Collection“ für Sammlungsereignisse und „MongoDB Index“ für Indexereignisse festgelegt
target.resource.resource_type Auf „DATABASE“ für Datenbank-/Nutzerereignisse und „TABLE“ für Sammlungs-/Indexereignisse festlegen
db_user, param.user target.user.userid Wert aus db_user, wenn nicht leer, andernfalls param.user
service.name event.idm.read_only_udm.target.application Aus dem Änderungsprotokoll zugeordnet
host.name event.idm.read_only_udm.principal.hostname Aus Änderungsprotokoll zugeordnet
host.name event.idm.read_only_udm.principal.asset.hostname Aus Änderungsprotokoll zugeordnet
mongodb.group.id event.idm.read_only_udm.principal.group.product_object_id Aus Änderungsprotokoll zugeordnet
mongodb.cluster.name event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
mongodb.customer.cluster.name event.idm.read_only_udm.target.resource.attribute.labels Aus Änderungsprotokoll zugeordnet
timestamp event.idm.read_only_udm.metadata.event_timestamp Aus Änderungsprotokoll zugeordnet
ts.date event.idm.read_only_udm.metadata.event_timestamp Aus Änderungsprotokoll zugeordnet
uuid.binary event.idm.read_only_udm.metadata.product_log_id Aus Änderungsprotokoll zugeordnet
users.1.user event.idm.read_only_udm.principal.user.userid Aus dem Änderungsprotokoll zugeordnet
remote.ip event.idm.read_only_udm.principal.ip und event.idm.read_only_udm.principal.asset.ip Aus dem Änderungsprotokoll zugeordnet
remote.port event.idm.read_only_udm.principal.port Aus Änderungsprotokoll zugeordnet
local.ip event.idm.read_only_udm.target.ip und event.idm.read_only_udm.target.asset.ip Aus dem Änderungsprotokoll zugeordnet
local.port event.idm.read_only_udm.target.port Aus Änderungsprotokoll zugeordnet
roles.role event.idm.read_only_udm.principal.user.attribute.roles Aus Änderungsprotokoll zugeordnet
param.args.client.application.name event.idm.read_only_udm.principal.application Aus Änderungsprotokoll zugeordnet
param.args.client.os.type event.idm.read_only_udm.principal.asset.platform_software.platform Aus Änderungsprotokoll zugeordnet
param.args.client.os.version event.idm.read_only_udm.principal.platform_version Aus Änderungsprotokoll zugeordnet
param.args.client.os.architecture event.idm.read_only_udm.principal.asset.hardware Aus Änderungsprotokoll zugeordnet
atype event.idm.read_only_udm.metadata.product_event_type Aus Änderungsprotokoll zugeordnet
param.command event.idm.read_only_udm.metadata.product_event_type Aus Änderungsprotokoll zugeordnet
param.ns event.idm.read_only_udm.target.resource.name Aus Änderungsprotokoll zugeordnet
result event.idm.read_only_udm.security_result.action Aus Änderungsprotokoll zugeordnet
mongodb.log.type event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.db event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
uuid.type event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.clientOperationKey.type event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.clientOperationKey.binary event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.aggregate event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.mayBypassWriteBlocking event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.configTime.timestamp.t event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.topologyTime.timestamp.t event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.audit event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.cursor.batchSize.numberLong event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.includeQueryStatsMetrics event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.fromMongos event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.readConcern.provenance event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.readConcern.level event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.writeConcern.provenance event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.writeConcern.level event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.client.platform event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.client.driver.name event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.client.driver.version event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.client.os.name event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.clusterTime event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.lsid.id.type event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.lsid.uid.binary event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.users.1.db event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.client.mongos.version event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.writeConcern.w event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.writeConcern.wtimeout event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.lsid.uid.type event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.pipeline.1.match.managedClusterType event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.pipeline.2.group.n.sum.const event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.pipeline.2.group._id.const event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.client.mongos.client.port event.idm.read_only_udm.additional.fields Aus Änderungsprotokoll zugeordnet
param.args.audit.impersonatedRoles event.idm.read_only_udm.principal.user.attribute.roles Aus Änderungsprotokoll zugeordnet
param.args.audit.impersonatedUser event.idm.read_only_udm.principal.user.attribute.labels Aus dem Änderungsprotokoll zugeordnet
param.args.client.mongos.client event.idm.read_only_udm.principal.ip und event.idm.read_only_udm.principal.asset.ip Aus dem Änderungsprotokoll zugeordnet
param.args.client.mongos.host event.idm.read_only_udm.intermediary.ip Aus Änderungsprotokoll zugeordnet
param.args.client.mongos.host event.idm.read_only_udm.intermediary.port Aus Änderungsprotokoll zugeordnet
accessLog.authResult additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.authSource additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.failureReason additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.groupId target.resource.product_object_id Aus Änderungsprotokoll zugeordnet
accessLog.ipAddress intermediary.ip Aus Änderungsprotokoll zugeordnet
accessLog.logLine.t.$date additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.s additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.c additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.id additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.ctx additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.msg additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.client additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.isSpeculative additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.isClusterMember additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.mechanism additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.user additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.db additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.result additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.metrics.conversation_duration.micros additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.metrics.conversation_duration.summary.step additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.metrics.conversation_duration.summary.step_total additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.logLine.attr.metrics.conversation_duration.summary.duration_micros additional.fields Aus Änderungsprotokoll zugeordnet
accessLog.username target.user.user_display_name Aus Änderungsprotokoll zugeordnet
accessLog.timestamp additional.fields Aus Änderungsprotokoll zugeordnet
roles.db principal.user.attribute.roles Aus Änderungsprotokoll zugeordnet
roles.db target.user.attribute.roles Aus dem Änderungsprotokoll zugeordnet

Änderungsprotokoll

Änderungsprotokoll für diesen Parser ansehen

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