收集 MongoDB 記錄

支援的國家/地區:

本文說明如何使用 Bindplane 將 MongoDB 記錄檔擷取至 Google Security Operations。

MongoDB 是 NoSQL 文件資料庫,會針對 CRUD 作業、驗證事件、資料庫指令和副本集作業產生稽核記錄。MongoDB 會在本機寫入結構化 JSON 記錄檔,Bindplane 代理程式可直接從檔案系統收集這些檔案。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • Windows Server 2016 以上版本,或搭載 systemd 的 Linux 主機
  • Bindplane 代理程式與 MongoDB 伺服器之間的網路連線
  • 如果透過 Proxy 執行,請確保防火牆通訊埠已根據 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
    

服務應顯示為「RUNNING」

Linux 安裝

  1. 開啟具有根層級或 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 Collector
      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 不為空白,則為該值,否則為 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 中的值;如果 ID 為空值,且類型為「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 的值
severity、level 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 專業人員尋求答案。