Menyiapkan keamanan MongoDB bukan satu langkah besar, melainkan rangkaian kebiasaan kecil yang saling menutup celah: autentikasi menyala, hak akses minimum, jaringan terbatas, TLS aktif, dan kredensial yang dikelola dengan benar. Dokumentasi resmi MongoDB merangkum semuanya dalam security checklist yang wajib dikunjungi sebelum sistem menyentuh data nyata. Chapter ini menerjemahkan daftar itu menjadi tabel periksa yang bisa langsung Anda pakai — lengkap dengan rujukan chapter tempat setiap poin dibahas.
Cara Memakai Daftar Ini #
Jalankan audit dalam tiga situasi: sebelum peluncuran pertama, setelah perubahan arsitektur besar (cluster baru, layanan baru), dan secara berkala tiap kuartal. Tandai setiap baris dengan salah satu dari tiga status: lolos, perlu tindakan, atau tidak relevan — baris ketiga pun harus punya alasan tertulis. Daftar yang tidak pernah dikunjungi ulang akan basi begitu arsitektur berubah.
Authentication dan User #
| # | Pemeriksaan | Rujukan |
|---|---|---|
| 1 | Autentikasi menyala (security.authorization: enabled), tidak ada server terbuka tanpa login | Authentication |
| 2 | Tidak ada user dengan password kosong atau bawaan | Database Users |
| 3 | Setiap aplikasi memiliki user sendiri — tidak berbagi akun antar layanan | Database Users |
| 4 | Password dirotasi secara berkala dan tidak pernah tersimpan di repositori | Credential Management |
| 5 | Mekanisme autentikasi modern (SCRAM-SHA-256 atau x.509 untuk lingkungan matur) | Authentication |
Authorization #
| # | Pemeriksaan | Rujukan |
|---|---|---|
| 6 | Setiap user memegang role paling kecil yang cukup — readWrite pada satu database, bukan root | Least Privilege, Role-Based Access Control |
| 7 | Tidak ada user root untuk keperluan aplikasi sehari-hari | Role-Based Access Control |
| 8 | Role kustom dibuat hanya saat role bawaan tidak cukup, dan didokumentasikan | Role-Based Access Control |
| 9 | Daftar user dan role diaudit berkala; user lama yang tidak terpakai dihapus | Database Users |
Jaringan dan Transport #
| # | Pemeriksaan | Rujukan |
|---|---|---|
| 10 | net.bindIp tidak di-set 0.0.0.0 tanpa firewall yang menyertai | Network Access Control |
| 11 | Port 27017 (dan port cluster lain) tidak terbuka ke internet publik | Network Access Control |
| 12 | TLS aktif untuk koneksi klien-server dengan sertifikat yang valid dan belum kedaluwarsa | TLS dan Enkripsi, Encryption in Transit |
| 13 | Komunikasi antar anggota cluster juga terenkripsi (membership auth) | Encryption in Transit |
| 14 | Whitelist IP di Atlas (atau security group di cloud) membatasi sumber koneksi | Network Access Control |
Data dan Konfigurasi #
| # | Pemeriksaan | Rujukan |
|---|---|---|
| 15 | Enkripsi at-rest dipertimbangkan: disk terenkripsi (Community) atau encryptionAtRest (Enterprise) | Encryption at Rest |
| 16 | Query aplikasi memakai objek filter eksplisit — tidak ada penyusunan string mentah dari input pengguna | Injection Attacks |
| 17 | Input pengguna divalidasi tipe dan bentuknya sebelum menyentuh query | Injection Attacks |
| 18 | Validator schema collection aktif untuk data kritis | Schema Validation (section sebelumnya) |
| 19 | javascriptEnabled dimatikan bila $where tidak dipakai | Query Errors, dokumentasi resmi |
Operasional #
| # | Pemeriksaan | Rujukan |
|---|---|---|
| 20 | Audit trail tersedia (audit facility Enterprise, profiler, atau log platform) | Auditing |
| 21 | Backup terenkripsi, teruji dipulihkan, dan tersimpan terpisah dari sumbernya | Backup dan Recovery (section berikutnya) |
| 22 | Versi server dan driver terkini dengan patch keamanan terpasang | Upgrade MongoDB |
| 23 | Monitoring aktif untuk anomali koneksi dan beban tak wajar | Monitoring Performa |
| 24 | Prosedur respons insiden tertulis, termasuk cara memutar kredensial darurat | Disaster Recovery |
Verifikasi Cepat dari mongosh #
Beberapa poin di atas bisa diperiksa langsung dari shell. Pada server latihan kita — yang memang sengaja tanpa autentikasi — hasilnya justru menjadi contoh pembacaan:
db.adminCommand({ getCmdLineOpts: 1 }).parsed.security
db.adminCommand({ getCmdLineOpts: 1 }).parsed.net.bindIpOutput yang Dihasilkan:
{ authorization: 'disabled' }
'127.0.0.1'Dua baris itu menceritakan dua hal berbeda. authorization: 'disabled' memastikan server latihan memang tidak memeriksa identitas — pada produksi, nilai ini wajib enabled. Sebaliknya bindIp: '127.0.0.1' adalah kabar baik: server hanya mendengar koneksi lokal, sehingga meski autentikasi mati, server tidak terbuka ke jaringan luar. Pasangan hasil seperti ini menunjukkan kenapa audit harus membaca konfigurasi aktual, bukan sekadar mengingat niat saat instalasi.
Rangkuman #
- Audit keamanan MongoDB adalah daftar periksa berulang — bukan tugas sekali jalan saat instalasi.
- Empat pilar pemeriksaan: authentication, authorization, jaringan/TLS, dan operasional (audit, backup, patch).
- Setiap poin pada checklist resmi sudah dibahas pada chapter masing-masing — jadikan tabel ini peta akhir section.
getCmdLineOptsmemberi tahu konfigurasi yang benar-benar aktif di server, termasuk status autentikasi dan bindIp.- Kombinasi “autentikasi mati + jaringan terbuka” adalah kesalahan paling mahal; pastikan minimal satu dari dua kunci itu selalu terpasang.