Coletar registros do MongoDB

Compatível com:

Este documento explica como ingerir registros do MongoDB no Google Security Operations usando o Bindplane.

O MongoDB é um banco de dados de documentos NoSQL que gera registros de auditoria para operações CRUD, eventos de autenticação, comandos de banco de dados e operações de conjunto de réplicas. O MongoDB grava arquivos de registro JSON estruturados localmente, que o agente do Bindplane pode coletar diretamente do sistema de arquivos.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Windows Server 2016 ou mais recente ou host do Linux com systemd
  • Conectividade de rede entre o agente do Bindplane e o servidor MongoDB
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
  • Acesso privilegiado ao servidor do MongoDB (papel de administrador raiz ou de banco de dados)
  • MongoDB Enterprise ou MongoDB Community Edition com a geração de registros de auditoria ativada

Receber credenciais do Google SecOps para o agente do Bindplane

Para autenticar o agente do Bindplane no Google SecOps, escolha um dos seguintes métodos:

  • Novas implantações: use a API Chronicle (opção 1).
  • Implantações legadas: continue usando o arquivo de autenticação de ingestão (opção 2) até que a API Ingestion seja descontinuada em 20 de julho de 2027.
  1. Faça login no console doGoogle Cloud e selecione o projeto do Google Cloud vinculado à sua instância do Google SecOps.
  2. Acesse IAM e administrador > Contas de serviço.
  3. Clique em Criar conta de serviço.
  4. Informe os seguintes detalhes de configuração:
    • Nome da conta de serviço: insira um nome para a conta (por exemplo, bindplane-ingest).
    • Descrição da conta de serviço: insira uma descrição (por exemplo, Bindplane agent log ingestion).
  5. Clique em Criar e continuar.
  6. Na seção Conceder a essa conta de serviço acesso ao projeto, clique em Selecionar um papel e escolha Editor do Chronicle.
  7. Clique em Continuar e depois em Concluído.
  8. Clique na conta de serviço que você criou e acesse a guia Chaves.
  9. Clique em Adicionar chave > Criar nova chave.
  10. Selecione JSON e clique em Criar. O download do arquivo de chave é feito no seu computador.
  11. Salve o arquivo de chave como ingestion-auth.json no diretório do coletor do BindPlane (/opt/observiq-otel-collector/ingestion-auth.json no Linux ou C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json no Windows) ou atualize creds_file_path em config.yaml para corresponder ao caminho em que você o salvou.
  12. Acesse IAM e administrador > Configurações e copie o Número do projeto. Você vai precisar dele para configurar o exportador.

Opção 2: fazer o download do arquivo de autenticação de ingestão (legado)

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Faça o download do arquivo de autenticação de ingestão.
  4. Salve o arquivo com segurança no sistema em que o agente do Bindplane será instalado.

Receber o ID de cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID de cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

Instale o agente do Bindplane no seu sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o prompt de comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sc query observiq-otel-collector
    

O serviço vai aparecer como EM EXECUÇÃO.

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Aguarde a conclusão da instalação.

  4. Execute o seguinte comando para confirmar a instalação:

    sudo systemctl status observiq-otel-collector
    

O serviço precisa aparecer como active (running).

Outros recursos de instalação

Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do BindPlane.

Configurar o agente do Bindplane para ingerir registros e enviá-los ao Google SecOps

Localize o arquivo de configuração.

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

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

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela seguinte configuração:

    receivers:
      filelog:
        include:
          - /var/log/mongodb/auditLog.json
        start_at: beginning
    
    exporters:
      chronicle/mongodb:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.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
    

Parâmetros de configuração

Substitua os seguintes marcadores de posição:

  • Configuração do receptor:

    • filelog: o tipo de receptor para coletar arquivos de registro do disco.
    • include: lista de caminhos de arquivos a serem monitorados:
      • Linux: /var/log/mongodb/auditLog.json (caminho padrão do registro de auditoria do MongoDB)
      • Windows: C:\data\log\auditLog.json ou o caminho do registro de auditoria configurado
    • start_at: defina como beginning para ler os registros atuais ou end para ler apenas as novas entradas.
  • Configuração do exportador:

    • mongodb: nome descritivo do exportador
    • creds_file_path: caminho completo para o arquivo de chave JSON da conta de serviço (opção 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>: ID de cliente da etapa anterior.
    • location: substitua <LOCATION> pela região da sua instância do Google SecOps (por exemplo, us, europe ou asia-southeast1). O exportador adiciona esse valor ao prefixo chronicle.googleapis.com. Consulte Endpoints regionais para ver a lista completa.
    • project: substitua <PROJECT_NUMBER> pelo número do projeto em IAM e administrador > Configurações.
    • endpoint: mantenha definido como chronicle.googleapis.com.
    • MONGO_DB: tipo de registro exatamente como aparece no Chronicle
    • ingestion_labels: rótulos opcionais no formato YAML (por exemplo, env: production)
  • Configuração do pipeline:

    • mongodb_to_chronicle: nome descritivo do pipeline.

Exportador da API de ingestão legada

  • Se você usar o arquivo de autenticação de ingestão da opção 2, substitua o bloco exporters pelo seguinte. Defina creds_file_path como o caminho para o arquivo de autenticação de ingestão e, se a instância estiver fora dos EUA, substitua malachiteingestion-pa.googleapis.com pelo endpoint regional (por exemplo, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/mongodb:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: MONGO_DB
        raw_log_field: body
        ingestion_labels:
          env: production
    

Salvar o arquivo de configuração

  • Depois de editar, salve o arquivo:
    • Linux: pressione Ctrl+O, depois Enter e, em seguida, Ctrl+X.
    • Windows: clique em Arquivo > Salvar.

Reinicie o agente do Bindplane para aplicar as mudanças:

Para reiniciar o agente do Bindplane no Linux:

  1. Execute este comando:

    sudo systemctl restart observiq-otel-collector
    
  2. Verifique se o serviço está em execução:

    sudo systemctl status observiq-otel-collector
    
  3. Verifique se há erros nos registros:

    sudo journalctl -u observiq-otel-collector -f
    

Para reiniciar o agente do Bindplane em Windows:

  1. Escolha uma das seguintes opções:

    • Prompt de comando ou PowerShell como administrador:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Console de serviços:
      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.
  2. Verifique se o serviço está em execução:

    sc query observiq-otel-collector
    
  3. Verifique se há erros nos registros:

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

Configurar o MongoDB para gerar registros de auditoria

  1. Faça login no servidor do MongoDB com privilégios de administrador ou raiz.
  2. Abra o arquivo de configuração do MongoDB (mongod.conf). Locais padrão:
    • Linux: /etc/mongod.conf
    • Windows: C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
  3. Verifique se a geração de registros de auditoria está ativada. No arquivo mongod.conf, confirme as seguintes configurações:

    • auditLog.destination, definida como file.
    • auditLog.format, definida como JSON.
    • Anote o auditLog.path (por exemplo, /var/log/mongodb/auditLog.json).

    • Se a geração de registros de auditoria não estiver ativada, adicione o seguinte a mongod.conf:

    auditLog:
      destination: file
      format: JSON
      path: /var/log/mongodb/auditLog.json
    
  4. Reinicie o serviço do MongoDB para aplicar a configuração:

    • Linux:

      sudo systemctl restart mongod
      
    • Windows:

      net stop MongoDB && net start MongoDB
      
  5. Verifique se o arquivo de registro de auditoria está sendo gravado no caminho configurado (por exemplo, /var/log/mongodb/auditLog.json).

  6. Verifique se o caminho do agente do Bindplane include em config.yaml corresponde ao auditLog.path configurado em mongod.conf.

Tabela de mapeamento de UDM

Campo de registro Mapeamento de UDM Lógica
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 Unidos de vários campos com base em condições
db_mechanism, param.mechanism extensions.auth.auth_details Valor de db_mechanism se não estiver vazio, caso contrário, param.mechanism
extensions.auth.mechanism Defina como "MECHANISM_OTHER"
extensions.auth.type Definido como "AUTHTYPE_UNSPECIFIED"
lb_hostname, src_hostname intermediary.hostname Valor de "lb_hostname" se não estiver vazio. Caso contrário, "src_hostname".
lb_port, src_port intermediary.port Valor de lb_port se não estiver vazio, caso contrário, src_port (convertido em número inteiro)
msg metadata.description Valor copiado diretamente
metadata.event_type Definido com base nas condições msg_atype, category, param_passwordChanged, param_command, remote_ip
msg_atype, category metadata.product_event_type Valor de msg_atype, se não estiver vazio, caso contrário, categoria
id, type, traceId metadata.product_log_id Valor do ID se não estiver vazio, caso contrário, uuid.$binary se type == "04", caso contrário, traceId
metadata.product_name Definido como "MongoDB Enterprise"
metadata.vendor_name Defina como "MongoDB".
application_name principal.application Valor copiado diretamente
accessLog.hostname principal.asset.hostname Valor copiado diretamente
remote_ip principal.asset.ip Valor copiado diretamente
software_label principal.asset.software Mesclado de software_label
accessLog.hostname principal.hostname Valor copiado diretamente
remote_ip principal.ip Valor copiado diretamente
os_type principal.platform Definido como WINDOWS se corresponder ao Windows; MAC se corresponder ao osx ou mac; LINUX se corresponder ao Linux
os_name, param.clientMetadata.os.name principal.platform_patch_level Valor de os_name se não estiver vazio. Caso contrário, param.clientMetadata.os.name
os_version, param.clientMetadata.os.version principal.platform_version Valor de os_version se não estiver vazio. Caso contrário, param.clientMetadata.os.version
remote_port principal.port Convertido para número inteiro
principal_userid principal.user.userid Valor copiado diretamente
sr_action security_result.action Valor copiado diretamente
param.reason, param.indexBuildState security_result.description Valor de param.reason se msg_atype == "logout"; de param.indexBuildState se msg_atype estiver em ["createIndex", "dropIndex"]
severity, level security_result.severity Definido como "INFORMATIONAL" se a gravidade estiver em ["i", "I"] ou o nível em ["INFO", "DEBUG"]; "ERROR" se a gravidade estiver em ["e", "E"] ou o nível for "ERROR"; "MEDIUM" se a gravidade estiver em ["w", "W", "f", "F"]
msg_result, attr.error, attr.planSummary, reason, attr.msg_data security_result.summary Definido com base nas condições msg_result, attr.error, attr.planSummary, reason, attr.msg_data
db_value target.administrative_domain Valor copiado diretamente
application_name target.application Valor copiado diretamente
local_ip target.asset.ip Valor copiado diretamente
host_group target.group.group_display_name Valor copiado diretamente
local_ip target.ip Valor copiado diretamente
local_port target.port Convertido para número inteiro
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 Mesclado de vários campos de rótulo
param_ns, db_value, param_new, param.args.find target.resource.name Definido com base nas condições msg_atype e param_command
target.resource.resource_subtype Defina como "Banco de dados do MongoDB" para eventos de banco de dados/usuário, "Coleção do MongoDB" para eventos de coleção e "Índice do MongoDB" para eventos de índice.
target.resource.resource_type Definido como "DATABASE" para eventos de banco de dados/usuário; "TABLE" para eventos de coleta/indexação
db_user, param.user target.user.userid Valor de db_user se não estiver vazio, caso contrário, param.user
service.name event.idm.read_only_udm.target.application Mapeado do registro de alterações
host.name event.idm.read_only_udm.principal.hostname Mapeado do registro de mudanças
host.name event.idm.read_only_udm.principal.asset.hostname Mapeado do registro de mudanças
mongodb.group.id event.idm.read_only_udm.principal.group.product_object_id Mapeado do registro de mudanças
mongodb.cluster.name event.idm.read_only_udm.target.resource.attribute.labels Mapeado do registro de mudanças
mongodb.customer.cluster.name event.idm.read_only_udm.target.resource.attribute.labels Mapeado do registro de mudanças
timestamp event.idm.read_only_udm.metadata.event_timestamp Mapeado do registro de mudanças
ts.date event.idm.read_only_udm.metadata.event_timestamp Mapeado do registro de mudanças
uuid.binary event.idm.read_only_udm.metadata.product_log_id Mapeado do registro de mudanças
users.1.user event.idm.read_only_udm.principal.user.userid Mapeado do registro de alterações
remote.ip event.idm.read_only_udm.principal.ip e event.idm.read_only_udm.principal.asset.ip Mapeado do registro de alterações
remote.port event.idm.read_only_udm.principal.port Mapeado do registro de mudanças
local.ip event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip Mapeado do registro de mudanças
local.port event.idm.read_only_udm.target.port Mapeado do registro de mudanças
roles.role event.idm.read_only_udm.principal.user.attribute.roles Mapeado do registro de mudanças
param.args.client.application.name event.idm.read_only_udm.principal.application Mapeado do registro de mudanças
param.args.client.os.type event.idm.read_only_udm.principal.asset.platform_software.platform Mapeado do registro de mudanças
param.args.client.os.version event.idm.read_only_udm.principal.platform_version Mapeado do registro de mudanças
param.args.client.os.architecture event.idm.read_only_udm.principal.asset.hardware Mapeado do registro de mudanças
atype event.idm.read_only_udm.metadata.product_event_type Mapeado do registro de mudanças
param.command event.idm.read_only_udm.metadata.product_event_type Mapeado do registro de mudanças
param.ns event.idm.read_only_udm.target.resource.name Mapeado do registro de mudanças
result event.idm.read_only_udm.security_result.action Mapeado do registro de mudanças
mongodb.log.type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.db event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
uuid.type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.clientOperationKey.type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.clientOperationKey.binary event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.aggregate event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.mayBypassWriteBlocking event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.configTime.timestamp.t event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.topologyTime.timestamp.t event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.audit event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.cursor.batchSize.numberLong event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.includeQueryStatsMetrics event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.fromMongos event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.readConcern.provenance event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.readConcern.level event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.writeConcern.provenance event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.writeConcern.level event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.client.platform event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.client.driver.name event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.client.driver.version event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.client.os.name event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.clusterTime event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.lsid.id.type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.lsid.uid.binary event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.users.1.db event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.client.mongos.version event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.writeConcern.w event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.writeConcern.wtimeout event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.lsid.uid.type event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.pipeline.1.match.managedClusterType event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.pipeline.2.group.n.sum.const event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.pipeline.2.group._id.const event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.client.mongos.client.port event.idm.read_only_udm.additional.fields Mapeado do registro de mudanças
param.args.audit.impersonatedRoles event.idm.read_only_udm.principal.user.attribute.roles Mapeado do registro de mudanças
param.args.audit.impersonatedUser event.idm.read_only_udm.principal.user.attribute.labels Mapeado do registro de alterações
param.args.client.mongos.client event.idm.read_only_udm.principal.ip e event.idm.read_only_udm.principal.asset.ip Mapeado do registro de alterações
param.args.client.mongos.host event.idm.read_only_udm.intermediary.ip Mapeado do registro de mudanças
param.args.client.mongos.host event.idm.read_only_udm.intermediary.port Mapeado do registro de mudanças
accessLog.authResult additional.fields Mapeado do registro de mudanças
accessLog.authSource additional.fields Mapeado do registro de mudanças
accessLog.failureReason additional.fields Mapeado do registro de mudanças
accessLog.groupId target.resource.product_object_id Mapeado do registro de mudanças
accessLog.ipAddress intermediary.ip Mapeado do registro de mudanças
accessLog.logLine.t.$date additional.fields Mapeado do registro de mudanças
accessLog.logLine.s additional.fields Mapeado do registro de mudanças
accessLog.logLine.c additional.fields Mapeado do registro de mudanças
accessLog.logLine.id additional.fields Mapeado do registro de mudanças
accessLog.logLine.ctx additional.fields Mapeado do registro de mudanças
accessLog.logLine.msg additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.client additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.isSpeculative additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.isClusterMember additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.mechanism additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.user additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.db additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.result additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.metrics.conversation_duration.micros additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.metrics.conversation_duration.summary.step additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.metrics.conversation_duration.summary.step_total additional.fields Mapeado do registro de mudanças
accessLog.logLine.attr.metrics.conversation_duration.summary.duration_micros additional.fields Mapeado do registro de mudanças
accessLog.username target.user.user_display_name Mapeado do registro de mudanças
accessLog.timestamp additional.fields Mapeado do registro de mudanças
roles.db principal.user.attribute.roles Mapeado do registro de mudanças
roles.db target.user.attribute.roles Mapeado do registro de mudanças

Registro de alterações

Confira o registro de alterações deste analisador

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.