Compliance menuntut bukti: backup yang wajib disimpan tidak boleh bisa hilang. Episode ini membahas immutability dengan object lock, retensi compliance dengan BSL terpisah per policy, serta audit lewat log server dan event backup/restore agar jejak operasional terekam.

Di episode 6 kalian belajar TTL — backup otomatis dihapus setelah waktunya. Tapi ada skenario yang TTL tidak bisa penuhi: regulasi mewajibkan data disimpan sekian tahun, dan tidak boleh bisa dihapus — bahkan oleh admin dengan akses penuh. Di situlah episode 15 bekerja: mengubah Velero dari "alat backup yang rapi" menjadi sistem yang memenuhi compliance.
Analogi paling tepat adalah arsip notaris: dokumen penting tidak boleh bisa dirobek oleh siapa pun, termasuk pembuatnya sendiri. Object lock adalah "lemari arsip yang terkunci dari dalam" — begitu data masuk, tidak ada yang bisa menghapusnya sampai masa lock berakhir.
Object Lock (S3 / MinIO / GCS retention) membuat objek di bucket tidak dapat dihapus atau ditimpa selama periode tertentu. Level compliance bisa sangat ketat: bahkan root account sekalipun tidak bisa menghapus objek dalam masa retention.
Aktifkan Object Lock saat membuat bucket (S3 tidak mengizinkan mengaktifkannya setelah bucket dibuat):
aws s3api create-bucket \
--bucket velero-archive \
--create-bucket-configuration LocationConstraint=ap-southeast-1 \
--object-lock-enabled-for-bucketBSL punya field objectLock yang memberi tahu Velero bahwa backup di lokasi ini tidak boleh dihapus — Velero akan menolak operasi delete dan memberi peringatan saat TTL kedaluwarsa:
apiVersion: velero.io/v1
kind: BackupStorageLocation
metadata:
name: archive
namespace: velero
spec:
provider: aws
objectStorage:
bucket: velero-archive
prefix: backups
config:
region: ap-southeast-1
objectLock: true
accessMode: ReadWriteWarning
objectLock: true adalah pengakuan eksplisit bahwa backup di lokasi ini tidak akan pernah bisa dihapus sampai lock selesai. Baca dua kali sebelum mengaktifkan: kesalahan retention (misal lock 3 tahun saat data sudah tidak relevan) berarti objek menumpuk dan menambah biaya storage permanen.
Kebijakan yang berbeda butuh perlakuan berbeda:
Mencampur keduanya di satu bucket membuat policy tidak jelas dan sulit diaudit. Solusi Velero: BSL terpisah per policy, lalu backup diarahkan ke BSL yang tepat.
velero backup-location create ops \
--provider aws --bucket velero-ops --config region=us-east-1 --default
velero backup-location create archive \
--provider aws --bucket velero-archive \
--config region=ap-southeast-1velero schedule create daily-ops \
--schedule="0 2 * * *" --include-namespaces prod --ttl 720h \
--storage-location ops
velero schedule create monthly-archive \
--schedule="0 3 1 * *" --include-namespaces prod --ttl 26280h \
--storage-location archiveBackup bulanan ke bucket arsip dengan TTL 3 tahun (26280 jam) dan object lock di level bucket — inilah pola compliance yang umum.
Setiap backup punya TTL sendiri; untuk backup yang menjadi kewajiban compliance, pastikan TTL-nya konsisten dengan persyaratan regulasi — dan tercatat. Jangan andalkan hafalan:
velero backup getBackup dengan TTL lebih pendek dari persyaratan regulasi harus segera dikoreksi (buat ulang dengan TTL yang benar) — karena begitu TTL habis, objek dihapus otomatis.
Pola terkuat: TTL panjang + object lock + BSL arsip. TTL adalah aturan Velero; object lock adalah jaring pengaman fisik di storage. Jika ada bug yang menghapus backup, object lock tetap menahannya. Jika ada object lock yang keliru, TTL setidaknya membatasi jangka waktu kesalahan itu.
Semua operasi terekam di log pod server:
kubectl logs -n velero deploy/velero --tail=200Untuk audit jangka panjang, kirim log ke sistem observasi (Loki/ELK/CloudWatch). Gunakan konfigurasi log di velero install bila perlu, atau sidecar di deployment velero.
Event Kubernetes mencatat perubahan status setiap operasi:
kubectl get events -n velero --field-selector involvedObject.name=my-backupGrep untuk fase penting: Started, Completed, Failed, Expired. Event ini bisa dipakai untuk dashboard compliance "backup yang wajib simpan sudah selesai / gagal".
Tip
Bangun laporan compliance otomatis: cron/CI yang menjalankan velero backup get, memfilter backup compliance, dan membunyikan alert bila ada yang gagal atau TTL-nya menyimpang dari aturan. Laporan tercetak jauh lebih bernilai saat auditor bertanya "tunjukkan buktinya".
Inti yang harus dibawa pulang:
objectLock: true memberi tahu Velero agar tidak menghapus backup di lokasi itu.kubectl logs) dan event (kubectl get events), serta laporan otomatis.Di episode 16 selanjutnya kita menghadapi kenyataan pahit setiap operator: Troubleshooting & Debugging — velero backup describe --details, velero backup logs, dan velero bug, plus kasus umum seperti BSL invalid, snapshot gagal, node-agent crash, dan backup kopia pending.