Setelah memahami posisi Vault di ekosistem, saatnya membedah bagian dalam Vault: bagaimana storage backend dan Vault Core bekerja, alur request, proses initialization dan unsealing dengan Shamir's Secret Sharing, serta risiko root token.

Di episode 2 sebelumnya, kita sudah memetakan seluruh ekosistem secret management dan menyimpulkan bahwa Vault adalah pilihan tepat ketika kebutuhan sudah kompleks: multi-cloud, dynamic secrets, encryption-as-a-service, PKI, dan audit ketat. Nah, di episode 3 ini kita akan membuka kap mesin dan membedah arsitektur utama serta konsep keamanan Vault — dari storage backend, Vault Core, alur request, hingga proses initialization dan unsealing.
Mengapa episode ini penting? Karena Vault berbeda dari tool lain dalam satu hal fundamental: Vault mengunci dirinya sendiri demi melindungi datanya. Setiap kali server di-restart, Vault menolak melayani request sampai di-"unseal" — dan memahami kenapa hal ini dirancang begitu akan mengubah cara kalian melihat keamanan sistem secara keseluruhan. Di dunia kerja, kegagalan memahami arsitektur ini adalah akar dari hampir semua kesalahan operasional: operator yang kehilangan unseal keys, root token yang dibiarkan di production, atau storage backend yang dikonfigurasi salah.
Di episode ini kita akan membahas: pertama, arsitektur utama — storage backend vs Vault Core (Barrier) dan alur request; kedua, initialization & unsealing dengan Shamir's Secret Sharing, termasuk manual unseal dan pengenalan auto-unseal; ketiga, risiko root token dan praktik terbaik di production. Siapkan Vault CLI kalian, karena episode ini penuh dengan praktik langsung.
Sebelum melihat alur request, kita perlu paham dulu dua lapisan utama Vault: storage backend dan Vault Core (Barrier). Keduanya sering disalahpahami sebagai satu hal yang sama — padahal perbedaannya menentukan model keamanan Vault.
Storage backend adalah tempat penyimpanan data mentah Vault. Ia bisa berupa file di disk, konsul, atau Raft integrated storage. Ini bisa dianalogikan sebagai gudang — tempat semua barang (data terenkripsi) disimpan. Yang krusial: storage backend tidak pernah menyimpan data dalam bentuk plaintext. Seluruh data yang ditulis ke storage backend sudah terenkripsi oleh Vault Core.
Vault Core adalah otak Vault — tepatnya bagian yang disebut Barrier. Barrier adalah lapisan enkripsi yang melindungi seluruh data yang masuk dan keluar storage backend. Setiap write dienkripsi dengan kunci enkripsi data, dan setiap read didekripsi sebelum diteruskan ke secrets engine. Barrier ini bisa dianalogikan sebagai satpam gudang yang menggembok setiap barang masuk dan membuka gembok setiap barang keluar — tanpa kunci (master key yang di-unseal), satpam ini menolak beroperasi sama sekali.
┌────────────────────────────────────────────────┐
│ VAULT CORE │
│ Auth Methods → Policies → Secrets Engines │
│ ───────────────────────────── │
│ BARRIER (enkripsi/dekripsi semua data) │
└──────────────────────┬─────────────────────────┘
│ data terenkripsi
┌──────────────────────▼─────────────────────────┐
│ STORAGE BACKEND │
│ File / Consul / Raft (data tersandi, bukan │
│ plaintext) │
└─────────────────────────────────────────────────┘Important
Konsekuensi paling penting dari desain ini: bahkan penyerang yang berhasil mencuri seluruh isi storage backend tidak akan mendapatkan data yang bisa dibaca — yang ia dapat hanyalah ciphertext. Ini disebut defense in depth: aman berlapis, bukan aman di satu titik. Kunci untuk membukanya ada di luar storage, dipegang oleh para pemegang unseal keys.
Sekarang mari kita telusuri perjalanan sebuah request — misalnya vault kv get secret/api/database — dari client sampai kembali lagi. Alurnya melibatkan beberapa lapisan keamanan yang bekerja berurutan:
Client
│ (1) kirim token + request
▼
Auth Method ← (2) "Siapa kamu?" — memvalidasi identitas
│
▼
Policy Check ← (3) "Kamu boleh apa?" — evaluasi policy HCL
│
▼
Secrets Engine ← (4) "Data apa yang kamu minta?" — proses & beri data
│
▼
Storage Backend ← (5) "Simpan/baca data terenkripsi" (lewat Barrier)Mari kita bedah kelima langkah ini:
Tip
Cara mudah mengingat alur ini: Auth = identitas, Policy = izin, Engine = jenis data, Storage = penyimpanan. Setiap request lewat keempat lapisan itu secara berurutan — tidak ada satu pun yang bisa dilompati. Inilah mengapa Vault bisa menjanjikan "setiap akses di-audit": karena tidak ada jalan pintas.
Sekarang masuk ke bagian yang paling khas dari Vault — dan yang paling sering mengejutkan pemula: Vault lahir dalam keadaan terkunci. Mari kita pahami prosesnya dari awal.
Saat Vault server pertama kali berjalan (misalnya mode production kita setup di episode 0), ia berada dalam kondisi uninitialized — belum punya kunci, belum punya apa pun. Kita harus meng-initialize Vault untuk membuat "identitas kriptografis" pertamanya:
vault operator init
Unseal Key 1: 4fBvZ0QvK9hHlVY1Aq2mC3xE5rT6uI7oL8pM9nB0cV
Unseal Key 2: dE5rT6uI7oL8pM9nB0cV4fBvZ0QvK9hHlVY1Aq2mC3x
Unseal Key 3: mC3xE5rT6uI7oL8pM9nB0cV4fBvZ0QvK9hHlVY1Aq2mC
Unseal Key 4: pM9nB0cV4fBvZ0QvK9hHlVY1Aq2mC3xE5rT6uI7oL8
Unseal Key 5: t6uI7oL8pM9nB0cV4fBvZ0QvK9hHlVY1Aq2mC3xE5rT
Initial Root Token: hvs.Ga4y9JkL2mQ8zXcV1bN5wK3pR7dF6sH8jT0uY4aZ
Success! Vault is initializedOutput di atas adalah momen paling menentukan dalam hidup sebuah Vault. Ada dua jenis material rahasia di sini:
hvs.Ga4y...) — token dengan akses total ke Vault. Satu-satunya token yang bisa melakukan apa pun, termasuk menonaktifkan secrets engine dan membuat token lain.Caution
Output di atas hanya tampil satu kali dan tidak akan pernah ditampilkan lagi. Jika kalian kehilangan unseal keys dan root token setelah Vault di-restart, maka seluruh data di Vault hilang permanen dan tidak bisa dipulihkan — itulah konsekuensi dari desain "Vault tidak pernah menyimpan kuncinya". Simpan dengan aman di tempat terpisah (misal password manager atau HSM), dan jangan pernah menaruhnya bersama-sama.
Di balik output di atas ada algoritma bernama Shamir's Secret Sharing (SSS), ditemukan oleh Adi Shamir pada 1979. Prinsipnya elegan: sebuah rahasia (master key) dipecah menjadi N bagian (shares), dan untuk merekonstruksi rahasia itu dibutuhkan minimum K bagian (threshold).
Master Key
│ dipecah oleh Shamir's Secret Sharing
├──► Share 1 (Unseal Key 1)
├──► Share 2 (Unseal Key 2)
├──► Share 3 (Unseal Key 3)
├──► Share 4 (Unseal Key 4)
└──► Share 5 (Unseal Key 5)
Threshold = 3 → butuh MINIMAL 3 shares untuk membuka VaultMengapa desain ini begitu cerdas?
Warning
Ini konsep yang paling sering disalahpahami pemula: unseal keys bukanlah kunci enkripsi yang dipakai langsung untuk membuka data. Mereka adalah potongan teka-teki yang jika digabungkan cukup banyak, akan merekonstruksi master key — dan master key itulah yang digunakan untuk membuka Barrier. Semakin banyak share yang dikumpulkan, semakin mendekati "cukup" — bukan semakin "bagus".
Setiap kali Vault di-restart, ia kembali ke kondisi sealed: Barrier terkunci, dan semua request ditolak. Tugas operator adalah mengumpulkan K shares secara berurutan untuk merekonstruksi master key. Inilah yang disebut manual unseal:
vault operator unseal
Unseal Key (will be hidden): 4fBvZ0QvK9hHlVY1Aq2mC3xE5rT6uI7oL8pM9nB0cV
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Unseal Progress 1/3
Unseal Nonce a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5dPerhatikan transisinya: Unseal Progress 1/3 → 2/3 → saat share ketiga masuk, Sealed berubah menjadi false dan Vault mulai menerima request. Proses ini harus diulang setiap kali Vault restart — dan inilah mengapa manual unseal menjadi tantangan operasional nyata di production (bayangkan 3 server di data center, reboot listrik, dan seluruh tim harus berkumpul mengetikkan share).
Note
Dalam praktik production, manual unseal ini dilakukan oleh operator berbeda dari lokasi berbeda — satu share dari laptop si A, satu dari si B, satu dari si C. Ini memastikan tidak ada satu orang pun yang bisa meng-unseal Vault sendirian, dan seluruh proses bisa diaudit. Mari kita bandingkan kondisi sealed vs unsealed:
vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 5
Threshold 3
Version 1.18.3vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 5
Threshold 3
Version 1.18.3Tantangan operasional manual unseal melahirkan solusi modern: auto-unseal. Alih-alih manusia mengumpulkan share, Vault mempercayakan pembukaan Barrier-nya ke layanan KMS cloud yang sudah kita kenal dari episode 2 — AWS KMS, GCP Cloud KMS, atau Azure Key Vault.
storage "raft" {
path = "/vault/data"
}
seal "awskms" {
region = "ap-southeast-1"
kms_key_id = "arn:aws:kms:ap-southeast-1:123456789012:key/abc-1234"
}
listener "tcp" {
address = "0.0.0.0:8200"
}Cara kerjanya: saat Vault boot, ia memanggil KMS cloud untuk mendekripsi master key yang disimpan dalam bentuk terenkripsi. Tidak ada intervensi manusia — server restart, Vault otomatis unseal, request langsung dilayani. Kita akan membahas auto-unseal secara mendalam di episode 21.
| Aspek | Manual Unseal | Auto-Unseal |
|---|---|---|
| Keterlibatan manusia | Wajib setiap restart | Tidak perlu |
| Risiko | Kehilangan share = Vault mati permanen | Kehilangan akses KMS = Vault mati permanen |
| Recovery mode | Bisa dipakai saat KMS bermasalah | Perlu akses KMS cloud |
| Effort operasional | Tinggi (koordinasi banyak operator) | Rendah |
| Cocok untuk | On-premise, air-gapped, tidak ada KMS | Cloud, HA cluster, auto-scaling |
Tip
Prinsip dasarnya sama: Vault tetap tidak menyimpan kunci pembukanya di storage-nya sendiri. Auto-unseal hanya memindahkan "penjaga kunci" dari manusia ke KMS cloud. Perhatikan juga: manual unseal punya keunggulan recovery mode — kalau KMS sedang down, Vault auto-unseal bisa lumpuh total, sedangkan manual masih bisa dibuka manusia. Trade-off yang harus dipertimbangkan dengan bijak.
Material rahasia kedua dari proses init adalah root token (hvs.Ga4y... di awal). Ia adalah token dengan akses absolut — bisa melakukan apa pun di Vault tanpa hambatan policy apa pun. Mari kita bahas risiko dan praktik terbaiknya.
# Root token bisa dibuat ulang oleh operator jika masih ada
# unseal keys yang valid — inilah kenapa akses ke unseal keys
# juga sangat sensitif
vault operator generate-root -init
Nonce: a1b2c3d4-...
Started: truevault operator generate-root selama unseal keys masih ada — jadi mencabutnya tidak berarti "kehilangan akses selamanya", melainkan "menutup pintu lebar sementara".export VAULT_TOKEN='hvs.Ga4y9JkL2mQ8zXcV1bN5wK3pR7dF6sH8jT0uY4aZ'
vault token revoke hvs.Ga4y9JkL2mQ8zXcV1bN5wK3pR7dF6sH8jT0uY4aZ
Success! Revoked token (if it existed)Warning
Jika root token bocor dan tidak segera di-revoke, penyerang memiliki kunci total ke seluruh secret perusahaan. Inilah sebabnya di production yang mature, root token di-revoke segera setelah initial setup, dan semua aktivitas administratif beralih ke token ber-policy. Buatlah kebiasaan ini dari sekarang — bahkan di lab kalian.
Sebagai penutup teknis, ini kesalahan-kesalahan yang paling sering menghantui operator Vault pemula:
| # | Kesalahan | Konsekuensi | Pencegahan |
|---|---|---|---|
| 1 | Menyimpan unseal keys bersama-sama di satu tempat | Satu titik kompromi = akses penuh | Sebar ke orang/lokasi berbeda; threshold lebih dari 1 |
| 2 | Menyimpan unseal keys di storage yang sama dengan data Vault | Melanggar prinsip pemisahan kunci & data | Pisahkan fisik & logis |
| 3 | Kehilangan unseal keys / root token | Data Vault hilang permanen | Backup aman + HSM; lakukan disaster drill |
| 4 | Memakai root token untuk operasi harian | Tidak ada audit bermakna; risiko bocor | Revoke root, pakai token ber-policy |
| 5 | Mengira storage backend menyimpan plaintext | Salah menilai tingkat risiko penyitaan storage | Ingat: Barrier selalu mengenkripsi sebelum menulis |
Important
Aturan emas arsitektur Vault: kunci dan data tidak boleh hidup di tempat yang sama. Unseal keys adalah kunci gudang; data Vault adalah barang di gudang. Kalau keduanya disimpan di tempat yang sama, mencuri "satu tempat" itu berarti mencuri segalanya — dan desain seluruh arsitektur Vault runtuh. Ini bukan saran, melainkan syarat keamanan fundamental.
Di episode 3 ini kita sudah membedah bagian dalam Vault: perbedaan storage backend (gudang) vs Vault Core / Barrier (satpam penggembok), alur request lima lapis dari client hingga storage, proses initialization yang menghasilkan unseal keys dan root token, mekanisme Shamir's Secret Sharing (N shares, K threshold), manual unseal vs auto-unseal, serta risiko dan praktik terbaik pengelolaan root token.
Poin penting yang harus kalian bawa:
Sekarang kalian memahami kenapa Vault aman. Di episode 4 selanjutnya, kita mulai menyentuh bagian paling konkret: KV Secrets Engine — membandingkan KV v1 vs KV v2 dengan versioning, mengaktifkan secrets engine, dan mempraktikkan seluruh operasi vault kv (put, get, list, rollback, destroy, undelete). Inilah episode di mana kita benar-benar mulai "menyimpan rahasia" di Vault. Pastikan Vault dev mode kalian masih berjalan dan tetap semangat, karena dari sini perjalanan teknis yang sesungguhnya dimulai!