收集 MongoDB 日志

支持的平台:

本文档介绍了如何使用 Bindplane 将 MongoDB 日志注入到 Google Security Operations。

MongoDB 是一种 NoSQL 文档数据库,可为 CRUD 操作、身份验证事件、数据库命令和副本集操作生成审核日志。MongoDB 会在本地写入结构化 JSON 日志文件,Bindplane 代理可以直接从文件系统中收集这些文件。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • Windows Server 2016 或更高版本,或者具有 systemd 的 Linux 主机
  • Bindplane 代理与 MongoDB 服务器之间的网络连接
  • 如果在代理后面运行,请确保防火墙端口已根据 Bindplane 代理要求打开
  • 对 MongoDB 服务器的特权访问权限(root 或数据库管理员角色)
  • 已启用审核日志记录的 MongoDB Enterprise 或 MongoDB Community Edition

获取 Google SecOps 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载数据注入身份验证文件。将该文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 配置文件
  3. 复制并保存组织详细信息部分中的客户 ID

安装 Bindplane 代理

按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安装完成。

  4. 运行以下命令,验证安装是否成功:

    sc query observiq-otel-collector
    

该服务应显示为 正在运行

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 等待安装完成。

  4. 运行以下命令,验证安装是否成功:

    sudo systemctl status observiq-otel-collector
    

该服务应显示为有效(正在运行)

其他安装资源

如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南

配置 Bindplane 代理以注入日志并将其发送到 Google SecOps

找到配置文件

  • Linux

    sudo systemctl status observiq-otel-collector
    
  • Windows

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

修改配置文件

  • config.yaml 的全部内容替换为以下配置:

    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
    

配置参数

替换以下占位符:

  • 接收器配置

    • filelog:用于从磁盘收集日志文件的接收器类型
    • include:要监控的文件路径列表:
      • Linux/var/log/mongodb/auditLog.json(默认 MongoDB 审核日志路径)
      • WindowsC:\data\log\auditLog.json 或您配置的审核日志路径
    • start_at:设置为 beginning 可读取现有日志,设置为 end 可仅读取新条目
  • 导出器配置

    • mongodb:导出器的描述性名称
    • creds_file_path:提取身份验证文件的完整路径:
      • Linux/etc/bindplane-agent/ingestion-auth.json
      • WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>:上一步中的客户 ID
    • endpoint:区域端点网址:
      • 美国malachiteingestion-pa.googleapis.com
      • 欧洲europe-malachiteingestion-pa.googleapis.com
      • 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com
      • 如需查看完整列表,请参阅区域级端点
    • MONGO_DB:日志类型,与在 Chronicle 中显示的完全一致
    • ingestion_labels:YAML 格式的可选标签(例如 env: production
  • 流水线配置

    • mongodb_to_chronicle:流水线的描述性名称

保存配置文件

  • 修改后,保存文件:
    • Linux:依次按 Ctrl+OEnterCtrl+X
    • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

如需在 Linux 中重启 Bindplane 代理,请执行以下操作:

  1. 运行以下命令:

    sudo systemctl restart observiq-otel-collector
    
  2. 验证服务是否正在运行:

    sudo systemctl status observiq-otel-collector
    
  3. 检查日志是否存在错误:

    sudo journalctl -u observiq-otel-collector -f
    

如需在 Windows 中重启 Bindplane 代理,请执行以下操作:

  1. 请从下列选项中选择一项:

    • 以管理员身份运行命令提示符或 PowerShell:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • 服务控制台:
      1. Win+R,输入 services.msc,然后按 Enter 键。
      2. 找到 observIQ OpenTelemetry 收集器
      3. 右键点击并选择重新启动
  2. 验证服务是否正在运行:

    sc query observiq-otel-collector
    
  3. 检查日志是否存在错误:

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

配置 MongoDB 以生成审核日志

  1. 以管理员或 root 权限登录 MongoDB 服务器。
  2. 打开 MongoDB 配置文件 (mongod.conf)。默认位置:
    • Linux/etc/mongod.conf
    • WindowsC:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
  3. 验证是否已启用审核日志记录。在 mongod.conf 文件中,确认以下设置:

    • auditLog.destination 设置为 file
    • auditLog.format 设置为 JSON
    • 请注意 auditLog.path(例如 /var/log/mongodb/auditLog.json)。

    • 如果未启用审核日志记录,请将以下内容添加到 mongod.conf

      auditLog:
        destination: file
        format: JSON
        path: /var/log/mongodb/auditLog.json
      
  4. 重启 MongoDB 服务以应用配置:

    • Linux

      sudo systemctl restart mongod
      
    • Windows

      net stop MongoDB && net start MongoDB
      
  5. 验证审核日志文件是否正在写入配置的路径(例如 /var/log/mongodb/auditLog.json)。

  6. 确保 config.yaml 中的 Bindplane 代理 include 路径与 mongod.conf 中配置的 auditLog.path 相匹配。

UDM 映射表

日志字段 UDM 映射 逻辑
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 根据条件从各个字段合并
db_mechanism, param.mechanism extensions.auth.auth_details 如果 db_mechanism 不为空,则返回该值;否则返回 param.mechanism
extensions.auth.mechanism 设置为“MECHANISM_OTHER”
extensions.auth.type 设置为“AUTHTYPE_UNSPECIFIED”
lb_hostname、src_hostname intermediary.hostname 如果 lb_hostname 不为空,则为 lb_hostname 中的值,否则为 src_hostname
lb_port、src_port intermediary.port 如果 lb_port 不为空,则为 lb_port 中的值;否则为 src_port(转换为整数)
msg metadata.description 直接复制值
metadata.event_type 根据 msg_atype、category、param_passwordChanged、param_command、remote_ip 条件设置
msg_atype、category metadata.product_event_type 如果 msg_atype 不为空,则为 msg_atype 中的值,否则为类别
id、type、traceId metadata.product_log_id 如果 id 不为空,则为 id 中的值;否则,如果 type == "04",则为 uuid.$binary;否则为 traceId
metadata.product_name 设置为“MongoDB Enterprise”
metadata.vendor_name 设置为“MongoDB”
application_name principal.application 直接复制值
accessLog.hostname principal.asset.hostname 直接复制值
remote_ip principal.asset.ip 直接复制值
software_label principal.asset.software 已从 software_label 合并
accessLog.hostname principal.hostname 直接复制值
remote_ip principal.ip 直接复制值
os_type principal.platform 如果匹配 Windows,则设置为 WINDOWS;如果匹配 osx 或 mac,则设置为 MAC;如果匹配 Linux,则设置为 LINUX
os_name, param.clientMetadata.os.name principal.platform_patch_level 如果 os_name 不为空,则为 os_name 中的值;否则为 param.clientMetadata.os.name
os_version, param.clientMetadata.os.version principal.platform_version 如果 os_version 不为空,则为 os_version 中的值;否则为 param.clientMetadata.os.version
remote_port principal.port 转换为整数
principal_userid principal.user.userid 直接复制值
sr_action security_result.action 直接复制值
param.reason、param.indexBuildState security_result.description 如果 msg_atype == "logout",则为 param.reason 中的值;如果 msg_atype 在 ["createIndex", "dropIndex"] 中,则为 param.indexBuildState 中的值
严重程度、级别 security_result.severity 如果严重程度为 ["i", "I"] 或级别为 ["INFO", "DEBUG"],则设置为 INFORMATIONAL;如果严重程度为 ["e", "E"] 或级别为“ERROR”,则设置为 ERROR;如果严重程度为 ["w", "W", "f", "F"],则设置为 MEDIUM
msg_result、attr.error、attr.planSummary、reason、attr.msg_data security_result.summary 根据 msg_result、attr.error、attr.planSummary、reason、attr.msg_data 条件设置
db_value target.administrative_domain 直接复制值
application_name target.application 直接复制值
local_ip target.asset.ip 直接复制值
host_group target.group.group_display_name 直接复制值
local_ip target.ip 直接复制值
local_port target.port 转换为整数
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 从各种标签字段合并而来
param_ns, db_value, param_new, param.args.find target.resource.name 根据 msg_atype 和 param_command 条件设置
target.resource.resource_subtype 对于数据库/用户事件,请设置为“MongoDB 数据库”;对于集合事件,请设置为“MongoDB 集合”;对于索引事件,请设置为“MongoDB 索引”
target.resource.resource_type 对于数据库/用户事件,设置为“DATABASE”;对于集合/索引事件,设置为“TABLE”
db_user、param.user target.user.userid 如果 db_user 不为空,则返回 db_user 中的值,否则返回 param.user
service.name event.idm.read_only_udm.target.application 从变更日志映射
host.name event.idm.read_only_udm.principal.hostname 从变更日志映射
host.name event.idm.read_only_udm.principal.asset.hostname 从变更日志映射
mongodb.group.id event.idm.read_only_udm.principal.group.product_object_id 从变更日志映射
mongodb.cluster.name event.idm.read_only_udm.target.resource.attribute.labels 从变更日志映射
mongodb.customer.cluster.name event.idm.read_only_udm.target.resource.attribute.labels 从变更日志映射
timestamp event.idm.read_only_udm.metadata.event_timestamp 从变更日志映射
ts.date event.idm.read_only_udm.metadata.event_timestamp 从变更日志映射
uuid.binary event.idm.read_only_udm.metadata.product_log_id 从变更日志映射
users.1.user event.idm.read_only_udm.principal.user.userid 从变更日志映射
remote.ip event.idm.read_only_udm.principal.ipevent.idm.read_only_udm.principal.asset.ip之间 从变更日志映射
remote.port event.idm.read_only_udm.principal.port 从变更日志映射
local.ip event.idm.read_only_udm.target.ipevent.idm.read_only_udm.target.asset.ip之间 从变更日志映射
local.port event.idm.read_only_udm.target.port 从变更日志映射
roles.role event.idm.read_only_udm.principal.user.attribute.roles 从变更日志映射
param.args.client.application.name event.idm.read_only_udm.principal.application 从变更日志映射
param.args.client.os.type event.idm.read_only_udm.principal.asset.platform_software.platform 从变更日志映射
param.args.client.os.version event.idm.read_only_udm.principal.platform_version 从变更日志映射
param.args.client.os.architecture event.idm.read_only_udm.principal.asset.hardware 从变更日志映射
atype event.idm.read_only_udm.metadata.product_event_type 从变更日志映射
param.command event.idm.read_only_udm.metadata.product_event_type 从变更日志映射
param.ns event.idm.read_only_udm.target.resource.name 从变更日志映射
result event.idm.read_only_udm.security_result.action 从变更日志映射
mongodb.log.type event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.db event.idm.read_only_udm.additional.fields 从变更日志映射
uuid.type event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.clientOperationKey.type event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.clientOperationKey.binary event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.aggregate event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.mayBypassWriteBlocking event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.configTime.timestamp.t event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.topologyTime.timestamp.t event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.audit event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.cursor.batchSize.numberLong event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.includeQueryStatsMetrics event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.fromMongos event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.readConcern.provenance event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.readConcern.level event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.writeConcern.provenance event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.writeConcern.level event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.client.platform event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.client.driver.name event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.client.driver.version event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.client.os.name event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.clusterTime event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.lsid.id.type event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.lsid.uid.binary event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.users.1.db event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.client.mongos.version event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.writeConcern.w event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.writeConcern.wtimeout event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.lsid.uid.type event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.pipeline.1.match.managedClusterType event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.pipeline.2.group.n.sum.const event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.pipeline.2.group._id.const event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.client.mongos.client.port event.idm.read_only_udm.additional.fields 从变更日志映射
param.args.audit.impersonatedRoles event.idm.read_only_udm.principal.user.attribute.roles 从变更日志映射
param.args.audit.impersonatedUser event.idm.read_only_udm.principal.user.attribute.labels 从变更日志映射
param.args.client.mongos.client event.idm.read_only_udm.principal.ipevent.idm.read_only_udm.principal.asset.ip之间 从变更日志映射
param.args.client.mongos.host event.idm.read_only_udm.intermediary.ip 从变更日志映射
param.args.client.mongos.host event.idm.read_only_udm.intermediary.port 从变更日志映射
accessLog.authResult additional.fields 从变更日志映射
accessLog.authSource additional.fields 从变更日志映射
accessLog.failureReason additional.fields 从变更日志映射
accessLog.groupId target.resource.product_object_id 从变更日志映射
accessLog.ipAddress intermediary.ip 从变更日志映射
accessLog.logLine.t.$date additional.fields 从变更日志映射
accessLog.logLine.s additional.fields 从变更日志映射
accessLog.logLine.c additional.fields 从变更日志映射
accessLog.logLine.id additional.fields 从变更日志映射
accessLog.logLine.ctx additional.fields 从变更日志映射
accessLog.logLine.msg additional.fields 从变更日志映射
accessLog.logLine.attr.client additional.fields 从变更日志映射
accessLog.logLine.attr.isSpeculative additional.fields 从变更日志映射
accessLog.logLine.attr.isClusterMember additional.fields 从变更日志映射
accessLog.logLine.attr.mechanism additional.fields 从变更日志映射
accessLog.logLine.attr.user additional.fields 从变更日志映射
accessLog.logLine.attr.db additional.fields 从变更日志映射
accessLog.logLine.attr.result additional.fields 从变更日志映射
accessLog.logLine.attr.metrics.conversation_duration.micros additional.fields 从变更日志映射
accessLog.logLine.attr.metrics.conversation_duration.summary.step additional.fields 从变更日志映射
accessLog.logLine.attr.metrics.conversation_duration.summary.step_total additional.fields 从变更日志映射
accessLog.logLine.attr.metrics.conversation_duration.summary.duration_micros additional.fields 从变更日志映射
accessLog.username target.user.user_display_name 从变更日志映射
accessLog.timestamp additional.fields 从变更日志映射
roles.db principal.user.attribute.roles 从变更日志映射
roles.db target.user.attribute.roles 从变更日志映射

更新日志

查看相应解析器的更改日志

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。