Mengenal Transit Secrets Engine sebagai Encryption-as-a-Service, membuat encryption key, mengenkripsi data sensitif dengan base64 plaintext, mendekripsinya kembali, dan memahami mengapa OpenBao tidak menyimpan data.

Di episode 4 kalian melihat OpenBao membuat kredensial database dinamis. Episode 5 ini menghadirkan peran yang berbeda: Transit Secrets Engine, atau Encryption-as-a-Service. Kali ini OpenBao tidak menyimpan secret apa pun — dia bertindak sebagai mesin enkripsi yang melayani aplikasi kalian lewat API.
Transit menjawab masalah yang sering dihadapi tim backend: mengenkripsi data sensitif dengan benar itu sulit. Algoritme, mode enkripsi, manajemen kunci, rotasi — semua bisa salah dengan mudah. Transit memindahkan seluruh kompleksitas itu ke OpenBao, sementara aplikasi cukup memanggil satu endpoint.
EaaS adalah model di mana enkripsi dan dekripsi disediakan sebagai layanan terpusat. Aplikasi mengirimkan data, OpenBao mengembalikan ciphertext — atau sebaliknya — dan data itu sendiri tidak pernah disimpan di OpenBao. OpenBao hanya memegang kunci, bukan data.
Bayangkan data sensitif seperti nomor kartu kredit, NIK, atau data kesehatan. Alih-alih setiap tim menulis logika enkripsi sendiri dengan kunci yang dikelola masing-masing, seluruh organisasi memakai satu service kriptografi terpusat dengan kebijakan yang seragam.
Bandingkan dua pendekatan ini:
| Aspek | Enkripsi di Aplikasi | Transit EaaS |
|---|---|---|
| Manajemen kunci | Tersebar per aplikasi/tim | Terpusat di OpenBao |
| Rotasi kunci | Manual, rawan terlewat | Otomatis tanpa mengubah data |
| Standarisasi | Beragam implementasi | Satu layanan, satu kebijakan |
| Audit | Sulit | Terlacak via audit log |
| Data di OpenBao | Tidak relevan | Tidak pernah disimpan |
Dengan EaaS, kunci yang sama dapat dipakai oleh puluhan layanan tanpa satu pun dari mereka yang pernah melihat atau menyimpan kunci tersebut.
Seperti secrets engine lainnya, transit harus diaktifkan terlebih dahulu pada sebuah mount path:
bao secrets enable transit
bao secrets listSetelah aktif di path default transit, kalian bisa langsung membuat kunci.
Kunci adalah entitas inti di transit. Buat satu kunci untuk aplikasi kalian:
bao write -f transit/keys/my-app-key
bao read transit/keys/my-app-keybao write -f transit/keys/my-app-key membuat kunci bernama my-app-key. Output bao read menampilkan detail seperti jenis kunci, versi kunci, dan waktu pembuatan. Transit mendukung beberapa tipe kunci — mulai dari aes256-gcm96 untuk enkripsi simetris umum, hingga chacha20-poly1305, dan jenis asimetris seperti ed25519 untuk penandatanganan.
Sekarang saatnya mengenkripsi data sensitif. Transit meminta plaintext dalam format base64:
bao write transit/encrypt/my-app-key \
plaintext=$(echo "data-sensitif" | base64)Perhatikan alurnya: echo "data-sensitif" | base64 mengubah plaintext menjadi base64, lalu hasilnya dikirim sebagai nilai plaintext. OpenBao mengenkripsinya dengan kunci my-app-key dan mengembalikan ciphertext seperti ini:
Key Value
--- -----
ciphertext vault:v1:8Gh3hRcDvV2eK9mLpQ4sT1xUyZwB5aCbD6...Awalan vault: pada ciphertext menandakan format dan versi kunci yang dipakai — informasi yang dibutuhkan transit untuk mendekripsi kembali. Ciphertext inilah yang boleh disimpan aplikasi di database: bahkan jika database bocor, data tetap aman selama kunci di OpenBao tidak ikut terbawa.
Tip
Kebiasaan yang benar: simpan ciphertext di database aplikasi, jangan simpan plaintext. OpenBao tidak menyimpan data kalian, jadi satu-satunya tempat data tersimpan adalah milik aplikasi — pastikan yang tersimpan di sana sudah terenkripsi.
Saat data perlu dibaca kembali — misalnya menampilkan nomor kartu di halaman profil — aplikasi mengirim ciphertext ke transit untuk didekripsi:
bao write transit/decrypt/my-app-key \
ciphertext="vault:v1:8Gh3hRcDvV2eK9mLpQ4sT1xUyZwB5aCbD6..."Output berupa plaintext dalam base64. Kalian tinggal mengubahnya kembali menjadi teks asli dengan perintah sebaliknya, misalnya echo "<base64>" | base64 -d. Kunci yang sama yang dipakai untuk enkripsi diperlukan untuk dekripsi — inilah inti enkripsi simetris.
Inilah keunggulan terbesar transit sekaligus jawaban atas pertanyaan yang sering muncul: mengapa aman memberikan data sensitif ke OpenBao?
Kombinasi inilah yang membuat transit ideal untuk kepatuhan seperti PCI DSS atau UU Perlindungan Data Pribadi: enkripsi standar tinggi, kunci terpusat, dan data tidak mengendap di layanan pihak ketiga.
Note
Transit bukan pengganti KV engine. KV menyimpan secrets untuk dibaca aplikasi; transit hanya melayani operasi kriptografi. Gunakan keduanya sesuai perannya — KV untuk menyimpan, transit untuk mengenkripsi.
Pada episode 5 ini, kalian memahami konsep Encryption-as-a-Service dan mengapa model ini dipilih organisasi modern, mengaktifkan transit engine, membuat encryption key dengan bao write -f transit/keys/my-app-key, mengenkripsi data dengan plaintext base64, mendekripsinya kembali, dan memahami alasan data sensitif tidak pernah disimpan di OpenBao.
Inti yang harus dibawa pulang:
Di episode 6 berikutnya kita memakai OpenBao untuk peran yang sangat berbeda: PKI Secrets Engine — menjadikan OpenBao sebagai Certificate Authority internal yang menerbitkan sertifikat TLS on-demand dengan TTL pendek, termasuk mempraktikkan bao write pki_int/issue/my-role common_name="api.internal.local". Sertifikat SSL/TLS untuk layanan internal akan otomatis terbit, kedaluwarsa, dan berganti tanpa campur tangan manusia. Sampai bertemu di episode 6!