Episode pamungkas merangkai seluruh materi menjadi satu studi kasus nyata: merancang sistem secret management enterprise 100% open source, mulai dari cluster HA dengan auto-unseal, integrasi Kubernetes, kredensial database dinamis, enkripsi transit untuk data PII, hingga akses manusia dengan OIDC dan audit log ke Grafana Loki.

Episode 19 menutup fase troubleshooting, dan sekarang tibalah saat yang kalian tunggu-tunggu: episode 20 — episode pamungkas series ini. Sepanjang 19 episode kalian mempelajari potongan demi potongan: dari inisialisasi dan unseal, secrets engine, policy dan auth, integrasi aplikasi, Kubernetes, CI/CD, sampai high availability dan hardening. Episode terakhir ini menyatukan semua potongan itu ke dalam satu rancangan utuh: arsitektur production-grade untuk secret management terpadu skala enterprise yang berbasis 100% open source.
Kita akan membangun studi kasus perusahaan dengan kebutuhan nyata: cluster OpenBao yang selalu tersedia, aplikasi Kubernetes yang mendapat secret tanpa menyentuh kode, database yang memakai kredensial dinamis berumur pendek, data PII seperti NIK dan nomor kartu kredit yang terenkripsi di penyimpanan, akses manusia yang terotentikasi lewat SSO, serta jejak audit yang tercatat dan backup yang berjalan otomatis.
Sebelum masuk ke detail, berikut peta besar arsitektur yang akan dibangun:
| Layer | Komponen | Materi Sumber |
|---|---|---|
| Infrastructure | 3-node HA, Raft storage, AWS KMS auto-unseal | Episode 15, 16 |
| Kubernetes | Agent Sidecar Injector, kubernetes auth | Episode 12 |
| Database | Dynamic PostgreSQL credentials, TTL 1 jam | Episode 4 |
| Application | Transit encryption untuk PII | Episode 5 |
| Human and IaC | OIDC auth, OpenTofu provider, Loki audit, snapshot harian | Episode 8, 14, 17 |
Seluruh lapisan ini saling terhubung ke satu cluster OpenBao yang sama. Mari kita bangun satu per satu.
Fondasi arsitektur adalah 3-node OpenBao HA cluster menggunakan Raft integrated storage dan auto-unseal AWS KMS. Tiga node berarti cluster bertahan jika satu node mati, sementara auto-unseal memastikan setiap node terbuka otomatis setelah restart — tanpa manusia membawa kunci.
ui = true
storage "raft" {
path = "/etc/openbao/data"
node_id = "openbao-1"
retry_join {
leader_api_addr = "https://openbao-1.example.com:8200"
}
}
seal "awskms" {
region = "ap-southeast-1"
kms_key_id = "arn:aws:kms:ap-southeast-1:123456789012:key/abc123"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = "false"
tls_cert_file = "/etc/openbao/tls/server.crt"
tls_key_file = "/etc/openbao/tls/server.key"
}
disable_mlock = falseNode kedua dan ketiga hanya berbeda pada node_id dan alamat retry_join. Setelah semua node bergabung lewat bao operator raft join, cluster akan memilih satu leader. Semua prinsip dari episode 15 dan 16 — quorum, failover, dan auto-unseal — kini menjadi realitas di infrastruktur kalian.
Aplikasi di EKS atau GKE membutuhkan secret, tetapi tidak boleh menyimpannya sendiri. Dengan OpenBao Agent Sidecar Injector, setiap pod yang diberi anotasi otomatis menerima sidecar yang mengambil secret dan merendernya ke file di volume bersama. Autentikasinya memakai Kubernetes Auth Engine — pod membuktikan identitas lewat ServiceAccount JWT-nya.
metadata:
annotations:
openbao.org/agent-inject: "true"
openbao.org/role: "web-app"
openbao.org/agent-inject-secret-config: "secret/data/myapp"
openbao.org/agent-inject-file-config: "config.env"Sebelum itu, aktifkan dan konfigurasi auth kubernetes di sisi OpenBao:
bao auth enable kubernetes
bao write auth/kubernetes/config kubernetes_host="https://kubernetes.default.svc"Aplikasi kini membaca /bao/secrets/config yang di-render sidecar, diperbarui otomatis sesuai siklus hidup lease. Ini persis pola yang kalian pelajari di episode 12 — kode aplikasi bersih, secret selalu segar.
Bagian yang paling sering dijadikan tolok ukur keberhasilan: dynamic credentials PostgreSQL dengan TTL pendek. Setiap aplikasi yang butuh koneksi database meminta kredensial ke OpenBao, dan OpenBao membuat user beserta password sementara secara instan — hidup selama 1 jam, lalu dihapus otomatis.
bao secrets enable database
bao write database/config/postgres \
plugin_name="postgresql-database-plugin" \
connection_url="postgresql://{{username}}:{{password}}@db.internal:5432/app" \
allowed_roles="web-role"
bao write database/roles/web-role \
db_name="postgres" \
creation_statements="CREATE USER {{name}} WITH PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'" \
default_ttl="1h" max_ttl="24h"Ketika sebuah service memanggil bao read database/creds/web-role, OpenBao langsung membuat user sementara. Dengan TTL 1 jam, bahkan jika kredensial bocor, masa pakainya sangat pendek — dan karena setiap instance memakai kredensial yang berbeda, satu kebocoran tidak membuka pintu untuk semuanya. Prinsip dari episode 4 kini berjalan penuh di produksi.
Data sensitif seperti NIK dan nomor kartu kredit tidak boleh disimpan sebagai teks polos di database aplikasi. Dengan Transit Secrets Engine, OpenBao menjadi layanan enkripsi terpusat: aplikasi mengirim teks polos, menerima ciphertext, dan OpenBao tidak pernah menyimpan datanya — hanya kuncinya.
bao write -f transit/keys/pii-key
bao write transit/encrypt/pii-key plaintext=$(base64 <<< "NIK-3171xxxx")
bao write transit/decrypt/pii-key ciphertext="vault:v1:..."Backend aplikasi memanggil endpoint transit saat menyimpan dan membaca data PII. Kunci rotasi, versi, dan siklus hidupnya dikelola di satu tempat — OpenBao — bukan tersebar di kode tiap layanan. Kalian bisa menambahkan konvergen atau keyring bawaan transit sesuai kebutuhan. Inilah wujud nyata dari EaaS yang diperkenalkan di episode 5.
Terakhir, lapisan untuk manusia dan infrastruktur sebagai kode. Manusia tidak lagi memakai token statis: mereka masuk lewat OIDC ke SSO perusahaan, dan OpenTofu memakai Vault provider (sepenuhnya kompatibel dengan OpenBao) untuk mengambil secret saat provisioning. Semua aktivitas dicatat ke Grafana Loki, dan snapshot raft diambil setiap hari.
bao auth enable oidc
bao write auth/oidc/config oidc_discovery_url="https://sso.example.com" \
oidc_client_id="openbao" oidc_client_secret="***"
bao audit enable syslog
0 2 * * * bao operator raft snapshot save /backups/daily.snapSementara itu, di sisi IaC, provider OpenTofu membaca kredensial dinamis untuk provisioning dan menerbitkan sertifikat PKI internal sesuai kebutuhan. Audit device yang kalian aktifkan — baik ke file maupun syslog yang diteruskan ke Loki — merekam setiap langkah ini, memberi jejak lengkap untuk tim security.
Note
Jangan meng-copy-paste seluruh blok di atas secara mentah ke produksi. Setiap parameter — region KMS, alamat node, nama role, TTL, dan kebijakan OIDC — harus disesuaikan dengan lingkungan kalian dan diuji di staging lebih dulu. Arsitektur ini adalah cetak biru, bukan script final.
Arsitektur hebat tidak berarti apa-apa tanpa verifikasi. Gunakan checklist berikut sebagai bahan security audit terakhir sebelum dan sesudah go-live:
| Area | Item yang Diperiksa | Status |
|---|---|---|
| Cluster | Tiga node, quorum sehat, raft list-peers konsisten | |
| Unseal | Auto-unseal AWS KMS berhasil di semua node setelah restart | |
| Network | TLS wajib, tls_min_version setidaknya TLS 1.2 | |
| Memory | disable_mlock = false, LimitMEMLOCK memadai | |
| Auth | Root token dicabut, hanya auth method yang dibutuhkan aktif | |
| Policy | Least privilege, deny rule diuji, tidak ada policy superuser selain admin | |
| Database | TTL role pendek, user dinamis terhapus setelah lease berakhir | |
| K8s | Injector aktif di namespace produksi, secret tidak bocor ke log | |
| Transit | Kunci PII dirotasi berkala, data sensitif tersimpan sebagai ciphertext | |
| Observability | Audit log mengalir ke Loki, alert aktif untuk node sealed | |
| Backup | Snapshot harian berjalan, uji restore berkala di staging |
Important
Jadikan root token revocation dan uji restore snapshot sebagai dua item yang tidak bisa ditawar. Keduanya sering terlewat dan keduanya menentukan apakah arsitektur kalian benar-benar siap produksi atau hanya rapi di atas kertas.
Selamat, kalian telah menyelesaikan seluruh perjalanan series Belajar Secret Management dengan OpenBao — dari episode 0 yang menyiapkan environment dan memahami sejarah fork serta manifesto Linux Foundation, melewati arsitektur dan inisialisasi, KV, dynamic database secrets, transit, PKI, policy, authentication methods, lease management, integrasi aplikasi, agent dan auto-auth, Kubernetes, CI/CD, OpenTofu dan Ansible, high availability cluster, auto-unseal, audit logging dan hardening, migrasi dari HashiCorp Vault, troubleshooting, hingga arsitektur production-grade yang baru saja kalian rancang.
Episode terakhir ini merangkum semuanya menjadi satu cetak biru: 3-node HA cluster dengan Raft storage dan AWS KMS auto-unseal, Agent Sidecar Injector dengan kubernetes auth di EKS atau GKE, dynamic PostgreSQL credentials dengan TTL 1 jam, Transit untuk enkripsi NIK dan nomor kartu kredit, akses manusia melalui OIDC, provisioning dengan OpenTofu provider, audit log ke Grafana Loki, serta snapshot harian — semua dengan checklist kesiapan produksi dan security audit yang terverifikasi.
Inti yang harus dibawa pulang:
Namun ingat: menguasai OpenBao bukan akhir, melainkan pintu masuk. Prinsip yang kalian pelajari — least privilege, dynamic secrets, observability, dan defense in depth — berlaku sama di seluruh bidang keamanan lainnya. Teruslah menekuni topik-topik keamanan berikutnya di platform ini, karena di sanalah kalian akan menyempurnakan kemampuan yang sudah kalian bangun selama 21 episode ini. Sampai jumpa di series berikutnya!