Mengumpulkan log MongoDB
Dokumen ini menjelaskan cara menyerap log MongoDB ke Google Security Operations menggunakan Bindplane.
MongoDB adalah database dokumen NoSQL yang menghasilkan log audit untuk operasi CRUD, peristiwa autentikasi, perintah database, dan operasi set replika. MongoDB menulis file log JSON terstruktur secara lokal, yang dapat dikumpulkan oleh agen Bindplane langsung dari sistem file.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Windows Server 2016 atau yang lebih baru, atau host Linux dengan
systemd - Konektivitas jaringan antara agen Bindplane dan server MongoDB
- Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
- Akses istimewa ke server MongoDB (peran root atau administrator database)
- MongoDB Enterprise atau MongoDB Community Edition dengan logging audit diaktifkan
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
Download File Autentikasi Penyerapan. Simpan file dengan aman di sistem tempat BindPlane akan diinstal.
Mendapatkan ID pelanggan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Profil.
Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.
Menginstal agen Bindplane
Instal agen Bindplane di sistem operasi Windows atau Linux Anda sesuai dengan petunjuk berikut.
Penginstalan Windows
- Buka Command Prompt atau PowerShell sebagai administrator.
Jalankan perintah berikut:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietTunggu hingga penginstalan selesai.
Verifikasi penginstalan dengan menjalankan:
sc query observiq-otel-collector
Layanan akan ditampilkan sebagai RUNNING.
Penginstalan Linux
- Buka terminal dengan hak istimewa root atau sudo.
Jalankan perintah berikut:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shTunggu hingga penginstalan selesai.
Verifikasi penginstalan dengan menjalankan:
sudo systemctl status observiq-otel-collector
Layanan akan ditampilkan sebagai aktif (berjalan).
Referensi penginstalan tambahan
Untuk opsi pemasangan dan pemecahan masalah tambahan, lihat Panduan pemasangan agen Bindplane.
Mengonfigurasi agen Bindplane untuk menyerap log dan mengirimkannya ke Google SecOps
Cari file konfigurasi
Linux:
sudo systemctl status observiq-otel-collectorWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edit file konfigurasi
Ganti seluruh konten
config.yamldengan konfigurasi berikut: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
Parameter konfigurasi
Ganti placeholder berikut:
Konfigurasi penerima:
filelog: Jenis penerima untuk mengumpulkan file log dari diskinclude: Daftar jalur file yang akan dipantau:- Linux:
/var/log/mongodb/auditLog.json(jalur log audit MongoDB default) - Windows:
C:\data\log\auditLog.jsonatau jalur log audit yang dikonfigurasi
- Linux:
start_at: Setel kebeginninguntuk membaca log yang ada atauenduntuk hanya membaca entri baru
Konfigurasi pengekspor:
mongodb: Nama deskriptif untuk eksportircreds_file_path: Jalur lengkap ke file autentikasi penyerapan:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
<customer_id>: ID Pelanggan dari langkah sebelumnyaendpoint: URL endpoint regional:- Amerika Serikat:
malachiteingestion-pa.googleapis.com - Eropa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Lihat Endpoint Regional untuk mengetahui daftar lengkapnya
- Amerika Serikat:
MONGO_DB: Jenis log persis seperti yang muncul di Chronicleingestion_labels: Label opsional dalam format YAML (misalnya,env: production)
Konfigurasi pipeline:
mongodb_to_chronicle: Nama deskriptif untuk pipeline
Simpan file konfigurasi
- Setelah mengedit, simpan file:
- Linux: Tekan
Ctrl+O, laluEnter, laluCtrl+X - Windows: Klik File > Save
- Linux: Tekan
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Linux:
Jalankan perintah berikut:
sudo systemctl restart observiq-otel-collectorPastikan layanan sedang berjalan:
sudo systemctl status observiq-otel-collectorPeriksa log untuk mengetahui error:
sudo journalctl -u observiq-otel-collector -f
Untuk memulai ulang agen Bindplane di Windows:
Pilih salah satu opsi berikut:
- Command Prompt atau PowerShell sebagai administrator:
net stop observiq-otel-collector && net start observiq-otel-collector- Konsol layanan:
- Tekan
Win+R, ketikservices.msc, lalu tekan Enter. - Cari observIQ OpenTelemetry Collector.
- Klik kanan, lalu pilih Mulai ulang.
- Tekan
Pastikan layanan sedang berjalan:
sc query observiq-otel-collectorPeriksa log untuk mengetahui error:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
Mengonfigurasi MongoDB untuk membuat log audit
- Login ke server MongoDB dengan hak istimewa administrator atau root.
- Buka file konfigurasi MongoDB (
mongod.conf). Lokasi default:- Linux:
/etc/mongod.conf - Windows:
C:\Program Files\MongoDB\Server\<version>\bin\mongod.cfg
- Linux:
Pastikan logging audit diaktifkan. Di file
mongod.conf, konfirmasi setelan berikut:auditLog.destinationdisetel kefile.auditLog.formatdisetel keJSON.Perhatikan
auditLog.path(misalnya,/var/log/mongodb/auditLog.json).Jika logging audit tidak diaktifkan, tambahkan kode berikut ke
mongod.conf:auditLog: destination: file format: JSON path: /var/log/mongodb/auditLog.json
Mulai ulang layanan MongoDB untuk menerapkan konfigurasi:
Linux:
sudo systemctl restart mongodWindows:
net stop MongoDB && net start MongoDB
Pastikan file log audit sedang ditulis di jalur yang dikonfigurasi (misalnya,
/var/log/mongodb/auditLog.json).Pastikan jalur
includeagen Bindplane diconfig.yamlcocok denganauditLog.pathyang dikonfigurasi dimongod.conf.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| 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 | Digabungkan dari berbagai kolom berdasarkan kondisi |
| db_mechanism, param.mechanism | extensions.auth.auth_details | Nilai dari db_mechanism jika tidak kosong, atau param.mechanism |
| extensions.auth.mechanism | Ditetapkan ke "MECHANISM_OTHER" | |
| extensions.auth.type | Tetapkan ke "AUTHTYPE_UNSPECIFIED" | |
| lb_hostname, src_hostname | intermediary.hostname | Nilai dari lb_hostname jika tidak kosong, jika tidak, src_hostname |
| lb_port, src_port | intermediary.port | Nilai dari lb_port jika tidak kosong, atau src_port (dikonversi menjadi bilangan bulat) |
| msg | metadata.description | Nilai disalin secara langsung |
| metadata.event_type | Ditetapkan berdasarkan kondisi msg_atype, category, param_passwordChanged, param_command, remote_ip | |
| msg_atype, category | metadata.product_event_type | Nilai dari msg_atype jika tidak kosong, atau kategori |
| id, type, traceId | metadata.product_log_id | Nilai dari id jika tidak kosong, atau uuid.$binary jika jenis == "04", atau traceId |
| metadata.product_name | Tetapkan ke "MongoDB Enterprise" | |
| metadata.vendor_name | Tetapkan ke "MongoDB" | |
| application_name | principal.application | Nilai disalin secara langsung |
| accessLog.hostname | principal.asset.hostname | Nilai disalin secara langsung |
| remote_ip | principal.asset.ip | Nilai disalin secara langsung |
| software_label | principal.asset.software | Digabungkan dari software_label |
| accessLog.hostname | principal.hostname | Nilai disalin langsung |
| remote_ip | principal.ip | Nilai disalin secara langsung |
| os_type | principal.platform | Tetapkan ke WINDOWS jika cocok dengan Windows; MAC jika cocok dengan osx atau mac; LINUX jika cocok dengan Linux |
| os_name, param.clientMetadata.os.name | principal.platform_patch_level | Nilai dari os_name jika tidak kosong, atau param.clientMetadata.os.name |
| os_version, param.clientMetadata.os.version | principal.platform_version | Nilai dari os_version jika tidak kosong, atau param.clientMetadata.os.version |
| remote_port | principal.port | Dikonversi ke bilangan bulat |
| principal_userid | principal.user.userid | Nilai disalin secara langsung |
| sr_action | security_result.action | Nilai disalin secara langsung |
| param.reason, param.indexBuildState | security_result.description | Nilai dari param.reason jika msg_atype == "logout"; dari param.indexBuildState jika msg_atype dalam ["createIndex", "dropIndex"] |
| tingkat keparahan, level | security_result.severity | Setel ke INFORMATIONAL jika tingkat keparahan dalam ["i", "I"] atau level dalam ["INFO", "DEBUG"]; ERROR jika tingkat keparahan dalam ["e", "E"] atau level == "ERROR"; MEDIUM jika tingkat keparahan dalam ["w", "W", "f", "F"] |
| msg_result, attr.error, attr.planSummary, reason, attr.msg_data | security_result.summary | Ditetapkan berdasarkan kondisi msg_result, attr.error, attr.planSummary, reason, attr.msg_data |
| db_value | target.administrative_domain | Nilai disalin secara langsung |
| application_name | target.application | Nilai disalin langsung |
| local_ip | target.asset.ip | Nilai disalin langsung |
| host_group | target.group.group_display_name | Nilai disalin langsung |
| local_ip | target.ip | Nilai disalin langsung |
| local_port | target.port | Dikonversi ke bilangan bulat |
| 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 | Digabungkan dari berbagai kolom label |
| param_ns, db_value, param_new, param.args.find | target.resource.name | Ditetapkan berdasarkan kondisi msg_atype dan param_command |
| target.resource.resource_subtype | Tetapkan ke "MongoDB Database" untuk peristiwa database/pengguna; "MongoDB Collection" untuk peristiwa koleksi; "MongoDB Index" untuk peristiwa indeks | |
| target.resource.resource_type | Tetapkan ke "DATABASE" untuk peristiwa database/pengguna; "TABLE" untuk peristiwa pengumpulan/pengindeksan | |
| db_user, param.user | target.user.userid | Nilai dari db_user jika tidak kosong, jika tidak, param.user |
service.name |
event.idm.read_only_udm.target.application |
Dipetakan dari log perubahan |
host.name |
event.idm.read_only_udm.principal.hostname |
Dipetakan dari log perubahan |
host.name |
event.idm.read_only_udm.principal.asset.hostname |
Dipetakan dari log perubahan |
mongodb.group.id |
event.idm.read_only_udm.principal.group.product_object_id |
Dipetakan dari log perubahan |
mongodb.cluster.name |
event.idm.read_only_udm.target.resource.attribute.labels |
Dipetakan dari log perubahan |
mongodb.customer.cluster.name |
event.idm.read_only_udm.target.resource.attribute.labels |
Dipetakan dari log perubahan |
timestamp |
event.idm.read_only_udm.metadata.event_timestamp |
Dipetakan dari log perubahan |
ts.date |
event.idm.read_only_udm.metadata.event_timestamp |
Dipetakan dari log perubahan |
uuid.binary |
event.idm.read_only_udm.metadata.product_log_id |
Dipetakan dari log perubahan |
users.1.user |
event.idm.read_only_udm.principal.user.userid |
Dipetakan dari log perubahan |
remote.ip |
event.idm.read_only_udm.principal.ip dan event.idm.read_only_udm.principal.asset.ip |
Dipetakan dari log perubahan |
remote.port |
event.idm.read_only_udm.principal.port |
Dipetakan dari log perubahan |
local.ip |
event.idm.read_only_udm.target.ip dan event.idm.read_only_udm.target.asset.ip |
Dipetakan dari log perubahan |
local.port |
event.idm.read_only_udm.target.port |
Dipetakan dari log perubahan |
roles.role |
event.idm.read_only_udm.principal.user.attribute.roles |
Dipetakan dari log perubahan |
param.args.client.application.name |
event.idm.read_only_udm.principal.application |
Dipetakan dari log perubahan |
param.args.client.os.type |
event.idm.read_only_udm.principal.asset.platform_software.platform |
Dipetakan dari log perubahan |
param.args.client.os.version |
event.idm.read_only_udm.principal.platform_version |
Dipetakan dari log perubahan |
param.args.client.os.architecture |
event.idm.read_only_udm.principal.asset.hardware |
Dipetakan dari log perubahan |
atype |
event.idm.read_only_udm.metadata.product_event_type |
Dipetakan dari log perubahan |
param.command |
event.idm.read_only_udm.metadata.product_event_type |
Dipetakan dari log perubahan |
param.ns |
event.idm.read_only_udm.target.resource.name |
Dipetakan dari log perubahan |
result |
event.idm.read_only_udm.security_result.action |
Dipetakan dari log perubahan |
mongodb.log.type |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.db |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
uuid.type |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.clientOperationKey.type |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.clientOperationKey.binary |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.aggregate |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.mayBypassWriteBlocking |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.configTime.timestamp.t |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.topologyTime.timestamp.t |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.audit |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.cursor.batchSize.numberLong |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.includeQueryStatsMetrics |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.fromMongos |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.readConcern.provenance |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.readConcern.level |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.writeConcern.provenance |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.writeConcern.level |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.client.platform |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.client.driver.name |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.client.driver.version |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.client.os.name |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.clusterTime |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.lsid.id.type |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.lsid.uid.binary |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.users.1.db |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.client.mongos.version |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.writeConcern.w |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.writeConcern.wtimeout |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.lsid.uid.type |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.pipeline.1.match.managedClusterType |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.pipeline.2.group.n.sum.const |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.pipeline.2.group._id.const |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.client.mongos.client.port |
event.idm.read_only_udm.additional.fields |
Dipetakan dari log perubahan |
param.args.audit.impersonatedRoles |
event.idm.read_only_udm.principal.user.attribute.roles |
Dipetakan dari log perubahan |
param.args.audit.impersonatedUser |
event.idm.read_only_udm.principal.user.attribute.labels |
Dipetakan dari log perubahan |
param.args.client.mongos.client |
event.idm.read_only_udm.principal.ip dan event.idm.read_only_udm.principal.asset.ip |
Dipetakan dari log perubahan |
param.args.client.mongos.host |
event.idm.read_only_udm.intermediary.ip |
Dipetakan dari log perubahan |
param.args.client.mongos.host |
event.idm.read_only_udm.intermediary.port |
Dipetakan dari log perubahan |
accessLog.authResult |
additional.fields |
Dipetakan dari log perubahan |
accessLog.authSource |
additional.fields |
Dipetakan dari log perubahan |
accessLog.failureReason |
additional.fields |
Dipetakan dari log perubahan |
accessLog.groupId |
target.resource.product_object_id |
Dipetakan dari log perubahan |
accessLog.ipAddress |
intermediary.ip |
Dipetakan dari log perubahan |
accessLog.logLine.t.$date |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.s |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.c |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.id |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.ctx |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.msg |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.client |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.isSpeculative |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.isClusterMember |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.mechanism |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.user |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.db |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.result |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.metrics.conversation_duration.micros |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.metrics.conversation_duration.summary.step |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.metrics.conversation_duration.summary.step_total |
additional.fields |
Dipetakan dari log perubahan |
accessLog.logLine.attr.metrics.conversation_duration.summary.duration_micros |
additional.fields |
Dipetakan dari log perubahan |
accessLog.username |
target.user.user_display_name |
Dipetakan dari log perubahan |
accessLog.timestamp |
additional.fields |
Dipetakan dari log perubahan |
roles.db |
principal.user.attribute.roles |
Dipetakan dari log perubahan |
roles.db |
target.user.attribute.roles |
Dipetakan dari log perubahan |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.