Mengenal secrets engine, mengaktifkan KV v2, membandingkan KV v1 dan KV v2 mulai dari versioning, metadata, soft delete hingga permanent destroy, serta operasi CLI bao kv put, get, list, rollback, dan destroy.

Di episode 2 kalian sudah memahami inisialisasi dan unsealing — server OpenBao kini siap melayani request. Episode 3 ini membawa kalian ke fitur yang paling sering dipakai setiap hari: KV Secrets Engine, tempat menyimpan dan membaca secrets statis seperti kredensial aplikasi, API keys, dan konfigurasi sensitif.
Dua versi KV akan dibandingkan di sini: KV v1 yang sederhana tanpa riwayat, dan KV v2 yang membawa versioning, metadata, soft delete, undelete, hingga permanent destroy. Sebagian besar tim produksi memakai KV v2 — dan setelah episode ini kalian akan mengerti alasannya.
Sebelum menyimpan secret, OpenBao perlu tahu jenis secrets engine apa yang akan dipakai di sebuah mount path. Sebuah secrets engine pada dasarnya adalah modul yang menentukan bagaimana secrets disimpan dan diakses — KV untuk key-value statis, database untuk dynamic credentials, transit untuk enkripsi, PKI untuk sertifikat.
Mengaktifkan KV v2 pada path secret cukup satu perintah:
bao secrets enable -path=secret kv-v2
bao secrets listbao secrets enable -path=secret kv-v2 memasang engine KV versi 2 pada path secret. Perintah bao secrets list lalu menampilkan daftar engine yang aktif. Perhatikan bahwa path mount bisa apa saja — secret, myapp, atau nama lain — selama konsisten dipakai saat menyimpan dan membaca data.
Perbedaan fundamental kedua versi ini:
| Aspek | KV v1 | KV v2 |
|---|---|---|
| Riwayat versi | Tidak ada — nilai lama hilang ditimpa | Setiap penulisan menciptakan versi baru |
| Metadata | Tidak ada | Timestamp, version, deletion time tersimpan |
| Soft delete | Tidak ada | Nilai ditandai deleted, bisa dipulihkan |
| Undelete | Tidak ada | bao kv undelete mengembalikan versi |
| Permanent destroy | Overwrite nilai | bao kv destroy menghapus versi permanen |
| Path akses | secret/app | secret/data/app |
| Rollback | Tidak ada | bao kv rollback memulihkan versi lama |
KV v2 pada dasarnya adalah versi lengkap: versioning memberi jejak audit, soft delete memberi jaring pengaman kesalahan, dan destroy memberi kontrol penuh saat data benar-benar harus dihapus. Di sinilah kalian melihat keunggulan OpenBao dibandingkan sekadar file .env biasa.
Baik KV v1 maupun v2 sama-sama memakai perintah bao kv put untuk menulis dan bao kv get untuk membaca:
bao kv put secret/app username="budi" password="super-secret"
bao kv get secret/appOutput bao kv get akan menampilkan pasangan key-value beserta metadata-nya. Satu catatan penting: untuk KV v2, CLI otomatis menangani path data — kalian cukup menulis secret/app, OpenBao yang meneruskannya ke secret/data/app.
Untuk melihat kunci apa saja yang tersimpan di sebuah path dan menghapusnya:
bao kv list secret/
bao kv delete secret/appbao kv list secret/ menampilkan daftar kunci di level path tersebut. bao kv delete pada KV v2 melakukan soft delete — versi terakhir ditandai deleted, tapi riwayatnya masih tersimpan.
Keunggulan utama KV v2 terletak pada versioning. Setiap kali bao kv put dipanggil pada path yang sama, OpenBao mencatatnya sebagai versi baru:
bao kv put secret/app username="budi" password="v1-pass"
bao kv put secret/app username="budi" password="v2-pass"
bao kv get -version=1 secret/appVersi 1 menyimpan v1-pass, versi 2 menyimpan v2-pass. Untuk melihat nilai lama, tambahkan -version=1. Ini sangat berguna untuk audit: kalian selalu tahu kapan sebuah nilai berubah dan seperti apa nilainya sebelumnya.
Setiap versi membawa metadata yang bisa diperiksa:
bao kv metadata get secret/appMetadata menampilkan versi yang tersedia, waktu pembuatan, penghapusan, dan penguncian (lock) per versi. Saat sebuah versi di-soft delete, metadata mencatatnya sebagai deleted dengan waktu penghapusan — tapi data versi itu masih bisa dipulihkan.
Kesalahan menghapus bukan akhir cerita di KV v2. Selama versi belum di-destroy, versi yang di-soft delete bisa dikembalikan:
bao kv undelete -versions=2 secret/app
bao kv get secret/appbao kv undelete -versions=2 menandai versi 2 sebagai aktif kembali. Data yang tadinya tampak hilang kembali utuh — persis seperti memulihkan file dari recycle bin.
Tip
Kebiasaan yang baik di tim: sebelum memakai bao kv destroy, cek dulu metadata dengan bao kv metadata get. Soft delete bisa dipulihkan, permanent destroy tidak bisa. Pastikan benar-benar yakin sebelum menghapus permanen.
Jika versi terbaru ternyata salah — misalnya password yang di-overwrite oleh kesalahan manusia — rollback mengembalikan nilai dari versi lama:
bao kv rollback -version=1 secret/app
bao kv get secret/appbao kv rollback -version=1 menciptakan versi baru yang isinya sama dengan versi 1, tanpa menghancurkan riwayat. Jadi jejak audit tetap lengkap: terlihat jelas bahwa terjadi rollback, kapan, dan ke versi mana.
Ketika sebuah secret benar-benar harus dihilangkan — misalnya nilai lama yang sudah tidak dipakai dan justru berisiko jika tertinggal — gunakan bao kv destroy:
bao kv destroy -versions=1 secret/app
bao kv metadata get secret/appSetelah di-destroy, versi 1 dihapus dari storage secara permanen dan tidak bisa dipulihkan dengan cara apa pun. Metadata akan menunjukkan versi itu tidak lagi tersedia. Untuk menghapus seluruh data termasuk metadata, gunakan bao kv metadata delete secret/app atau hapus seluruh path dengan bao kv delete yang lebih dalam.
Warning
Bedakan jelas dua perintah ini: bao kv delete bersifat reversible (soft delete, bisa di-undelete), sedangkan bao kv destroy bersifat permanen. Salah memilih perintah saat produksi bisa berarti kehilangan data selamanya.
Pada episode 3 ini, kalian memahami konsep secrets engine dan cara mengaktifkan KV v2, membandingkan perbedaan mendasar KV v1 dan KV v2, serta menguasai seluruh operasi CLI mulai dari bao kv put, bao kv get, bao kv list, metadata, soft delete dan undelete, rollback, hingga permanent destroy.
Inti yang harus dibawa pulang:
-version, metadata get, dan rollback, riwayat secret selalu terlacak.data hanya urusan internal — CLI bao kv menangani pemetaan path otomatis.Di episode 4 berikutnya kita naik level dari secret statis ke Dynamic Database Secrets Engine — OpenBao membuat user dan password database secara on-demand, berlaku singkat, dan otomatis dihapus saat kedaluwarsa. Kalian akan melihat bagaimana paradigma kredensial berubah total: dari password statis yang bocor-bocoran menjadi kredensial sementara yang tidak pernah menunggu lama di server. Siapkan instance PostgreSQL atau MySQL kalian!