MongoDB のログを収集する

以下でサポートされています。

このドキュメントでは、Bindplane を使用して MongoDB ログを Google Security Operations に取り込む方法について説明します。

MongoDB は、CRUD オペレーション、認証イベント、データベース コマンド、レプリカセット オペレーションの監査ログを生成する NoSQL ドキュメント データベースです。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
    

サービスは RUNNING と表示されます。

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 エージェントのインストール ガイドをご覧ください。

ログを取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

構成ファイルを探す

  • 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 監査ログパス)
      • Windows: C:\data\log\auditLog.json または構成済みの監査ログのパス
    • start_at: 既存のログを読み取る場合は beginning、新しいエントリのみを読み取る場合は end に設定します。
  • エクスポータの構成:

    • mongodb: エクスポータのわかりやすい名前
    • creds_file_path: 取り込み認証ファイルのフルパス:
      • Linux: /etc/bindplane-agent/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • <customer_id>: 前の手順の顧客 ID
    • endpoint: リージョナル エンドポイント URL:
      • 米国: 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
    • Windows: C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
  3. 監査ロギングが有効になっていることを確認します。mongod.conf ファイルで、次の設定を確認します。

    • auditLog.destinationfile に設定されている。
    • auditLog.formatJSON に設定されている。
    • 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 の値(空でない場合)、または 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 の値、それ以外の場合は 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 の値、それ以外の場合は 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 Database」、コレクション イベントの場合は「MongoDB Collection」、インデックス イベントの場合は「MongoDB Index」に設定されます。
target.resource.resource_type データベース/ユーザー イベントの場合は「DATABASE」、コレクション/インデックス イベントの場合は「TABLE」に設定します。
db_user、param.user target.user.userid 空でない場合は 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 のプロフェッショナルから回答を得ることができます。