Kursus
MongoDB menyediakan kerangka kerja keamanan yang komprehensif berpusat pada tiga prinsip inti: autentikasi, otorisasi, dan enkripsi.
Tiga pilar ini membentuk pertahanan keamanan berlapis, memastikan satu kegagalan tidak mengompromikan seluruh sistem. Pilar otorisasi dipandu oleh prinsip hak istimewa paling rendah (PoLP), memastikan setiap pengguna atau aplikasi hanya memiliki izin minimal yang diperlukan untuk menjalankan tugasnya.
Menerapkan pendekatan komprehensif dan berlapis ini memperkuat postur keamanan Anda secara keseluruhan dan secara signifikan mengurangi paparan terhadap miskonfigurasi atau pelanggaran.
Mengaktifkan Gerbang Pertama: Autentikasi
Autentikasi adalah langkah keamanan mendasar. Ini memverifikasi identitas setiap entitas yang mencoba terhubung. Di MongoDB, ini dicapai dengan mengaktifkan fitur keamanan yang secara default dinonaktifkan demi kemudahan pada pengembangan lokal.
1. Memahami konfigurasi default
Secara default, deployment MongoDB Anda hanya mendengarkan di localhost dan mengizinkan akses tanpa autentikasi. Konfigurasi ini disengaja, memberikan kemudahan maksimal untuk penyiapan awal dan eksperimen lokal.
Untuk deployment produksi, dua pengaturan memerlukan perhatian pengembang:
- Status autentikasi: Autentikasi dinonaktifkan secara default. Anda dapat mengaktifkan otorisasi menggunakan --auth atau pengaturan security.authorization. Mengaktifkan autentikasi internal juga mengaktifkan otorisasi klien. Perlu dicatat, setelah kontrol akses diaktifkan, pengguna harus melakukan autentikasi.
- Pengikatan jaringan (bindIp): Secara default, biner MongoDB (mongod dan mongos) hanya mengikat ke localhost. Default aman ini membatasi koneksi ke mesin yang sama. Untuk lingkungan produksi, Anda harus secara eksplisit mengonfigurasi pengaturan bindIp untuk mencantumkan alamat IP server aplikasi yang diizinkan. Jika Anda memerlukan dukungan IPv6, Anda dapat mengatur pengaturan file konfigurasi net.ipv6 atau opsi baris perintah --ipv6, yang akan membuat biner juga mengikat ke alamat IPv6 localhost. Selalu batasi ini pada antarmuka jaringan yang diizinkan.
2. Cara mengaktifkan autentikasi
Mengaktifkan autentikasi mengubah MongoDB dari arena bermain lokal menjadi penyimpanan data yang aman. Ini dilakukan dengan memodifikasi file konfigurasi MongoDB Anda (biasanya mongod.conf) dan memulai ulang server.
Pengaturan file konfigurasi: Atur opsi otorisasi dalam bagian security untuk mengaktifkan fitur:
authorization: enabled
Pengguna pertama: Setelah autentikasi diaktifkan, tidak ada yang dapat terhubung hingga Anda membuat pengguna administratif. Pengguna pertama yang krusial ini harus dibuat di database admin, memberikan hak awal yang diperlukan untuk mengelola sistem dan membuat pengguna lain.
3. Pengelolaan pengguna dan kata sandi (createUser)
Setelah otorisasi diaktifkan, semua akses database diatur oleh pengguna dan peran yang terkait. Anda menggunakan perintah createUser untuk mendefinisikan identitas ini.
Sintaks dan peran: Saat membuat pengguna, Anda menentukan nama pengguna, kata sandi, dan sebuah array roles. Peran mendefinisikan izin mereka (mis., readWrite pada database tertentu).
db.createUser(
{
user: "appUser",
pwd: passwordPrompt(), // This function prompts for a password, which
// avoids storing the plain-text password in
// shell history and command logs.
roles: [ { role: "readWrite", db: "inventory" } ]
}
)
Standar SCRAM: MongoDB mengandalkan Salted Challenge Response Authentication Mechanism (SCRAM) untuk menangani kata sandi dengan aman. SCRAM menghindari penyimpanan kata sandi teks polos dan menggunakan hashing serta salting kriptografi yang kuat, sehingga tangguh terhadap vektor serangan umum seperti rainbow table.
4. Opsi autentikasi lanjutan
Untuk organisasi dengan kepatuhan ketat atau infrastruktur kompleks, MongoDB menawarkan integrasi dengan sistem autentikasi tingkat perusahaan yang sudah ada:
- Sertifikat klien x.509: Memungkinkan klien melakukan autentikasi menggunakan sertifikat digital alih-alih kata sandi, memberikan lapisan verifikasi identitas yang kuat, sering digunakan untuk kepercayaan antar-mesin.
- LDAP/Kerberos: Mengintegrasikan MongoDB dengan layanan eksternal seperti Active Directory atau OpenLDAP, memungkinkan pengguna memanfaatkan kredensial korporat yang ada untuk akses database.
- Autentikasi OpenID Connect (OIDC) - Workforce dan Workloads: Untuk lingkungan cloud-native dan hibrida modern, MongoDB mendukung Federasi Identitas untuk Workforce (akses pengguna melalui IdP seperti Azure AD, Okta) dan Workload (autentikasi antar-mesin menggunakan identitas penyedia cloud, misalnya AWS IAM atau Google Cloud Service Accounts).
Otorisasi: Mendefinisikan Peran dengan RBAC
Autentikasi menegaskan siapa pengguna; otorisasi menentukan apa yang boleh dilakukan pengguna tersebut. Sistem Role-Based Access Control (RBAC) MongoDB adalah mekanisme inti untuk mengelola izin, memastikan pengguna dan layanan hanya berinteraksi dengan data dan perintah yang benar-benar mereka perlukan.
1. Role-Based Access Control
Dalam model RBAC MongoDB, izin dikelompokkan ke dalam peran, dan peran ini diberikan kepada pengguna. Alih-alih menetapkan ratusan izin individual, Anda menetapkan satu peran (mis., inventoryReader), yang secara otomatis mencakup seperangkat izin yang ditentukan (mis., baca pada inventory.products). Ini membuat pengelolaan izin dapat diskalakan dan dapat diaudit.
2. Peran bawaan yang dibutuhkan setiap pengembang
MongoDB menyediakan rangkaian peran bawaan yang tangguh untuk mencakup pola akses paling umum. Berikut beberapa contohnya. Untuk set lengkapnya, Anda dapat merujuk tautan di atas.
- read dan readWrite (akses tingkat database): Ini adalah peran paling umum untuk pengguna aplikasi. Masing-masing memberikan akses untuk menjalankan operasi baca-saja atau baca/tulis pada semua koleksi non-sistem dalam database tertentu.
- dbAdmin: Ini memberikan hak administratif yang diperlukan untuk mengelola database tertentu, seperti membuat, menghapus, dan memodifikasi indeks serta koleksi. Cocok untuk tim pengembangan atau skrip pemeliharaan database.
- clusterAdmin (akses operasional): Peran berhak istimewa tinggi ini umumnya diperuntukkan bagi personel operasional (DevOps/Ops). Ini memberikan izin yang diperlukan untuk mengelola seluruh deployment MongoDB, termasuk mengonfigurasi replica set, sharding, dan melakukan pencadangan. Pengembang aplikasi jarang membutuhkan peran ini.
3. Menerapkan prinsip hak istimewa paling rendah
Batu penjuru keamanan database modern adalah prinsip hak istimewa paling rendah (PoLP). Ini menuntut setiap pengguna (terutama pengguna aplikasi) diberikan izin minimum yang diperlukan untuk menjalankan tugasnya, dan tidak lebih.
Berikut contoh praktik terbaik: Alih-alih menggunakan pengguna readWrite global, buat pengguna khusus aplikasi. Misalnya, jika layanan inventaris Anda hanya berinteraksi dengan database app_data, pengguna aplikasi hanya boleh diberikan akses readWrite ke satu database tersebut. Kompartementalisasi ini mencegah layanan yang dikompromikan mendapatkan akses tidak sah ke database lain (seperti billing atau users).
Contoh kode: membuat pengguna dengan hak istimewa paling rendah
Contoh ini membuat pengguna (inventory_service) dengan akses baca/tulis yang dibatasi ketat pada database app_data.
use admin
db.createUser(
{
user: "inventory_service",
pwd: passwordPrompt(),
roles: [
{ role: "readWrite", db: "app_data" }
]
}
)
4. Membuat peran kustom (saat peran bawaan tidak cukup)
Meskipun peran bawaan itu kuat, kepatuhan atau logika aplikasi yang kompleks mungkin memerlukan kontrol yang sangat granular. Dalam kasus ini, MongoDB memungkinkan Anda mendefinisikan peran kustom menggunakan perintah db.createRole().
Mendefinisikan izin granular: Peran kustom memungkinkan Anda menentukan dengan tepat tindakan hak istimewa mana (mis., find, update, insert) yang dapat dilakukan pada sumber daya dalam cakupan tingkat klaster, database, atau koleksi. Organisasi dapat memanfaatkan teknik seperti redaksi tingkat kolom untuk melindungi kolom data yang sangat sensitif dalam koleksi yang sebaliknya bersifat publik.
Contoh kode: membuat peran kustom
Contoh ini membuat peran kustom (product_creator) yang hanya dapat menyisipkan dokumen ke koleksi products di dalam database app_data.
use app_data
db.createRole(
{
role: "product_creator",
privileges: [
{
resource: { db: "app_data", collection: "products" },
actions: [ "insert" ]
}
],
roles: []
}
)
Perlindungan Data Komprehensif: Isolasi Jaringan dan Enkripsi
Meskipun autentikasi dan otorisasi yang kuat mengendalikan akses ke database Anda, keamanan komprehensif memerlukan perlindungan data itu sendiri—baik saat berpindah di jaringan (in transit) maupun saat disimpan di disk (at rest).
1. Melindungi data in transit dengan TLS/SSL
Transmisi data melalui jaringan apa pun, baik internal dalam pusat data maupun eksternal ke cloud, harus dienkripsi untuk mencegah penyadapan dan serangan man-in-the-middle (MITM). MongoDB menggunakan Transport Layer Security/Secure Sockets Layer (TLS/SSL) untuk mengenkripsi semua komunikasi antara klien (seperti aplikasi Anda) dan server.
Tanpa TLS/SSL, kredensial pengguna, parameter kueri, dan hasil sensitif ditransmisikan dalam teks polos, sehingga mudah disadap. Mengaktifkan TLS/SSL memastikan data diacak dan diamankan selama transmisi.
Mengaktifkan TLS/SSL: Ini terutama dilakukan melalui pengaturan konfigurasi, di mana Anda menentukan sertifikat yang harus digunakan server untuk verifikasi identitas dan pertukaran kunci enkripsi:
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
- net.ssl.mode: requireTLS memaksa semua koneksi masuk menggunakan TLS/SSL, menolak upaya yang tidak aman.
- certificateKeyFile menunjuk ke sertifikat TLS/SSL yang Anda buat dan file Certificate Authority.
2. Firewall dan segmentasi jaringan
Segmentasi jaringan memberikan lapisan pertahanan penting dengan membatasi antarmuka fisik atau virtual yang dapat terhubung ke database. Bahkan jika penyerang mendapatkan akses jaringan, mereka tetap harus menembus perimeter Anda.
- Membatasi akses melalui daftar putih IP: Dengan menggunakan pengaturan bindIp atau mengonfigurasi firewall jaringan, Anda dapat memasukkan alamat IP tertentu ke daftar putih.
- Praktik terbaik: Server MongoDB sebaiknya hanya diekspos ke server aplikasi Anda, load balancer, atau lapisan proksi. Jangan pernah dapat diakses langsung dari internet publik. Segmentasi ini memastikan database terlindungi di balik perimeter keamanan infrastruktur aplikasi.
3. Enkripsi at rest (enkripsi mesin penyimpanan)
Melindungi data at rest memastikan bahwa jika disk fisik atau lingkungan host dikompromikan, file tetap tidak dapat dibaca. MongoDB mewujudkan ini melalui enkripsi mesin penyimpanan.
- Cara kerjanya: Mesin penyimpanan WiredTiger dapat dikonfigurasi untuk mengenkripsi semua file data, file konfigurasi, dan file jurnal di disk. Data akan terenkripsi secara transparan saat ditulis dan didekripsi saat dibaca, menggunakan kunci enkripsi yang dikelola sistem.
- Pertimbangan penting: Meskipun ini adalah lapisan keamanan penting, enkripsi native at rest biasanya merupakan fitur MongoDB Enterprise, dan bergantung pada server Key Management Interoperability Protocol (KMIP) eksternal atau file kunci lokal untuk mengelola kunci enkripsi.
4. Client-Side Field Level Encryption (CSFLE): Standar emas bagi pengembang
Sementara enkripsi at-rest melindungi seluruh database, Client-Side Field Level Encryption (CSFLE) memberikan ketepatan tingkat bedah atas data sensitif, memungkinkan Anda mengenkripsi kolom tertentu sebelum dikirim ke database.
- Pengenalan CSFLE: Dengan CSFLE, enkripsi terjadi di dalam driver aplikasi sebelum data meninggalkan server aplikasi. Ini berarti server MongoDB tidak pernah melihat data sensitif dalam teks polos; server hanya menyimpan ciphertext. Data sensitif tetap terenkripsi setiap saat di server, termasuk di memori, log server, dan penyimpanan.
- Alat terkuat bagi pengembang: CSFLE adalah standar emas untuk kepatuhan (mis., GDPR, HIPAA), karena memastikan bahwa bahkan jika terjadi pelanggaran total database, kolom sensitif (seperti PII atau informasi keuangan) tetap terenkripsi dan terlindungi. Pengembang harus secara aktif memutuskan apa yang akan dienkripsi, dengan mengintegrasikan logika enkripsi langsung ke dalam kode aplikasi mereka.
5. Enkripsi saat digunakan dengan Queryable Encryption
Queryable Encryption adalah pengembangan CSFLE yang mengatasi tantangan melakukan kueri pada kolom terenkripsi. Ini memungkinkan aplikasi melakukan kueri kesetaraan (mis., menemukan dokumen di mana kolom terenkripsi sama dengan nilai tertentu) langsung terhadap ciphertext. Ini memberikan keamanan CSFLE sambil mempertahankan kegunaan data, sehingga secara efektif mengenkripsi data saat digunakan.
Audit: Alat Pasca-Insiden
Langkah-langkah keamanan berfokus pada pencegahan, tetapi audit berfokus pada akuntabilitas dan deteksi. Kerangka audit bawaan MongoDB memberikan kemampuan penting untuk melacak dan mencatat peristiwa yang relevan dengan keamanan, menyediakan catatan tak terbantahkan yang esensial untuk forensik, kepatuhan, dan deteksi ancaman secara proaktif.
1. Apa itu audit dan mengapa penting?
Audit mencatat setiap tindakan krusial yang dilakukan terhadap database, menciptakan catatan historis yang terperinci. Ini mencakup:
- Peristiwa autentikasi: upaya login yang berhasil dan gagal.
- Perubahan otorisasi: pembuatan, modifikasi, atau penghapusan pengguna dan peran.
- Perubahan konfigurasi: modifikasi parameter sistem yang memengaruhi keamanan.
Log ini sangat berharga bagi tim keamanan untuk melakukan analisis pasca-insiden (alat "post-mortem") atau untuk memenuhi persyaratan kepatuhan regulasi.
2. Konfigurasi dan pemfilteran
Mengaktifkan audit itu mudah, sering kali hanya membutuhkan satu baris di file konfigurasi untuk mengaktifkan sistem dan menentukan tujuan log (file, syslog, atau konsol).
auditLog:
destination: file
format: BSON
path: /var/log/mongodb/audit.bson
filter: '{ atype: { $in: [ "authenticate", "createRole", "dropUser" ] } }'
- Pemfilteran: Sistem audit memungkinkan pemfilteran yang sangat granular menggunakan sintaks mirip kueri. Ini penting untuk mengelola volume log. Pengembang harus memfokuskan filter pada peristiwa penting terkait keamanan, seperti tindakan manajemen pengguna, perubahan konfigurasi keamanan, dan upaya autentikasi.
Ringkasan dan langkah berikutnya
MongoDB menyediakan rangkaian fitur keamanan yang komprehensif yang, ketika diterapkan dengan benar, menciptakan strategi pertahanan berlapis yang kuat. Tugas utama Anda sebagai pengembang adalah melampaui default pengembangan dan menerapkan kontrol inti ini.
Sebelum aplikasi apa pun masuk ke produksi, ingat tiga mandat keamanan inti ini:
- Enkripsi data in transit: Gunakan TLS/SSL untuk semua koneksi jaringan (net.ssl.mode: requireTLS).
- Enkripsi data at rest: Pastikan file database di disk diamankan menggunakan enkripsi tingkat volume atau sistem berkas, atau enkripsi mesin penyimpanan WiredTiger MongoDB (tersedia di MongoDB Enterprise) untuk melindungi dari akses tidak sah ke file database.
- Enkripsi data saat digunakan: Gunakan Client-Side Field Level Encryption (CSFLE) dan Queryable Encryption untuk kolom data yang sangat sensitif, memastikan data tetap terenkripsi bahkan saat database sedang berjalan.
Keamanan adalah disiplin yang terus berkembang. Untuk pembahasan lebih mendalam dan konfigurasi lanjutan, manfaatkan dokumentasi resmi:
- Pusat Keamanan MongoDB: Jelajahi panduan untuk memperkeras deployment dan praktik keamanan operasional.
- Dokumentasi enkripsi saat digunakan: Pelajari cara menerapkan Client-Side Field Level Encryption (CSFLE) dan kemampuannya yang lebih lanjut, serta Queryable Encryption (QE), untuk memastikan data sensitif Anda tetap rahasia dan tetap dapat dikueri secara efisien saat digunakan.
Saya juga merekomendasikan untuk melihat kursus Introduction to Using MongoDB for Data Science in Python.
FAQ Keamanan MongoDB
Apa pengaturan keamanan paling penting untuk produksi?
Autentikasi dengan mengatur security.authorization: enabled.
Apa perbedaan antara autentikasi dan otorisasi?
Autentikasi memverifikasi siapa Anda (identitas), biasanya dengan nama pengguna dan kata sandi. Otorisasi menentukan apa yang dapat Anda lakukan (izin), menggunakan RBAC untuk menegakkan prinsip hak istimewa paling rendah.
Apa tujuan dari prinsip hak istimewa paling rendah (PoLP)?
Prinsip hak istimewa paling rendah (PoLP) bertujuan memberikan kepada pengguna dan sistem hanya akses yang benar-benar diperlukan untuk tugas spesifik mereka. Selain meminimalkan kerusakan saat pelanggaran, prinsip ini juga bertindak sebagai pertahanan penting terhadap ancaman orang dalam dan kesalahan operasional, sekaligus membantu organisasi Anda memenuhi persyaratan kepatuhan regulasi yang ketat. Ini setara dengan hanya memberikan anak balita Anda akses ke mainan yang tidak mudah pecah.
Bagaimana TLS/SSL melindungi data saya?
TLS/SSL mengenkripsi data in transit, artinya semua komunikasi antara aplikasi Anda dan server MongoDB diacak saat melalui jaringan.
Apa manfaat utama Client-Side Field Level Encryption (CSFLE)?
CSFLE mengenkripsi data sensitif tertentu (seperti PII) di aplikasi sebelum data meninggalkan klien. Ini memastikan data tetap terlindungi bahkan jika server MongoDB itu sendiri, atau administratornya, dikompromikan.
Karen adalah Data Engineer dengan passion dalam membangun platform data yang dapat diskalakan. Ia berpengalaman dalam otomasi infrastruktur dengan Terraform dan antusias membagikan pembelajarannya melalui posting blog dan tutorial. Karen juga seorang penggerak komunitas, dan ia bersemangat membina koneksi di antara para profesional data.

