MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Cara Menggunakan Enkripsi untuk Melindungi Data MongoDB Anda

Keamanan basis data adalah faktor kunci yang perlu dipertimbangkan untuk aplikasi apa pun yang melibatkan data yang sangat sensitif seperti laporan keuangan dan kesehatan. Perlindungan data dapat dicapai melalui enkripsi pada tingkat yang berbeda mulai dari aplikasi itu sendiri hingga file yang menyimpan data.

Karena MongoDB adalah database non-relasional, seseorang tidak perlu mendefinisikan kolom sebelum memasukkan data; dan oleh karena itu dokumen dalam koleksi yang sama dapat memiliki bidang yang berbeda satu sama lain.

Di sisi lain, untuk SQL DBMS, kita harus mendefinisikan kolom untuk data, maka semua baris memiliki kolom yang sama. Seseorang dapat memutuskan untuk mengenkripsi kolom individu, seluruh file database atau data dari aplikasi sebelum terlibat dalam proses database.

Enkripsi kolom individual paling disukai karena lebih murah dan lebih sedikit data yang dienkripsi sehingga meningkatkan latensi. Secara umum, kinerja keseluruhan berdampak sebagai akibat dari enkripsi.

Untuk DBMS NoSQL, pendekatan ini tidak akan menjadi yang terbaik. Mengingat tidak semua dokumen mungkin memiliki semua bidang yang ingin Anda gunakan dalam enkripsi Anda, enkripsi tingkat kolom tidak dapat dilakukan.

Mengenkripsi data pada tingkat aplikasi cukup mahal dan sulit untuk diterapkan. Oleh karena itu, kami tetap memiliki opsi untuk mengenkripsi data di tingkat basis data.

MongoDB menyediakan enkripsi asli yang tidak mengharuskan seseorang membayar biaya tambahan untuk mengamankan data sensitif Anda.

Mengenkripsi Data di MongoDB

Setiap operasi basis data melibatkan salah satu dari dua bentuk data ini, data diam atau data bergerak.

Data bergerak adalah aliran data yang bergerak melalui semua jenis jaringan sedangkan data diam bersifat statis sehingga tidak bergerak ke mana pun.

Kedua tipe data ini rentan terhadap gangguan eksternal oleh pengguna anonim kecuali jika enkripsi terlibat. Proses enkripsi melibatkan:

  • Membuat kunci master untuk seluruh database
  • Membuat kunci unik untuk setiap database
  • Mengenkripsi data Anda dengan kunci database yang Anda buat
  • Mengenkripsi seluruh database dengan kunci master

Mengenkripsi Data saat Transit

Data ditransaksikan antara MongoDB dan aplikasi server dengan dua cara yaitu, melalui Transport Layer Security (TLS) dan Secure Socket Layer (SSL).

Keduanya adalah protokol enkripsi yang paling banyak digunakan untuk mengamankan data yang dikirim dan diterima antara dua sistem. Pada dasarnya, konsepnya adalah untuk mengenkripsi koneksi ke instance mongod dan mongos sehingga lalu lintas jaringan hanya dapat dibaca oleh klien yang dituju.

TLS/SSL digunakan di MongoDB dengan beberapa sertifikat sebagai file PEM yang dikeluarkan oleh otoritas sertifikat atau dapat berupa sertifikat yang ditandatangani sendiri. Yang terakhir memiliki batasan bahwa bagaimanapun saluran komunikasi dienkripsi, selalu tidak ada validasi terhadap identitas server sehingga rentan terhadap serangan eksternal di tengah jalan. Oleh karena itu, disarankan untuk menggunakan sertifikat otoritas tepercaya yang mengizinkan driver MongoDB juga memverifikasi identitas server.

Selain enkripsi, TLS/SSL dapat digunakan dalam autentikasi klien dan autentikasi internal anggota kumpulan replika dan kluster sharded melalui sertifikat.

Konfigurasi TLS/SSL untuk Klien

Ada berbagai pengaturan opsi TLS/SSL yang dapat digunakan dalam konfigurasi protokol ini.

Misalnya, jika Anda ingin terhubung ke instance Mongod menggunakan enkripsi, Anda akan memulai instance seperti,

mongo --ssl --host example.com --sslCAFile /etc/ssl/ca.pem

--ssl mengaktifkan koneksi TLS/SSL.

--sslCAFile menentukan file pem otoritas sertifikat (CA) untuk verifikasi sertifikat yang diberikan oleh mongod atau mongos. Oleh karena itu, shell Mongo akan memverifikasi sertifikat yang dikeluarkan oleh instance mongod terhadap file CA yang ditentukan dan nama host.

Anda mungkin juga ingin menghubungkan instans MongoDB yang memerlukan sertifikat klien. Kami menggunakan contoh kode di bawah ini

mongo --ssl --host hostname.example.com --sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem

Opsi --sslPEMKeyFile menentukan file .pem yang berisi sertifikat shell mongo dan kunci untuk ditampilkan ke instance mongod atau mongos. Selama proses koneksi:

Shell mongo akan memverifikasi apakah sertifikat berasal dari Otoritas Sertifikat yang ditentukan yaitu (--sslCAFile) dan jika tidak, shell akan gagal terhubung.

Kedua, shell juga akan memverifikasi jika nama host yang ditentukan dalam opsi --host cocok dengan SAN/CN dalam sertifikat yang diberikan oleh mongod atau mongos. Jika nama host ini tidak cocok dengan salah satu dari keduanya, maka koneksi akan gagal.

Jika Anda tidak ingin menggunakan sertifikat yang ditandatangani sendiri, Anda harus memastikan jaringan koneksi tepercaya.

Selain itu, Anda perlu mengurangi eksposur kunci pribadi, terutama di mana kumpulan replika/cluster sharded terlibat. Hal ini dapat dicapai dengan menggunakan sertifikat yang berbeda pada server yang berbeda.

Opsi tambahan yang dapat digunakan dalam koneksi adalah:

requireSSL:ini akan membatasi setiap server untuk hanya menggunakan koneksi terenkripsi TLS/SSL.

--sslAllowConnectionsWithoutCertificates:Ini memungkinkan validasi jika hanya klien yang memberikan sertifikat, sebaliknya jika tidak ada sertifikat, klien akan tetap terhubung dalam mode terenkripsi. Misalnya:

mongod --sslMode requireSSL --sslAllowConnectionsWithoutCertificates --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem

sslDisabledProtocols:opsi ini mencegah server menerima koneksi masuk yang menggunakan protokol tertentu. Ini dapat dilakukan dengan:

mongod --sslMode requireSSL --sslDisabledProtocols TLS1_0,TLS1_1 --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem

Mengenkripsi Data saat Nonaktif

Dari versi 3.2, MongoDB memperkenalkan opsi enkripsi asli untuk mesin penyimpanan WiredTiger. Akses ke data dalam penyimpanan ini oleh pihak ketiga hanya dapat dicapai melalui kunci dekripsi untuk mendekode data ke dalam format yang dapat dibaca.

Algoritma enkripsi cipher yang umum digunakan di MongoDB adalah AES256-GCM. Ia menggunakan kunci rahasia yang sama untuk mengenkripsi dan mendekripsi data. Enkripsi dapat diaktifkan menggunakan mode FIPS sehingga memastikan enkripsi memenuhi standar dan kepatuhan tertinggi.

Seluruh file database dienkripsi menggunakan enkripsi data Transparan (TDE) di tingkat penyimpanan.

Setiap kali file dienkripsi, kunci enkripsi pribadi yang unik dibuat dan baik untuk memahami bagaimana kunci ini dikelola dan disimpan. Semua kunci database yang dihasilkan kemudian dienkripsi dengan kunci master.

Perbedaan antara kunci database dan kunci master adalah bahwa kunci database dapat disimpan di samping data terenkripsi itu sendiri tetapi untuk kunci master, MongoDB menyarankan untuk disimpan di server yang berbeda dari data terenkripsi seperti kunci perusahaan pihak ketiga solusi manajemen.

Dengan data yang direplikasi, kriteria enkripsi tidak dibagikan ke node lain karena data tidak dienkripsi secara native melalui kabel. Seseorang dapat menggunakan kembali kunci yang sama untuk node, tetapi praktik terbaiknya adalah menggunakan kunci individual yang unik untuk setiap node.

Memutar Kunci Enkripsi

Kunci terkelola yang digunakan untuk mendekripsi data sensitif harus diputar atau diganti setidaknya setahun sekali. Ada dua opsi di MongoDB untuk mencapai rotasi.

Rotasi Master KMIP

Dalam hal ini, hanya kunci master yang diubah karena dikelola secara eksternal. Proses untuk memutar kunci seperti yang dijelaskan di bawah ini.

  1. Kunci master untuk anggota sekunder dalam kumpulan replika diputar satu per satu. Yaitu

    mongod --enableEncryption --kmipRotateMasterKey \ --kmipServerName <KMIP Server HostName> \--kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

    Setelah proses selesai, mongod akan keluar dan Anda harus memulai ulang sekunder tanpa parameter kmipRotateMasterKey

    mongod --enableEncryption --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem
  2. Kumpulan replika utama diturunkan:
    Menggunakan metode rs.stepDown(), primer dinonaktifkan sehingga memaksa pemilihan primer baru.

  3. Periksa status node menggunakan metode rs.status() dan jika primer menunjukkan telah diturunkan, putar kunci masternya. Mulai ulang anggota yang mengundurkan diri termasuk opsi kmipRotateMasterKey.

    mongod --enableEncryption --kmipRotateMasterKey \
      --kmipServerName <KMIP Server HostName> \
      --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem

Log

MongoDB selalu bekerja dengan file log untuk merekam beberapa status atau informasi tertentu pada interval yang berbeda.

Namun, file log tidak dienkripsi sebagai bagian dari mesin penyimpanan. Ini menimbulkan risiko bahwa instance mongod yang berjalan dengan logging dapat mengeluarkan data yang berpotensi sensitif ke file log hanya sebagai bagian dari logging normal.

Dari MongoDB versi 3.4, ada pengaturan security.redactClientLogData yang mencegah data yang berpotensi sensitif untuk dicatat di log proses mongod. Namun, opsi ini dapat memperumit diagnostik log.

Beberapa Sembilan Menjadi DBA MongoDB - Membawa MongoDB ke ProduksiPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan MongoDBUnduh secara Gratis

Kinerja Enkripsi di MongoDB

Enkripsi di beberapa titik menghasilkan peningkatan latensi sehingga menurunkan kinerja database. Ini biasanya terjadi ketika sejumlah besar dokumen terlibat.

Enkripsi dan dekripsi memerlukan lebih banyak sumber daya, oleh karena itu penting untuk memahami hubungan ini guna menyesuaikan perencanaan kapasitas yang sesuai.

Mengenai pengujian MongoDB, mesin penyimpanan terenkripsi akan mengalami latensi antara 10% hingga 20% pada beban tertinggi. Hal ini sering terjadi ketika pengguna menulis sejumlah besar data ke database sehingga mengakibatkan penurunan kinerja. Untuk operasi baca, penurunan performa dapat diabaikan, sekitar 5 - 10%.

Untuk praktik enkripsi yang lebih baik di MongoDB, mesin penyimpanan WiredTiger paling disukai karena kinerjanya yang tinggi, keamanan, dan skalabilitasnya. Lebih lanjut, ini mengoptimalkan enkripsi file database ke tingkat halaman yang memiliki manfaat besar dalam hal itu, jika pengguna membaca atau menulis data ke database terenkripsi, operasi throughput hanya akan diterapkan ke halaman tempat data disimpan daripada keseluruhan. basis data.

Ini akan mengurangi jumlah data yang perlu dienkripsi dan didekripsi untuk memproses satu bagian data.

Ringkasan

Keamanan data untuk informasi sensitif adalah suatu keharusan dan ada kebutuhan untuk melindunginya tanpa menurunkan kinerja sistem basis data.

MongoDB menyediakan prosedur enkripsi asli yang kuat yang dapat membantu kami mengamankan data kami baik saat diam maupun bergerak. Selain itu, prosedur enkripsi harus sesuai dengan standar yang ditetapkan oleh berbagai organisasi.

Mesin penyimpanan WiredTiger yang canggih memberikan opsi yang lebih baik karena keunggulannya yang terkait seperti kinerja tinggi, skalabilitas, dan keamanan. Saat mengenkripsi data dalam kumpulan replika, sebaiknya gunakan kunci master yang berbeda untuk masing-masing selain mengubahnya setidaknya setahun sekali.

Namun ketersediaan opsi enkripsi pihak ketiga, tidak ada jaminan bahwa penerapan Anda akan cocok dengan mereka dalam hal skalabilitas. Oleh karena itu, cukup bijaksana untuk menggunakan enkripsi tingkat basis data.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kesalahan koneksi Mongodb di dalam wadah buruh pelabuhan

  2. Pencarian Teks Penuh dan Sebagian MongoDB

  3. Model.find().toArray() mengklaim tidak memiliki metode .toArray()

  4. 10 pertanyaan untuk ditanyakan (dan dijawab) saat menghosting MongoDB di AWS

  5. Manajemen AWS:Cara Menghemat 30% Biaya Hosting MongoDB Anda