Belajar Secret Management - Lease Management, Renewal & Emergency Revocation
Episode 9 of 21

Belajar Secret Management - Lease Management, Renewal & Emergency Revocation

Mengelola siklus hidup secret dinamis di OpenBao: memahami Lease ID dan TTL, memperpanjang masa pakai dengan bao lease renew, serta mencabut akses seketika lewat bao lease revoke dan revoke by prefix ketika kredensial bocor.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Pada episode 8 kalian memperoleh token lewat berbagai auth method. Episode 9 ini membahas apa yang terjadi pada secret dinamis setelah ia lahir: setiap kredensial yang diterbitkan OpenBao — entah kredensial database dari episode 4 atau sertifikat dari episode 6 — membawa lease yang menentukan berapa lama ia hidup. Memahami lease berarti memahami kapan harus memperpanjang, dan yang lebih penting, bagaimana menghancurkan akses seketika saat dibutuhkan.

Memahami Lease dan TTL

Lease adalah kontrak waktu antara OpenBao dan pemegang secret. Setiap dynamic secret — kredensial yang dibuat khusus untuk kalian, seperti user Postgres dari database/creds/my-role — direpresentasikan dengan Lease ID unik dan TTL (Time To Live).

Membaca secret dinamis akan menampilkan metadata lease:

Membaca secret dinamis beserta lease
bao read database/creds/my-role

Output-nya memuat tiga hal penting:

  • lease_id — identitas unik kredensial, misalnya database/creds/my-role/NGQwYzA....
  • lease_duration — berapa detik lagi lease berlaku (TTL).
  • renewable — apakah lease bisa diperpanjang atau tidak.

Ketika TTL habis, OpenBao otomatis menghancurkan kredensial tersebut — user Postgres tadi dihapus dari database. Inilah mengapa secret dinamis begitu aman: masa hidupnya terbatas dan dikendalikan sistem, bukan dibiarkan mengendap selamanya.

Lease Secret vs Token TTL

Orang sering mencampur lease secret dengan TTL token. Padahal keduanya adalah konsep yang berbeda:

AspekLease Secret DinamisToken TTL
ObjekSatu instance kredensial (misal user DB)Sesi autentikasi pengguna atau mesin
IdentitasLease IDToken value
Perpanjanganbao lease renew <id>bao token renew
Pencabutanbao lease revoke <id>bao token revoke
Dampak habisKredensial dihancurkan sistemToken tidak bisa dipakai lagi

Intinya: token adalah pintu masuk, lease adalah kontrak isi rumah. Membatalkan token tidak otomatis menghancurkan lease yang sudah dipegang, dan sebaliknya. Keduanya perlu dikelola terpisah.

Perpanjangan Lease

Ketika sebuah job berjalan lebih lama dari TTL, kalian bisa memperpanjang lease selama ia masih renewable dan belum kedaluwarsa:

Memperpanjang lease
bao lease renew database/creds/my-role/NGQwYzA...

Untuk menetapkan durasi perpanjangan tertentu, tambahkan opsi -increment:

Perpanjangan dengan increment
bao lease renew -increment=1h database/creds/my-role/NGQwYzA...

bao lease renew -increment=1h database/creds/my-role/NGQwYzA... mencoba memperpanjang lease selama 1 jam — hasil akhirnya tetap dibatasi max_ttl dari engine atau role. Aplikasi yang baik memperbarui lease-nya secara berkala, bukan menunggu sampai hampir habis.

Pencabutan Akses Instan

Jika ada indikasi kredensial bocor, jangan menunggu TTL habis. Cabut seketika:

Mencabut satu lease
bao lease revoke database/creds/my-role/NGQwYzA...

Perintah itu langsung menghancurkan satu kredensial. Namun dalam insiden nyata, kalian biasanya tidak tahu persis Lease ID mana yang bocor — yang kalian tahu, kredensial database seluruh aplikasi bisa jadi terpapar. Untuk kasus ini gunakan revoke by prefix:

Revoke by prefix
bao lease revoke -prefix database/creds

bao lease revoke -prefix database/creds mencabut semua lease yang diawali prefix tersebut — artinya seluruh kredensial database yang pernah diterbitkan engine database langsung dimusnahkan. Ini adalah tombol darurat yang paling sering dipakai saat incident response.

Caution

Revoke by prefix sangat destruktif. Mencabut prefix database/creds akan memutus koneksi semua aplikasi yang memakai kredensial itu secara bersamaan. Pastikan aplikasi didesain untuk mengambil kredensial baru (retry dan re-request), bukan mengandalkan satu koneksi statis — kalau tidak, pemadaman total tidak terelakkan.

Memantau Lease Aktif

Sebelum mencabut, kalian perlu tahu lease apa saja yang sedang beredar. Semua lease bisa didaftarkan per prefix:

Mendaftar lease aktif
bao lease list database/creds
bao lease list database/creds/my-role

bao lease list database/creds menampilkan semua lease yang sedang aktif di bawah prefix tersebut. Ini sangat berguna saat incident: kalian bisa melihat berapa banyak kredensial yang terpapar sebelum memutuskan memakai revoke per-lease atau revoke by prefix. Kombinasikan dengan bao lease renew untuk memperpanjang hanya yang masih dibutuhkan.

Simulasi Skenario Kebocoran

Mari merangkai semuanya dalam satu alur insiden:

  1. Sebuah kredensial database bocor ke log aplikasi.
  2. Tim memutuskan semua kredensial dari engine database harus diganti.
  3. Jalankan bao lease revoke -prefix database/creds untuk menghancurkan semuanya.
  4. Setiap aplikasi yang meminta koneksi baru otomatis menerima user dan password baru dari database/creds/my-role.
  5. Kredensial lama sudah tidak valid lagi di Postgres — tidak ada lagi yang bisa memakainya.

Alur ini menunjukkan kekuatan sebenarnya dari secret dinamis: pencabutan massal yang instan, tanpa menyentuh satu pun file konfigurasi. Yang perlu kalian jaga adalah aplikasi siap menerima kredensial baru.

Penutup

Pada episode 9 ini kalian memahami lease sebagai kontrak waktu secret dinamis: struktur Lease ID dan TTL, perbedaan lease secret dengan TTL token, perpanjangan lewat bao lease renew, serta pencabutan instan dengan bao lease revoke dan revoke by prefix database/creds.

Inti yang harus dibawa pulang:

  • Setiap dynamic secret punya Lease ID dan TTL — setelah habis, kredensial dihancurkan sistem.
  • Perpanjang sebelum kedaluwarsa — lease yang sudah habis tidak bisa di-renew.
  • Revoke by prefix untuk insiden besar — satu perintah memusnahkan seluruh kelas kredensial.
  • Aplikasi harus siap mengambil kredensial baru — ketahanan bergantung pada retry, bukan koneksi statis.

Di episode 10 berikutnya, kita membawa semua konsep ini keluar dari server OpenBao menuju dunia nyata: integrasi aplikasi web dengan Node.js, Go, Python, dan Laravel — baik lewat REST API langsung maupun injeksi environment tanpa mengubah source code.