Belajar Secret Management - Integrasi OpenBao dengan Aplikasi Web
Episode 10 of 21

Belajar Secret Management - Integrasi OpenBao dengan Aplikasi Web

Menghubungkan aplikasi web ke OpenBao lewat dua pendekatan: integrasi langsung dengan REST API dan client library berbahasa pemrograman memakai AppRole, atau integrasi tidak langsung dengan menginjeksi secret ke environment tanpa mengubah source code.

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

Pendahuluan

Sejauh ini semua bahasan berpusat di server OpenBao: engine, policy, auth method, dan lease. Episode 10 ini membawa secret keluar dari server menuju aplikasi web yang benar-benar memakainya — Node.js, Go, Python, hingga Laravel. Ada dua jalur besar: integrasi langsung di mana kode aplikasi meminta secret sendiri, dan integrasi tidak langsung di mana secret disuntikkan dari luar. Kalian akan melihat keduanya punya tempat masing-masing.

Dua Jalur Integrasi

Sebelum mendetail, bandingkan kedua pendekatan:

AspekDirect IntegrationIndirect Integration
Perubahan source codePerluTidak perlu
Sumber secretREST API / client libraryEnvironment / file
Kendali aplikasiPenuh, dinamisSedikit, statis di startup
Manajemen tokenAplikasi memegang tokenPihak luar (agent atau deploy)
Cocok untukAplikasi baru, microserviceAplikasi legacy, butuh cepat aman

Direct integration memberi fleksibilitas penuh — aplikasi bisa mengambil secret kapan saja, bahkan sesaat sebelum dipakai. Indirect integration menyelesaikan masalah dengan cepat tanpa menyentuh kode, tetapi secret hanya terisi sekali saat proses dimulai.

Direct Integration dengan REST API

Di akar semuanya, OpenBao adalah server HTTP. Setiap interaksi bisa dilakukan lewat REST API dengan endpoint berawalan http://127.0.0.1:8200/v1/ dan token dikirim lewat header X-Vault-Token. Contoh membaca secret:

Mengakses secret via REST API
curl --header "X-Vault-Token: s.xxxxx" \
  http://127.0.0.1:8200/v1/secret/data/app

Alur lengkapnya: aplikasi login (misalnya via AppRole) untuk mendapat token, lalu memakai token itu di header X-Vault-Token pada setiap request. Nilai secret dikembalikan sebagai JSON — mudah diparsing oleh bahasa apa pun. curl --header "X-Vault-Token: s.xxxxx" http://127.0.0.1:8200/v1/secret/data/app adalah inti dari direct integration.

Client Library per Bahasa

Daripada menyusun request HTTP mentah, sebagian besar bahasa punya client library yang menyamarkan REST API di balik fungsi sederhana:

BahasaLibrary
Node.jsnode-vault atau official Vault JavaScript client
Gogithub.com/hashicorp/vault/api
Pythonhvac
Laravel (PHP)hashicorp/vault-php atau REST API langsung

Contoh singkat memakai node-vault di Node.js:

Membaca secret dengan node-vault
const vault = require("node-vault")({
  endpoint: "http://127.0.0.1:8200",
  token: "s.xxxxx"
});
 
const result = await vault.read("secret/data/app");
console.log(result.data.data);

Pola yang sama berlaku di Go dengan vault.NewClient, di Python dengan sesi hvac.Client, dan di Laravel lewat service provider yang membungkus hashicorp/vault-php. Di balik layar semua client ini memanggil REST API yang sama — jadi konsep X-Vault-Token dan path v1/... tetap berlaku.

Direct Integration via AppRole

Karena aplikasi tidak punya manusia untuk login, kredensial AppRole dari episode 8 adalah pilihan standar. Urutannya:

Login AppRole dari aplikasi
bao write auth/approle/login \
  role_id="9c1f..." \
  secret_id="d4a8..."

Respons login berisi token yang TTL-nya diatur oleh role (token_ttl). Aplikasi menyimpan token itu di memori, memakainya untuk membaca secret, dan me-refresh sebelum TTL habis. Kombinasi AppRole plus client library adalah pola paling umum untuk microservice — dan ini adalah contoh integrasi langsung yang penuh.

Indirect Integration

Kadang aplikasi tidak bisa diubah — entah legacy, source code tertutup, atau tim tidak punya waktu. Untuk kasus ini, injeksi secret ke environment adalah jawabannya. Prinsipnya sederhana: secret diambil dari OpenBao di luar aplikasi, lalu disuntikkan sebagai variabel environment atau file saat aplikasi mulai.

Contoh hasil injeksi ke file .env:

Linux.env hasil injeksi
DB_USER=postgres
DB_PASSWORD=hVt3-9xK2mP
API_KEY=zlQ7-wR4bNc1

Aplikasi hanya perlu membaca process.env.DB_PASSWORD atau getenv("DB_USER") seperti biasa — ia tidak pernah tahu OpenBao itu ada. Jalur ini dipakai oleh deployment tools, skrip init, orchestrator, dan (seperti yang akan kita lihat di episode berikutnya) OpenBao Agent.

Note

Injeksi environment menyelesaikan "dari mana secret berasal", tetapi belum menyelesaikan "siapa yang menjaga secret tetap segar". Secret yang sudah tersuntik tetap hidup sampai proses di-restart — untuk rotasi otomatis, langkah selanjutnya adalah agent yang akan kalian pelajari di episode 11.

Memilih Jalur Berdasarkan Kondisi

Dua jalur itu bukan kompetisi — keduanya saling melengkapi dan dipilih berdasarkan kondisi:

  • Tim menguasai source code dan butuh secret dinamis — pilih direct integration; aplikasi mengambil kredensial baru setiap kali dibutuhkan.
  • Source code tidak bisa diubah dalam waktu dekat — pilih indirect integration; injeksi env menyelesaikan masalah hari ini.
  • Microservice baru lahir — mulai dari direct integration dengan AppRole dan client library agar rotasi kredensial otomatis.
  • Beban tim kecil — indirect integration mengurangi kode yang harus dipelihara, apalagi jika nanti diotomatisasi agent.

Patokan sederhananya: semakin dinamis kebutuhan secret-nya, semakin layak direct integration; semakin banyak aplikasi legacy, semakin masuk akal jalur tidak langsung.

Penutup

Pada episode 10 ini kalian menghubungkan aplikasi web dengan OpenBao lewat dua jalur: direct integration memakai REST API v1/... dengan header X-Vault-Token dan client library untuk Node.js, Go, Python, serta Laravel via AppRole; serta indirect integration yang menginjeksi secret ke environment tanpa menyentuh source code.

Inti yang harus dibawa pulang:

  • REST API adalah fondasinya — semua client library memanggil endpoint v1/... yang sama.
  • AppRole adalah pintu masuk aplikasi — role_id dan secret_id, token ber-TTL pendek.
  • Pilih sesuai kemampuan tim — direct untuk kendali penuh, indirect untuk kecepatan.
  • Injeksi env hanya menyegarkan saat restart — rotasi dinamis butuh lapisan berikutnya.

Di episode 11 berikutnya, lapisan itu hadir: OpenBao Agent — daemon yang login sendiri, memperbarui token, dan merender file konfigurasi aplikasi secara otomatis lewat template.

Belajar Secret Management - Integrasi OpenBao dengan Aplikasi Web | Belajar Secret Management dengan OpenBao