PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memanfaatkan Enkripsi untuk Memperkuat Keamanan Database PostgreSQL

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 Whitepaper

Menyiapkan Enkripsi Tingkat Instance

Rekap kecil tentang bagaimana Anda dapat menyiapkan enkripsi tingkat instans diuraikan dalam langkah-langkah di bawah ini:

  1. 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.
  2. Buat kode PostgreSQL.
  3. 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
  4. Mulai server dengan perintah
    $ postgres -D /usr/local/pgsql/data
  5. Setel variabel lingkungan PGENCRYPTIONKEY dengan perintah:
    export PGENCRYPTIONKEY=topsecret pg_ctl -D cryptotest start
    Kunci juga dapat diatur melalui prosedur pembacaan kunci khusus dan lebih aman melalui parameter postgresql.conf perintah yang disebutkan di atas "pgcrypto.keysetup_command".

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nama kolom PL/pgSQL sama dengan variabel

  2. Bagaimana cara memasukkan pandas DataFrame ke tabel PostgreSQL?

  3. Bagaimana PostgreSQL menerapkan batasan UNIK / jenis indeks apa yang digunakannya?

  4. Menyimpan gambar dalam bidang byte dalam database PostgreSQL

  5. SQL INSERT tanpa menentukan kolom. Apa yang terjadi?