Harap Dicatat:Bagian dari blog berisi referensi dan contoh dari "MENUMUMKAN KETERSEDIAAN POSTGRESQL INSTANCE LEVEL ENCRYPTION" oleh CyberTec, sebuah perusahaan yang menyediakan dukungan, konsultasi, dan pelatihan untuk PostgreSQL.
Organisasi menangani berbagai jenis data termasuk informasi yang sangat penting yang perlu disimpan dalam database. Keamanan adalah aspek utama pertimbangan untuk memastikan data sensitif seperti catatan medis dan transaksi keuangan tidak jatuh ke tangan orang-orang dengan cara jahat. Selama bertahun-tahun, pengembang datang dengan berbagai langkah untuk meningkatkan integritas dan perlindungan data. Salah satu teknik yang paling banyak digunakan adalah enkripsi untuk mencegah pelanggaran data.
Sebanyak Anda mungkin telah menggunakan langkah-langkah perlindungan yang kompleks, beberapa orang mungkin masih mendapatkan akses ke sistem Anda. Enkripsi adalah lapisan keamanan tambahan. PostgreSQL menawarkan enkripsi pada tingkat yang berbeda selain memberikan fleksibilitas dalam melindungi data dari pengungkapan sebagai akibat dari administrator yang tidak dapat dipercaya, koneksi jaringan yang tidak aman, dan pencurian server database. PostgreSQL menyediakan opsi enkripsi yang berbeda seperti:
- Otentikasi Host SSL
- Mengenkripsi data di seluruh jaringan
- Enkripsi partisi data
- Enkripsi untuk kolom tertentu
- Enkripsi penyimpanan sandi
- Enkripsi sisi klien
Namun, semakin canggih strategi enkripsi yang Anda gunakan, semakin besar kemungkinan Anda akan terkunci dari data Anda. Selain itu, proses membaca tidak hanya akan sulit tetapi juga membutuhkan banyak sumber daya untuk kueri dan dekripsi. Opsi enkripsi yang Anda pilih bergantung pada sifat data yang Anda hadapi dalam hal sensitivitas. Diagram di bawah ini menggambarkan keseluruhan prosedur enkripsi dan dekripsi data selama transaksi server.
Artikel ini membahas berbagai cara di mana perusahaan dapat mengamankan informasi sensitif, tetapi poin utama yang menarik adalah enkripsi tingkat instans yang disebutkan sebelumnya.
Enkripsi
Enkripsi adalah praktik penyandian data sehingga tidak lagi dalam format aslinya dan tidak dapat dibaca. Ada 2 jenis data sebanyak database yang bersangkutan:data diam dan data bergerak. Ketika data disimpan dalam database, itu disebut sebagai data saat istirahat. Di sisi lain, jika klien, misalnya, mengirim permintaan ke database, jika beberapa data dikembalikan dan perlu sampai ke klien, maka itu disebut sebagai data bergerak. Kedua jenis data yang berbeda perlu dilindungi menggunakan teknologi serupa. Misalnya, jika aplikasi dikembangkan sedemikian rupa sehingga pengguna perlu mengirimkan kata sandi, kata sandi ini tidak akan disimpan dalam database sebagai teks biasa. Ada beberapa prosedur pengkodean yang digunakan untuk mengubah teks biasa ini menjadi beberapa string berbeda sebelum disimpan. Selain itu, jika pengguna perlu menggunakan kata sandi ini misalnya untuk sistem login, maka diperlukan cara untuk membandingkan kata sandi yang akan dikirimkan dalam proses dekripsi.
Enkripsi basis data dapat diimplementasikan dengan cara yang berbeda tetapi banyak pengembang gagal untuk memperhitungkan tingkat transportasi. Namun, pendekatan yang berbeda juga terkait dengan jebakan yang berbeda di antara waktu akses data yang melambat, terutama ketika memori virtual sedang banyak diakses.
Enkripsi Data saat Istirahat
Data saat istirahat berarti data tidak aktif yang disimpan secara fisik pada disk. Ketika datang ke hosting database di lingkungan cloud, di mana vendor cloud memiliki akses penuh ke infrastruktur, enkripsi mungkin merupakan ukuran yang baik untuk mempertahankan kontrol atas data. Beberapa strategi enkripsi yang dapat Anda gunakan dibahas di bawah ini.
Enkripsi Disk Penuh (FDE)
Konsep di balik FDE umumnya untuk melindungi setiap file dan penyimpanan sementara yang mungkin berisi bagian dari data. Ini cukup efisien terutama ketika Anda kesulitan memilih apa yang ingin Anda lindungi atau lebih tepatnya jika Anda tidak ingin kehilangan file. Keuntungan utama dengan strategi ini adalah tidak memerlukan perhatian khusus dari pengguna akhir setelah memiliki akses ke sistem. Pendekatan ini memiliki beberapa jebakan. Ini termasuk:
- Proses enkripsi dan dekripsi memperlambat waktu akses data secara keseluruhan.
- Data mungkin tidak dilindungi saat sistem aktif karena informasi akan didekripsi dan siap dibaca. Oleh karena itu, Anda perlu menggunakan beberapa strategi enkripsi lain seperti enkripsi berbasis file.
Enkripsi Berbasis File
Dalam hal ini, file atau direktori dienkripsi oleh sistem file kriptografi yang dapat ditumpuk itu sendiri. Di PostgreSQL, kami sering menggunakan pendekatan pg_crypto seperti yang dibahas dalam artikel ini.
Beberapa keuntungan dari enkripsi sistem file meliputi:
- Kontrol tindakan dapat ditegakkan melalui penggunaan kriptografi kunci publik
- Pengelolaan file terenkripsi secara terpisah sehingga membuat cadangan file yang diubah satu per satu bahkan dalam bentuk terenkripsi, daripada mencadangkan seluruh volume terenkripsi.
Namun, ini bukan metode enkripsi yang dapat diandalkan yang dapat Anda gunakan untuk data berkerumun Anda. Alasannya, beberapa solusi enkripsi berbasis file mungkin meninggalkan sisa file terenkripsi yang dapat dipulihkan oleh penyerang. Oleh karena itu, pendekatan kombinasi terbaik adalah menggabungkan ini dengan enkripsi disk penuh.
Enkripsi Tingkat Instance
Level instance menggunakan buffer sehingga semua file yang membentuk cluster PostgreSQL disimpan di disk sebagai enkripsi data-at-rest. Mereka kemudian disajikan sebagai blok dekripsi saat dibaca dari disk ke buffer bersama. Setelah menuliskan blok-blok ini ke disk dari buffer bersama, mereka kembali dienkripsi secara otomatis. Basis data pertama kali diinisialisasi dengan enkripsi menggunakan perintah initdb. Kedua, selama startup, kunci enkripsi diambil oleh server dengan salah satu dari dua cara ini; melalui parameter pgcrypto.keysetup_command atau melalui variabel lingkungan.
Unduh Whitepaper Hari Ini Pengelolaan &Otomatisasi PostgreSQL dengan ClusterControlPelajari tentang apa yang perlu Anda ketahui untuk menerapkan, memantau, mengelola, dan menskalakan PostgreSQLUnduh WhitepaperMenyiapkan Enkripsi Tingkat Instance
Rekap kecil tentang bagaimana Anda dapat menyiapkan enkripsi tingkat instans diuraikan dalam langkah-langkah di bawah ini:
- Periksa apakah Anda telah menginstal "contrib" menggunakan perintah rpm -qa |grep contrib untuk OS berbasis RedHat atau dpkg -l |grep contrib untuk OS Berbasis Debian. Jika tidak ada dalam daftar, instal dengan apt-get install postgresql-contrib jika Anda menggunakan lingkungan Berbasis Debian atau yum install postgresql-contrib jika Anda menggunakan OS Berbasis RedHat.
- Buat kode PostgreSQL.
- Inisialisasi cluster dengan membuat kunci enkripsi dan menjalankan perintah he initdb
read -sp "Postgres passphrase: " PGENCRYPTIONKEY export PGENCRYPTIONKEY=$PGENCRYPTIONKEY initdb –data-encryption pgcrypto --data-checksums -D cryptotest
- Mulai server dengan perintah
$ postgres -D /usr/local/pgsql/data
- Setel variabel lingkungan PGENCRYPTIONKEY dengan perintah:
Kunci juga dapat diatur melalui prosedur pembacaan kunci khusus dan lebih aman melalui parameter postgresql.conf perintah yang disebutkan di atas "pgcrypto.keysetup_command".export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
Ekspektasi Kinerja
Enkripsi selalu mengorbankan kinerja, karena tidak ada opsi tanpa biaya. Jika beban kerja Anda berorientasi IO, Anda mungkin mengharapkan kinerja yang jauh berkurang tetapi ini mungkin tidak terjadi. Terkadang pada perangkat keras server biasa, jika kumpulan data kurang dibagikan di buffer atau waktu tinggalnya di buffer kecil, kinerja yang dicapai mungkin dapat diabaikan.
Setelah melakukan enkripsi database saya, saya menjalankan beberapa tes kecil untuk memeriksa apakah enkripsi benar-benar mempengaruhi kinerja dan hasilnya ditabulasikan di bawah ini.
Beban Kerja | Tidak ada enkripsi | Dengan enkripsi | Biaya kinerja |
---|---|---|---|
Operasi penyisipan massal | 26 detik | 68s | 161% |
Baca-tulis pas ke buffer bersama (dengan rasio 1:3) | 3200TPS | 3068TPS | 4.13% |
Hanya baca dari buffer bersama | 2234 TPS | 2219 TPS | 0,68% |
Hanya baca tidak cocok dengan buffer bersama | 1845 TP | 1434 TPS | 22.28% |
Baca-tulis tidak sesuai dengan buffer bersama dengan rasio 1:3 | 3422 TPS | 2545 TPS | 25,6% |
Seperti yang digambarkan pada tabel di atas, kita dapat melihat bahwa kinerjanya tidak linier karena terkadang melonjak dari 161% menjadi 0,7%. Ini adalah indikasi sederhana bahwa kinerja enkripsi adalah beban kerja khusus selain sensitif terhadap jumlah halaman yang dipindahkan antara buffer bersama dan disk. Ini juga dapat mempengaruhi kekuatan CPU tergantung pada beban kerja yang terlibat. Enkripsi tingkat instans adalah opsi yang cukup layak dan pendekatan paling sederhana untuk sejumlah lingkungan.
Kesimpulan
Enkripsi data merupakan usaha penting terutama untuk informasi sensitif dalam manajemen database. Ada sejumlah opsi yang tersedia untuk enkripsi data sejauh menyangkut PostgreSQL. Saat menentukan pendekatan mana yang akan digunakan, penting untuk memahami data, arsitektur aplikasi, dan penggunaan data karena enkripsi mengorbankan kinerja. Dengan cara ini Anda akan dapat memahami:kapan harus mengaktifkan enkripsi, di mana data Anda terbuka dan di mana aman, yang merupakan pendekatan enkripsi terbaik untuk digunakan.