Mengumpulkan log IBM DB2
Dokumen ini menjelaskan cara menyerap log IBM DB2 ke Google Security Operations menggunakan agen Bindplane.
IBM Db2 adalah sistem manajemen database relasional yang menyediakan fasilitas audit untuk membantu mendeteksi akses yang tidak diketahui atau tidak terduga ke data. Fasilitas audit Db2 menghasilkan dan mengizinkan pemeliharaan jejak audit untuk serangkaian peristiwa database yang telah ditentukan sebelumnya.
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 instance IBM DB2
- Jika beroperasi dari balik proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen Bindplane
- Instance IBM DB2 (versi 11.1 atau yang lebih baru) dengan hak istimewa SYSADM
- Ruang disk yang cukup untuk penyimpanan dan pengarsipan log audit
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Klik Download untuk mendownload file autentikasi penyerapan.
Simpan file dengan aman di sistem tempat agen 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-collectorLayanan 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-collectorLayanan akan ditampilkan sebagai aktif (berjalan).
Referensi penginstalan tambahan
Untuk opsi penginstalan dan pemecahan masalah tambahan, lihat Panduan penginstalan agen BindPlane.
Mengonfigurasi agen BindPlane untuk menyerap syslog dan mengirimkannya ke Google SecOps
Cari file konfigurasi
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edit file konfigurasi
Ganti seluruh konten
config.yamldengan konfigurasi berikut:receivers: tcplog: listen_address: "0.0.0.0:1514" exporters: chronicle/db2_audit: compression: gzip creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: DB2_DB raw_log_field: body ingestion_labels: env: production service: pipelines: logs/db2_to_chronicle: receivers: - tcplog exporters: - chronicle/db2_auditGanti placeholder berikut:
Konfigurasi penerima:
listen_address: Setel ke0.0.0.0:1514untuk memproses semua antarmuka di port 1514 (port non-privilege direkomendasikan untuk Linux).
Konfigurasi eksportir:
creds_file_path: Jalur lengkap ke file autentikasi penyerapan:- Linux:
/opt/observiq-otel-collector/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:
log_type: Tetapkan keDB2_DBingestion_labels: Label opsional dalam format YAML (misalnya,env: production)
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
Linux
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
Windows
Pilih salah satu opsi berikut:
Menggunakan Command Prompt atau PowerShell sebagai administrator:
net stop observiq-otel-collector && net start observiq-otel-collectorMenggunakan konsol Layanan:
- Tekan
Win+R, ketikservices.msc, lalu tekan Enter. - Temukan observIQ OpenTelemetry Collector.
- Klik kanan, lalu pilih Mulai Ulang.
Pastikan layanan sedang berjalan:
sc query observiq-otel-collectorPeriksa log untuk mengetahui error:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Tekan
Mengonfigurasi fasilitas audit IBM DB2
Konfigurasi fasilitas audit DB2 untuk merekam peristiwa keamanan dan mengekstraknya ke syslog.
Memeriksa konfigurasi audit saat ini
Hubungkan ke instance DB2 Anda sebagai pengguna dengan otoritas SYSADM dan jalankan:
db2audit describeBagian ini menampilkan konfigurasi audit saat ini, termasuk status, kategori, dan jalur audit.
Mengonfigurasi jalur audit
Tetapkan direktori tempat log audit akan disimpan:
db2audit configure datapath /db2audit/data db2audit configure archivepath /db2audit/archivePastikan direktori ini ada dan memiliki izin yang sesuai untuk pemilik instance DB2:
mkdir -p /db2audit/data /db2audit/archive chown db2inst1:db2iadm1 /db2audit/data /db2audit/archive chmod 750 /db2audit/data /db2audit/archive
Mengonfigurasi cakupan dan kategori audit
Konfigurasi fasilitas audit untuk mencatat semua peristiwa keamanan:
db2audit configure scope all status both errortype normalKonfigurasi ini:
scope all: Mengaudit semua kategori (audit, checking, objmaint, secmaint, sysadmin, validate, context)status both: Mencatat peristiwa yang berhasil dan gagalerrortype normal: Penanganan error standar
Mulai fasilitas audit
Mulai pengauditan:
db2audit startPastikan audit aktif:
db2audit describeOutput akan menampilkan
Audit active: "TRUE".
Mengonfigurasi syslog untuk menerima log audit DB2
Konfigurasi daemon syslog sistem untuk menerima dan menyimpan pesan audit DB2.
Linux (rsyslog)
Edit file konfigurasi rsyslog:
sudo nano /etc/rsyslog.confTambahkan baris berikut untuk merutekan pesan audit DB2 ke file khusus:
user.info /var/log/db2/db2audit.logBuat direktori dan file log:
sudo mkdir -p /var/log/db2 sudo touch /var/log/db2/db2audit.log sudo chmod 640 /var/log/db2/db2audit.logMulai ulang rsyslog:
sudo systemctl restart rsyslog
AIX (syslogd)
Edit file konfigurasi syslog:
sudo vi /etc/syslog.confTambahkan baris berikut:
user.info /var/log/db2/db2audit.logBuat direktori dan file log:
sudo mkdir -p /var/log/db2 sudo touch /var/log/db2/db2audit.log sudo chmod 640 /var/log/db2/db2audit.logMulai ulang syslogd:
sudo refresh -s syslogd
Mengekstrak log audit DB2 ke syslog
Mengekstrak log audit yang diarsipkan dan mengirimkannya ke daemon syslog sistem.
Menghapus dan mengarsipkan log audit
Sebelum melakukan ekstraksi, hapus semua catatan audit yang tertunda dan arsipkan log audit saat ini:
db2audit flush db2audit archivePerintah arsip membuat file yang diberi stempel waktu di jalur arsip (misalnya,
db2audit.instance.log.0.20250110123456).
Mengekstrak log audit ke syslog
Ekstrak log audit yang diarsipkan dan kirimkan ke syslog menggunakan fasilitas dan prioritas
user.info:db2audit extract syslog user.info from files /db2audit/archive/db2audit.instance.log.0.*Perintah ini:
- Mengekstrak catatan audit dari file log yang diarsipkan
- Mengirimkannya ke daemon syslog sistem dengan fasilitas
userdan prioritasinfo - Daemon syslog merutekan pesan sesuai dengan
/etc/syslog.confatau/etc/rsyslog.conf
Memverifikasi bahwa log sedang dikirim
Periksa apakah pesan audit sedang ditulis ke file syslog:
tail -f /var/log/db2/db2audit.logAnda akan melihat catatan audit DB2 muncul di file log.
Mengonfigurasi rsyslog untuk meneruskan log ke agen BindPlane
Konfigurasi rsyslog untuk meneruskan log audit DB2 ke agen BindPlane.
Buat file konfigurasi rsyslog baru:
sudo nano /etc/rsyslog.d/50-db2-forward.confTambahkan konfigurasi berikut untuk meneruskan log ke agen Bindplane:
# Forward DB2 audit logs to Bindplane agent user.info @@127.0.0.1:1514Awalan
@@menunjukkan penerusan TCP. Gunakan@untuk UDP jika diperlukan.Mulai ulang rsyslog:
sudo systemctl restart rsyslog
Mengotomatiskan ekstraksi log audit
Buat skrip untuk mengotomatiskan proses penghapusan, pengarsipan, dan ekstraksi.
Buat skrip ekstraksi
Buat skrip untuk mengotomatiskan ekstraksi log audit:
sudo nano /usr/local/bin/db2audit-extract.shTambahkan konten berikut:
#!/bin/bash # DB2 Audit Log Extraction Script # Set DB2 environment export DB2INSTANCE=db2inst1 . /home/db2inst1/sqllib/db2profile # Flush pending audit records db2audit flush # Archive current audit log db2audit archive # Extract archived logs to syslog db2audit extract syslog user.info from files /db2audit/archive/db2audit.instance.log.0.* # Optional: Clean up old archived logs (older than 30 days) find /db2audit/archive -name "db2audit.instance.log.0.*" -mtime +30 -delete exit 0Setel agar skrip dapat dieksekusi:
sudo chmod +x /usr/local/bin/db2audit-extract.sh
Menjadwalkan dengan cron
Jadwalkan skrip agar berjalan secara berkala menggunakan cron:
sudo crontab -eTambahkan baris berikut untuk menjalankan skrip setiap jam:
Pilih salah satu opsi berikut:
0 * * * * /usr/local/bin/db2audit-extract.sh >> /var/log/db2/db2audit-extract.log 2>&1Atau jalankan setiap 15 menit untuk ekstraksi yang lebih sering:
*/15 * * * * /usr/local/bin/db2audit-extract.sh >> /var/log/db2/db2audit-extract.log 2>&1
Memverifikasi penyerapan log di Google SecOps
- Login ke konsol Google SecOps.
- Buka Penelusuran.
Jalankan kueri penelusuran untuk memverifikasi bahwa log DB2 sedang di-ingest:
metadata.log_type = "DB2_DB"Pastikan log muncul dengan stempel waktu dan kolom yang benar.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| msg | event.idm.read_only_udm.additional.fields | Nilai diambil dari msg jika msg != "" |
| Sistem | event.idm.read_only_udm.additional.fields | Nilai diambil dari Sistem jika System != "" |
| Subsistem | event.idm.read_only_udm.additional.fields | Nilai diambil dari Subsystem jika Subsystem != "" |
| auth_mechanism | event.idm.read_only_udm.extensions.auth.mechanism | Disetel ke "USERNAME_PASSWORD" untuk peristiwa USER_LOGIN |
| CorrelationUser | event.idm.read_only_udm.intermediary.user.userid | Nilai diambil dari CorrelationUser jika CorrelationUser != "" |
| jumlah | event.idm.read_only_udm.metadata.description | Nilai diambil dari jumlah |
| date_time | event.idm.read_only_udm.metadata.event_timestamp | Dikonversi dari kolom tanggal dan waktu ke format ISO8601 jika keduanya != "" |
| leef_event_id | event.idm.read_only_udm.metadata.product_event_type | Nilai diambil dari leef_event_id |
| event.idm.read_only_udm.metadata.event_type | Diperoleh dari leef_event_id: jika dalam ["102-87", "102-83"] → USER_LOGIN; jika dalam ["102-6", "102-7", "102-8", "102-10", "102-24", "102-143"] → USER_RESOURCE_ACCESS atau USER_RESOURCE_UPDATE_CONTENT berdasarkan maksud; jika "102-319" → USER_RESOURCE_ACCESS; selain itu GENERIC_EVENT | |
| event.idm.read_only_udm.metadata.product_name | Ditetapkan ke "DB2" | |
| event.idm.read_only_udm.metadata.vendor_name | Ditetapkan ke "IBM" | |
| SSID | event.idm.read_only_udm.network.session_id | Nilai diambil dari SSID jika SSID != "" |
| pekerjaan | event.idm.read_only_udm.principal.application | Nilai diambil dari tugas jika tugas != "" |
| sourceServiceName | event.idm.read_only_udm.principal.application | Nilai yang diambil dari sourceServiceName |
| sourceHostName | event.idm.read_only_udm.principal.asset.hostname | Nilai diambil dari sourceHostName jika sourceHostName != "" |
| principal_ip | event.idm.read_only_udm.principal.asset.ip | Nilai yang diambil dari principal_ip untuk peristiwa 102-319 |
| product_id | event.idm.read_only_udm.principal.asset_id | Disetel ke "Product ID: %{product_id}" untuk peristiwa 102-319 |
| sourceHostName | event.idm.read_only_udm.principal.hostname | Nilai diambil dari sourceHostName jika sourceHostName != "" |
| principal_ip | event.idm.read_only_udm.principal.ip | Nilai yang diambil dari principal_ip untuk peristiwa 102-319 |
| Pembuat | event.idm.read_only_udm.principal.user.user_display_name | Nilai yang diambil dari Kreator |
| nama | event.idm.read_only_udm.principal.user.user_display_name | Nilai diambil dari nama jika name != "" |
| AuthenticatedUser | event.idm.read_only_udm.principal.user.userid | Nilai diambil dari AuthenticatedUser jika AuthenticatedUser != "" |
| sourceUserName | event.idm.read_only_udm.principal.user.userid | Nilai diambil dari sourceUserName |
| usrName | event.idm.read_only_udm.principal.user.userid | Nilai diambil dari usrName |
| _action | event.idm.read_only_udm.security_result.action | Diperoleh dari jumlah: jika berisi "berhasil" → PERBOLEHKAN; jika tidak, BLOKIR untuk peristiwa USER_LOGIN |
| deviceHostName | event.idm.read_only_udm.target.asset.hostname | Nilai yang diambil dari deviceHostName |
| conn_location3 | event.idm.read_only_udm.target.asset.hostname | Nilai diambil dari conn_location3 jika conn_location3 != "" |
| file_name | event.idm.read_only_udm.target.file.full_path | Nilai diambil dari file_name jika file_name != "" |
| deviceHostName | event.idm.read_only_udm.target.hostname | Nilai yang diambil dari deviceHostName |
| conn_location3 | event.idm.read_only_udm.target.hostname | Nilai diambil dari conn_location3 jika conn_location3 != "" |
| conn_location, conn_location2 | event.idm.read_only_udm.target.location.name | Digabungkan dari conn_location dan conn_location2 jika keduanya != "" |
| deviceProcessName | event.idm.read_only_udm.target.process.command_line | Nilai yang diambil dari deviceProcessName |
| SQL | event.idm.read_only_udm.target.process.command_line | Nilai diambil dari SQL jika SQL != "" |
| Connection_Type | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Jenis Koneksi" dengan nilai dari Connection_Type |
| Paket | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Plan" dengan nilai dari Plan |
| DB2_Subsystem | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "DB2 Subsystem" dengan nilai dari DB2_Subsystem |
| Priv_Check_Code | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Priv Check Code" dengan nilai dari Priv_Check_Code |
| Table_Name | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Table Name" dengan nilai dari Table_Name |
| MessageType | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Jenis Pesan" dengan nilai dari MessageType |
| Check_type | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Check Type" dengan nilai dari Check_type |
| deviceAction | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "Device Action" dengan nilai yang dipetakan dari deviceAction: G → GRANT, R → REVOKE |
| SSID | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "SSID" dengan nilai dari SSID jika nilai != "" |
| SQL | event.idm.read_only_udm.target.resource.attribute.labels | Kunci "SQL Query" dengan nilai dari SQL jika SQL != "" |
| messageid | event.idm.read_only_udm.target.resource.id | Nilai diambil dari messageid |
| Object_Class_Code | event.idm.read_only_udm.target.resource.parent | Nilai diambil dari Object_Class_Code |
| obj | event.idm.read_only_udm.target.resource.name | Nilai diambil dari obj |
| resource_name | event.idm.read_only_udm.target.resource.name | Nilai yang diambil dari resource_name yang diekstrak dari SQL jika SQL != "" dan tidak kosong |
| Database_Name | event.idm.read_only_udm.target.resource.name | Nilai yang diambil dari Database_Name |
| objtyp | event.idm.read_only_udm.target.resource.resource_subtype | Nilai diambil dari objtyp (huruf besar) jika objtyp != "" |
| Jenis | event.idm.read_only_udm.target.resource.resource_subtype | Berasal dari Jenis: T → TABEL, V → VIEW, X → TABEL TAMBAHAN |
| event.idm.read_only_udm.target.resource.resource_type | Ditetapkan ke "DATABASE" |
Perlu bantuan lebih lanjut? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.