收集 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,且已啟用稽核記錄

取得 Bindplane 代理程式的 Google SecOps 憑證

如要向 Google SecOps 驗證 Bindplane 代理程式,請選擇下列其中一種方法:

  • 新部署作業:使用 Chronicle API (選項 1)。
  • 舊版部署作業:繼續使用擷取驗證檔案 (選項 2),直到 Ingestion API 於 2027 年 7 月 20 日停用。
  1. 登入 Google Cloud 控制台,選取連結至 Google SecOps 執行個體的 Google Cloud 專案。
  2. 依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
  3. 按一下「建立服務帳戶」。
  4. 請提供下列設定詳細資料:
    • 「Service account name」(服務帳戶名稱):輸入帳戶名稱 (例如 bindplane-ingest)。
    • 服務帳戶說明:輸入說明 (例如 Bindplane agent log ingestion)。
  5. 點按「Create and continue」(建立並繼續)。
  6. 在「將專案存取權授予這個服務帳戶」部分,按一下「選取角色」,然後選取「Chronicle 編輯者」。
  7. 依序點選「繼續」和「完成」。
  8. 按一下您建立的服務帳戶,然後前往「金鑰」分頁標籤。
  9. 依序點選「新增金鑰」>「建立新的金鑰」。
  10. 選取「JSON」,然後點選「建立」。金鑰檔案會下載到電腦。
  11. 將金鑰檔案儲存為 Bindplane 收集器目錄中的 ingestion-auth.json (Linux 為 /opt/observiq-otel-collector/ingestion-auth.json,Windows 為 C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json),或更新 config.yaml 中的 creds_file_path,使其與儲存檔案的路徑相符。
  12. 依序前往「IAM & Admin」(IAM 與管理) >「Settings」(設定),然後複製「Project number」(專案編號)。匯出工具設定時會用到。

方法 2:下載擷取驗證檔案 (舊版)

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM Settings」 > 「Collection Agents」。
  3. 下載擷取驗證檔案。
  4. 將檔案安全地儲存在要安裝 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
    

服務應顯示為「active (running)」。

其他安裝資源

如需其他安裝選項和疑難排解資訊,請參閱 Bindplane 代理程式安裝指南。

設定 Bindplane 代理程式,擷取記錄並傳送至 Google SecOps

找出設定檔

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • 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:
        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
    

設定參數

請替換下列預留位置:

  • 接收器設定:

    • filelog:從磁碟收集記錄檔的接收器類型
    • include:要監控的檔案路徑清單:
      • Linux:/var/log/mongodb/auditLog.json (預設 MongoDB 稽核記錄路徑)
      • Windows:C:\data\log\auditLog.json 或您設定的稽核記錄路徑
    • start_at:設為 beginning 即可讀取現有記錄,設為 end 則只會讀取新項目
  • 匯出工具設定:

    • mongodb:匯出工具的說明名稱
    • creds_file_path:服務帳戶 JSON 金鑰檔案的完整路徑 (選項 1):
      • Linux:/opt/observiq-otel-collector/ingestion-auth.json
      • Windows:C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>:上一步取得的客戶 ID
    • location:將 <LOCATION> 替換為 Google SecOps 執行個體的區域 (例如 us、europe 或 asia-southeast1)。匯出工具會在這個值前面加上 chronicle.googleapis.com。如需完整清單,請參閱「區域性端點」。
    • project:將 <PROJECT_NUMBER> 替換為「IAM 與管理」>「設定」中的專案編號。
    • endpoint:維持設為 chronicle.googleapis.com。
    • MONGO_DB:記錄類型,與 Chronicle 中顯示的完全相同
    • ingestion_labels:YAML 格式的選用標籤 (例如 env: production)
  • 管道設定:

    • mongodb_to_chronicle:管道的說明名稱

舊版擷取 API 匯出工具

  • 如果您使用選項 2 的擷取驗證檔案,請將 exporters 區塊替換為下列內容。將 creds_file_path 設為擷取驗證檔案的路徑。如果執行個體位於美國境外,請將 malachiteingestion-pa.googleapis.com 替換為區域端點 (例如 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
    

儲存設定檔

  • 編輯完成後,請儲存檔案:
    • Linux:依序按下 Ctrl+O、Enter 和 Ctrl+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. 以管理員或根權限登入 MongoDB 伺服器。
  2. 開啟 MongoDB 設定檔 (mongod.conf)。預設位置:
    • Linux:/etc/mongod.conf
    • Windows:C:\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 的值 (如果不是空白),否則為 param.clientMetadata.os.name
os_version, param.clientMetadata.os.version principal.platform_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.ip 和 event.idm.read_only_udm.principal.asset.ip 從變更記錄對應
remote.port event.idm.read_only_udm.principal.port 從變更記錄對應
local.ip event.idm.read_only_udm.target.ip 和 event.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.ip 和 event.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 專家尋求解答。