Raccogliere i log MongoDB

Supportato in:

Questo documento spiega come importare i log MongoDB in Google Security Operations utilizzando Bindplane.

MongoDB è un database di documenti NoSQL che genera audit log per operazioni CRUD, eventi di autenticazione, comandi di database e operazioni del set di repliche. MongoDB scrive localmente file di log JSON strutturati, che l'agente Bindplane può raccogliere direttamente dal file system.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive oppure host Linux con systemd
  • Connettività di rete tra l'agente Bindplane e il server MongoDB
  • Se l'esecuzione avviene dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
  • Accesso con privilegi al server MongoDB (ruolo di amministratore root o del database)
  • MongoDB Enterprise o MongoDB Community Edition con audit logging abilitato

Recuperare il file di autenticazione dell'importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.

Ottieni l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sudo systemctl status observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.

Configura l'agente Bindplane per importare i log e inviarli a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo systemctl status observiq-otel-collector
    
  • Windows:

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

Modifica il file di configurazione

  • Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    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
    

Parametri di configurazione

Sostituisci i seguenti segnaposto:

  • Configurazione del destinatario:

    • filelog: Il tipo di ricevitore per la raccolta dei file di log dal disco
    • include: elenco dei percorsi dei file da monitorare:
      • Linux: /var/log/mongodb/auditLog.json (percorso predefinito dell'audit log di MongoDB)
      • Windows: C:\data\log\auditLog.json o il percorso dell'audit log configurato
    • start_at: impostato su beginning per leggere i log esistenti o su end per leggere solo le nuove voci
  • Configurazione dell'esportatore:

    • mongodb: Nome descrittivo per l'esportatore
    • creds_file_path: Percorso completo del file di autenticazione dell'acquisizione:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>: l'ID cliente del passaggio precedente
    • endpoint: URL dell'endpoint regionale:
      • Stati Uniti: malachiteingestion-pa.googleapis.com
      • Europa: europe-malachiteingestion-pa.googleapis.com
      • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
      • Per l'elenco completo, consulta Endpoint regionali.
    • MONGO_DB: Tipo di log esattamente come appare in Chronicle
    • ingestion_labels: etichette facoltative in formato YAML (ad esempio, env: production)
  • Configurazione della pipeline:

    • mongodb_to_chronicle: Nome descrittivo della pipeline

Salva il file di configurazione

  • Dopo la modifica, salva il file:
    • Linux: premi Ctrl+O, poi Enter e infine Ctrl+X.
    • Windows: fai clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

Per riavviare l'agente Bindplane in Linux:

  1. Esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Verifica che il servizio sia in esecuzione:

    sudo systemctl status observiq-otel-collector
    
  3. Controlla i log per individuare eventuali errori:

    sudo journalctl -u observiq-otel-collector -f
    

Per riavviare l'agente Bindplane in Windows:

  1. Scegli una delle seguenti opzioni:

    • Prompt dei comandi o PowerShell come amministratore:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Console dei servizi:
      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.
  2. Verifica che il servizio sia in esecuzione:

    sc query observiq-otel-collector
    
  3. Controlla i log per individuare eventuali errori:

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

Configurare MongoDB per generare audit log

  1. Accedi al server MongoDB con privilegi di amministratore o root.
  2. Apri il file di configurazione MongoDB (mongod.conf). Percorsi predefiniti:
    • Linux: /etc/mongod.conf
    • Windows: C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
  3. Verifica che il log di controllo sia abilitato. Nel file mongod.conf, verifica le seguenti impostazioni:

    • auditLog.destination è impostato su file.
    • auditLog.format è impostato su JSON.
    • Prendi nota di auditLog.path (ad esempio, /var/log/mongodb/auditLog.json).

    • Se l'audit logging non è abilitato, aggiungi quanto segue a mongod.conf:

      auditLog:
        destination: file
        format: JSON
        path: /var/log/mongodb/auditLog.json
      
  4. Riavvia il servizio MongoDB per applicare la configurazione:

    • Linux:

      sudo systemctl restart mongod
      
    • Windows:

      net stop MongoDB && net start MongoDB
      
  5. Verifica che il file di log di controllo venga scritto nel percorso configurato (ad esempio, /var/log/mongodb/auditLog.json).

  6. Assicurati che il percorso dell'agente Bindplane include in config.yaml corrisponda a auditLog.path configurato in mongod.conf.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
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 Uniti da vari campi in base alle condizioni
db_mechanism, param.mechanism extensions.auth.auth_details Valore di db_mechanism se non è vuoto, altrimenti param.mechanism
extensions.auth.mechanism Impostato su "MECHANISM_OTHER"
extensions.auth.type Imposta su "AUTHTYPE_UNSPECIFIED"
lb_hostname, src_hostname intermediary.hostname Valore di lb_hostname se non è vuoto, altrimenti src_hostname
lb_port, src_port intermediary.port Valore di lb_port se non è vuoto, altrimenti src_port (convertito in numero intero)
msg metadata.description Valore copiato direttamente
metadata.event_type Impostato in base alle condizioni msg_atype, category, param_passwordChanged, param_command, remote_ip
msg_atype, category metadata.product_event_type Valore di msg_atype se non è vuoto, altrimenti categoria
id, type, traceId metadata.product_log_id Valore di id se non vuoto, altrimenti uuid.$binary se type == "04", altrimenti traceId
metadata.product_name Impostato su "MongoDB Enterprise"
metadata.vendor_name Impostalo su "MongoDB"
application_name principal.application Valore copiato direttamente
accessLog.hostname principal.asset.hostname Valore copiato direttamente
remote_ip principal.asset.ip Valore copiato direttamente
software_label principal.asset.software Unito da software_label
accessLog.hostname principal.hostname Valore copiato direttamente
remote_ip principal.ip Valore copiato direttamente
os_type principal.platform Imposta WINDOWS se corrisponde a Windows; MAC se corrisponde a osx o mac; LINUX se corrisponde a Linux
os_name, param.clientMetadata.os.name principal.platform_patch_level Valore di os_name se non è vuoto, altrimenti param.clientMetadata.os.name
os_version, param.clientMetadata.os.version principal.platform_version Valore di os_version se non è vuoto, altrimenti param.clientMetadata.os.version
remote_port principal.port Convertito in numero intero
principal_userid principal.user.userid Valore copiato direttamente
sr_action security_result.action Valore copiato direttamente
param.reason, param.indexBuildState security_result.description Valore di param.reason se msg_atype == "logout"; di param.indexBuildState se msg_atype in ["createIndex", "dropIndex"]
severity, level security_result.severity Impostato su INFORMATIONAL se la gravità è ["i", "I"] o il livello è ["INFO", "DEBUG"]; ERROR se la gravità è ["e", "E"] o il livello è "ERROR"; MEDIUM se la gravità è ["w", "W", "f", "F"]
msg_result, attr.error, attr.planSummary, reason, attr.msg_data security_result.summary Imposta in base alle condizioni msg_result, attr.error, attr.planSummary, reason, attr.msg_data
db_value target.administrative_domain Valore copiato direttamente
application_name target.application Valore copiato direttamente
local_ip target.asset.ip Valore copiato direttamente
host_group target.group.group_display_name Valore copiato direttamente
local_ip target.ip Valore copiato direttamente
local_port target.port Convertito in numero intero
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 Uniti da vari campi dell'etichetta
param_ns, db_value, param_new, param.args.find target.resource.name Impostato in base alle condizioni msg_atype e param_command
target.resource.resource_subtype Impostato su "Database MongoDB" per gli eventi di database/utente; "Raccolta MongoDB" per gli eventi di raccolta; "Indice MongoDB" per gli eventi di indice
target.resource.resource_type Impostato su "DATABASE" per gli eventi di database/utente; "TABLE" per gli eventi di raccolta/indice
db_user, param.user target.user.userid Valore di db_user se non è vuoto, altrimenti param.user
service.name event.idm.read_only_udm.target.application Mappato dal log delle modifiche
host.name event.idm.read_only_udm.principal.hostname Mappato dal log delle modifiche
host.name event.idm.read_only_udm.principal.asset.hostname Mappato dal log delle modifiche
mongodb.group.id event.idm.read_only_udm.principal.group.product_object_id Mappato dal log delle modifiche
mongodb.cluster.name event.idm.read_only_udm.target.resource.attribute.labels Mappato dal log delle modifiche
mongodb.customer.cluster.name event.idm.read_only_udm.target.resource.attribute.labels Mappato dal log delle modifiche
timestamp event.idm.read_only_udm.metadata.event_timestamp Mappato dal log delle modifiche
ts.date event.idm.read_only_udm.metadata.event_timestamp Mappato dal log delle modifiche
uuid.binary event.idm.read_only_udm.metadata.product_log_id Mappato dal log delle modifiche
users.1.user event.idm.read_only_udm.principal.user.userid Mappato dal log delle modifiche
remote.ip event.idm.read_only_udm.principal.ip e event.idm.read_only_udm.principal.asset.ip Mappato dal log delle modifiche
remote.port event.idm.read_only_udm.principal.port Mappato dal log delle modifiche
local.ip event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip Mappato dal log delle modifiche
local.port event.idm.read_only_udm.target.port Mappato dal log delle modifiche
roles.role event.idm.read_only_udm.principal.user.attribute.roles Mappato dal log delle modifiche
param.args.client.application.name event.idm.read_only_udm.principal.application Mappato dal log delle modifiche
param.args.client.os.type event.idm.read_only_udm.principal.asset.platform_software.platform Mappato dal log delle modifiche
param.args.client.os.version event.idm.read_only_udm.principal.platform_version Mappato dal log delle modifiche
param.args.client.os.architecture event.idm.read_only_udm.principal.asset.hardware Mappato dal log delle modifiche
atype event.idm.read_only_udm.metadata.product_event_type Mappato dal log delle modifiche
param.command event.idm.read_only_udm.metadata.product_event_type Mappato dal log delle modifiche
param.ns event.idm.read_only_udm.target.resource.name Mappato dal log delle modifiche
result event.idm.read_only_udm.security_result.action Mappato dal log delle modifiche
mongodb.log.type event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.db event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
uuid.type event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.clientOperationKey.type event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.clientOperationKey.binary event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.aggregate event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.mayBypassWriteBlocking event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.configTime.timestamp.t event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.topologyTime.timestamp.t event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.audit event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.cursor.batchSize.numberLong event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.includeQueryStatsMetrics event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.fromMongos event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.readConcern.provenance event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.readConcern.level event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.writeConcern.provenance event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.writeConcern.level event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.client.platform event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.client.driver.name event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.client.driver.version event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.client.os.name event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.clusterTime event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.lsid.id.type event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.lsid.uid.binary event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.users.1.db event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.client.mongos.version event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.writeConcern.w event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.writeConcern.wtimeout event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.lsid.uid.type event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.pipeline.1.match.managedClusterType event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.pipeline.2.group.n.sum.const event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.pipeline.2.group._id.const event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.client.mongos.client.port event.idm.read_only_udm.additional.fields Mappato dal log delle modifiche
param.args.audit.impersonatedRoles event.idm.read_only_udm.principal.user.attribute.roles Mappato dal log delle modifiche
param.args.audit.impersonatedUser event.idm.read_only_udm.principal.user.attribute.labels Mappato dal log delle modifiche
param.args.client.mongos.client event.idm.read_only_udm.principal.ip e event.idm.read_only_udm.principal.asset.ip Mappato dal log delle modifiche
param.args.client.mongos.host event.idm.read_only_udm.intermediary.ip Mappato dal log delle modifiche
param.args.client.mongos.host event.idm.read_only_udm.intermediary.port Mappato dal log delle modifiche
accessLog.authResult additional.fields Mappato dal log delle modifiche
accessLog.authSource additional.fields Mappato dal log delle modifiche
accessLog.failureReason additional.fields Mappato dal log delle modifiche
accessLog.groupId target.resource.product_object_id Mappato dal log delle modifiche
accessLog.ipAddress intermediary.ip Mappato dal log delle modifiche
accessLog.logLine.t.$date additional.fields Mappato dal log delle modifiche
accessLog.logLine.s additional.fields Mappato dal log delle modifiche
accessLog.logLine.c additional.fields Mappato dal log delle modifiche
accessLog.logLine.id additional.fields Mappato dal log delle modifiche
accessLog.logLine.ctx additional.fields Mappato dal log delle modifiche
accessLog.logLine.msg additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.client additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.isSpeculative additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.isClusterMember additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.mechanism additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.user additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.db additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.result additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.metrics.conversation_duration.micros additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.metrics.conversation_duration.summary.step additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.metrics.conversation_duration.summary.step_total additional.fields Mappato dal log delle modifiche
accessLog.logLine.attr.metrics.conversation_duration.summary.duration_micros additional.fields Mappato dal log delle modifiche
accessLog.username target.user.user_display_name Mappato dal log delle modifiche
accessLog.timestamp additional.fields Mappato dal log delle modifiche
roles.db principal.user.attribute.roles Mappato dal log delle modifiche
roles.db target.user.attribute.roles Mappato dal log delle modifiche

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.