Membedah arsitektur OpenBao dari storage backend Raft dan Consul hingga barrier engine, proses inisialisasi dengan Shamir secret sharing, unsealing manual, auto-unseal via cloud KMS, dan praktik terbaik mengelola root token.

Di episode 1 kalian memahami mengapa OpenBao dipilih: open source, kompatibel dengan Vault, dan kaya fitur. Episode 2 ini masuk ke bagian paling fundamental sekaligus paling sering disalahpahami: apa yang terjadi di dalam OpenBao saat pertama kali dijalankan.
Dua konsep wajib paham di sini adalah storage backend (di mana data diletakkan) dan seal/unseal (bagaimana data dibuka kuncinya). Setelah episode ini, kalian akan tahu mengapa server OpenBao yang baru diinisialisasi selalu dimulai dalam kondisi sealed, dan mengapa unseal key harus dipegang oleh orang yang tepat.
Storage backend adalah tempat OpenBao menyimpan data persistennya — tetapi perlu ditekankan sejak awal: storage ini tidak pernah menyimpan data plaintext. Semua yang masuk melewati lapisan enkripsi barrier sebelum ditulis. Pilihan utama storage backend di produksi:
| Storage Backend | Kelebihan | Kekurangan | Kapan Dipakai |
|---|---|---|---|
| Raft Integrated Storage | Bawaan OpenBao, replikasi built-in, tidak butuh dependency eksternal | Butuh jumlah node ganjil untuk quorum | Standar rekomendasi untuk cluster modern |
| Consul | HA dan replikasi mapan, pemisahan data dan konsensus | Infrastruktur tambahan yang harus dioperasikan sendiri | Organisasi yang sudah memakai Consul |
| File | Sederhana, tanpa replikasi | Single point of failure | Lab dan pembelajaran saja |
| In-memory | Tercepat | Data hilang saat restart | Hanya dev mode |
Raft adalah pilihan paling masuk akal untuk sebagian besar tim karena OpenBao menangani konsistensi dan replikasi sendiri. Konsul tetap relevan di organisasi yang sudah memiliki infrastruktur Consul yang dioperasikan dengan baik. Pilihan ini akan kalian bedah lebih dalam di episode 15 tentang high availability.
Di tengah arsitektur OpenBao terdapat core — mesin utama yang memproses setiap request API. Salah satu komponen terpentingnya adalah barrier, lapisan enkripsi yang melindungi semua data yang masuk dan keluar dari storage.
Alur singkatnya begini: request datang ke core, dimuat dengan token dan policy, lalu saat data ditulis, barrier mengenkripsi data dengan master key sebelum disimpan ke storage backend. Saat dibaca, barrier mendekripsinya kembali. Karena enkripsi terjadi di barrier, bukan di storage, maka seburuk apapun backend storage-nya, data tidak pernah bocor dalam bentuk aslinya.
Saat server pertama kali dijalankan, OpenBao berada dalam kondisi uninitialized — belum punya master key sama sekali. Di sinilah bao operator init berperan.
Inisialisasi menghasilkan master key — kunci yang mengunci barrier. Masalahnya, menyimpan master key utuh di satu tempat justru menciptakan single point of failure. Jika hilang, seluruh data tidak bisa dibuka selamanya. Solusinya adalah Shamir's Secret Sharing.
Prinsip Shamir sederhana namun elegan: master key dipecah menjadi N potongan yang disebut unseal keys, dan untuk menyatukannya kembali dibutuhkan minimal K potongan. Skema ini ditulis sebagai N-of-K:
| Skema | Unseal Keys (N) | Threshold (K) | Makna Praktis |
|---|---|---|---|
| 3-of-5 | 5 | 3 | Tiga dari lima pemegang key cukup untuk unseal |
| 2-of-3 | 3 | 2 | Standar minimum untuk keamanan yang wajar |
| 1-of-1 | 1 | 1 | Semua kunci di satu orang — berisiko tinggi |
| 5-of-7 | 7 | 5 | Toleransi kehilangan dua key, tetap aman |
Semakin tinggi K, semakin aman — tapi semakin sulit saat benar-benar butuh unseal. Praktik umum di produksi: 3-of-5, dibagikan ke lima orang berbeda. Tidak ada satu orang pun yang bisa membuka OpenBao sendirian, tapi mayoritas selalu bisa membukanya.
Jalankan inisialisasi dengan skema yang diinginkan:
bao operator init -key-shares=5 -key-threshold=3Output akan menampilkan lima unseal keys dan satu root token. Simpan semuanya dengan aman — misalnya dibagi antar anggota tim di lokasi terpisah — karena output ini tidak akan pernah ditampilkan lagi.
Warning
Unseal keys dan root token hanya dicetak satu kali saat inisialisasi. Jangan simpan di file yang sama, jangan kirim lewat chat, dan jangan masukkan ke dalam repository. Di dunia nyata, kehilangan semua unseal keys berarti kehilangan seluruh data secret secara permanen.
Setelah inisialisasi, setiap kali server dimulai ulang, OpenBao masuk dalam kondisi sealed — barrier terkunci, data tidak bisa diakses. Untuk membukanya, kalian harus memasukkan unseal keys hingga mencapai threshold:
bao operator unseal
bao operator unseal
bao operator unseal
bao statusSetiap bao operator unseal meminta satu unseal key. Setelah K unseal key yang benar dimasukkan, status berubah menjadi Unsealed: true dan server siap melayani request. Sampai threshold tercapai, data tetap aman — tidak ada satu key pun yang cukup sendirian.
Perhatikan bahwa server yang sealed bukan berarti mati — endpoint status tetap merespons, karena itulah cara kalian tahu kondisi server. Yang terkunci adalah barrier di dalamnya.
Unseal manual setiap kali server reboot adalah beban operasional nyata — dan berbahaya, karena memaksa unseal keys dibawa ke mesin server. Solusinya adalah auto-unseal: master key dibungkus dengan kunci dari cloud KMS, sehingga saat server boot, OpenBao bisa membuka seal sendiri tanpa campur tangan manusia.
storage "raft" {
path = "/data/openbao"
}
seal "awskms" {
region = "ap-southeast-1"
kms_key_id = "alias/openbao-unseal"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = true
}
disable_mlock = falsePenyedia yang didukung antara lain AWS KMS, GCP Cloud KMS, dan Azure Key Vault. Keuntungannya bukan hanya kenyamanan: karena unseal keys tidak lagi disimpan di server, risiko pencurian kunci juga menurun drastis. Konsep auto-unseal ini akan diperdalam dengan konfigurasi lengkap di episode 16.
Saat inisialisasi, OpenBao juga mencetak root token — token dengan hak tanpa batas (privilege superuser). Di dev mode, root token memang dipakai untuk praktik. Di produksi, root token adalah ancaman yang harus ditangani dengan serius.
bao token revoke <root-token-id> begitu semua operasi awal selesai. Operasi normal tidak pernah membutuhkan root token.Important
Aturan emas produksi: root token hanya ada saat setup, lalu dicabut. Kebutuhan administratif sehari-hari ditangani token dengan policy yang dibatasi — topik yang akan kalian dalami di episode 7 dan 8.
Pada episode 2 ini, kalian memahami arsitektur utama OpenBao: storage backend dengan Raft dan Consul, barrier engine yang mengenkripsi semua data, inisialisasi dengan Shamir secret sharing N-of-K, unsealing manual dengan bao operator unseal, auto-unseal berbasis cloud KMS, serta manajemen root token yang ketat.
Inti yang harus dibawa pulang:
Di episode 3 berikutnya kita mulai memakai OpenBao untuk hal yang paling dasar: KV Secrets Engine — cara menyimpan dan membaca secrets dengan bao kv put, bao kv get, dan bao kv list, plus perbandingan lengkap KV v1 versus KV v2 beserta versioning, metadata, soft delete, dan permanent destroy. Siapkan server dev mode kalian, karena dari episode ini mulai ada secret yang benar-benar tersimpan!