Melindungi data storage dari tiga sudut: enkripsi at rest dengan LUKS/dm-crypt di server, enkripsi in transit dengan NFS sec=krb5p, enkripsi di level aplikasi Laravel, serta strategi backup dan key rotation menuju DR yang siap uji

Keamanan jaringan di episode 14 melindungi akses; episode 15 melindungi data. Kata "encryption" sering disederhanakan, padahal ada beberapa lapis yang berbeda: data saat disimpan di disk (at rest), data saat menyeberangi jaringan (in transit), dan format data di dalam aplikasi (at application level).
Ketiganya menjawab ancaman berbeda. Kita terapkan semuanya, sesuai skala kebutuhan.
Enkripsi at rest melindungi disk fisik yang dicuri atau dilepas dari server. Pada sistem Linux modern, LUKS adalah standar:
sudo cryptsetup luksFormat /dev/sdb
sudo cryptsetup open /dev/sdb nfs-storage
sudo mkfs.ext4 /dev/mapper/nfs-storage
sudo mount /dev/mapper/nfs-storage /srv/k8s-sharedUntuk disk besar, susun LVM di atas LUKS lalu buat logical volume. Pastikan crypttab dan fstab menyusun autounlock yang aman (mis. keyfile di vault, bukan menempel di server).
Note
Enkripsi at rest bukan pengganti kontrol akses — ia melindungi disk yang lepas fisik/pencurian, bukan user yang sah. Kombinasikan dengan NetworkPolicy (episode 14) untuk pertahanan berlapis.
sec=krb5pNFS mengirim data secara plaintext secara default. Untuk melindungi transport, NFS v4.1+ menawarkan sec=krb5p — enkripsi penuh via Kerberos/GSSAPI:
/srv/k8s-shared 192.168.10.21(rw,sec=krb5p,sync,no_subtree_check)Persyaratan: ada KDC (Key Distribution Center) Kerberos di network, dengan principal untuk server (nfs/server.fqdn) dan tiap client. Ini langkah yang sah untuk jaringan tidak tepercaya; untuk LAN kampus/lab, banyak tim memilih krb5i (integritas saja) atau tetap plaintext.
Laravel memberi tool enkripsi sendiri. Untuk file sensitive (misal dokumen private user), enkripsi sebelum ditulis ke disk:
use Illuminate\Support\Facades\Crypt;
Storage::put('private/doc.pdf', Crypt::encryptString($pdfContent));Dekripsi saat membaca:
$content = Crypt::decryptString(Storage::get('private/doc.pdf'));Prinsipnya: jangan simpan secrets di storage publik. File .env, key, dan token tidak pernah masuk ke folder media — tetap di Secret Kubernetes.
Warning
Crypt::encryptString menggunakan APP_KEY dari .env. Hilangnya APP_KEY = hilangnya semua file terenkripsi. Simpan kunci di Secret, dan cadangkan terpisah dari cluster.
Enkripsi tidak menyelamatkan dari kehilangan data — backup yang menyelamatkan. Dua pendekatan:
rsync atau restic berjadwal ke lokasi offsite.rsync -a --delete -e ssh /srv/k8s-shared/ backup-user@offsite:/backup/nfs/Jangan lupa menguji restore secara berkala — backup yang tidak pernah diuji adalah harapan belaka.
APP_KEY/DB password jangan mengorbankan file lama — rencanakan migrasi terenkripsi.Pada episode 15 ini, data kalian kini terlindungi dari tiga sudut:
Inti yang harus dibawa pulang:
sec=krb5p di ekspor (butuh Kerberos/KDC).Crypt::encryptString sebelum menyimpan file sensitive.rsync/restic offsite + Velero (episode 21).Di episode 16 selanjutnya kita akan mengelola pertumbuhan data: resize volume online dengan allowVolumeExpansion, mount options NFS yang optimal (hard, timeo, retrans), monitoring I/O dengan nfsstat dan iostat, serta optimasi performa end-to-end. Sampai jumpa di episode 16!