Membawa OpenBao ke dunia Infrastructure as Code: mengambil dynamic database credentials dan PKI certificate lewat Vault Provider pada OpenTofu atau Terraform, serta lookup plugin community.hashi_vault di Ansible playbook.

Di episode 13 kalian mengambil kredensial sementara di dalam pipeline CI/CD. Episode 14 melebarkan prinsip yang sama ke provisioning infrastruktur: OpenTofu atau Terraform mengambil dynamic credentials dan sertifikat PKI saat membangun resource, sementara Ansible mengambil rahasia langsung di dalam playbook. Hasilnya, tidak ada rahasia yang disalin manual ke dalam kode atau inventory.
HashiCorp menyediakan provider vault untuk Terraform. Karena OpenBao dibangun agar kompatibel dengan API Vault, provider yang sama dapat dipakai untuk OpenBao. Ini berarti seluruh kemampuan — termasuk dynamic credentials dan PKI — bekerja tanpa perlu provider khusus.
Provider diarahkan ke alamat OpenBao dan dikonfigurasi agar login dengan token:
terraform {
required_providers {
vault = {
source = "hashicorp/vault"
}
}
}
provider "vault" {
address = "https://bao.internal.example.com"
token = var.bao_token
}address menunjuk alamat OpenBao; token bisa berasal dari CI/CD atau dari proses bootstrap. Untuk produksi, hindari token statis — gunakan dynamic secret atau AppRole response-wrapping.
Ketika provisioning membangun infrastruktur, kalian bisa sekaligus meminta kredensial dynamic untuk aplikasi yang akan menempel padanya:
data "vault_database_creds" "app" {
backend = "database"
role = "app-role"
}
output "app_db_user" {
value = data.vault_database_creds.app.username
}
output "app_db_password" {
value = data.vault_database_creds.app.password
sensitive = true
}Setiap apply memicu pembuatan user database baru dengan TTL sesuai role. Nilai sensitif ditandai dengan sensitive = true agar tidak tercetak di output maupun log pipeline.
Untuk mesin baru yang butuh sertifikat, data source PKI mengeluarkan certificate dengan masa berlaku sesuai TTL role:
data "vault_pki_secret_backend_sign" "app" {
backend = "pki"
role = "server"
common_name = "app.internal.example.com"
ttl = "24h"
}
resource "local_file" "cert" {
filename = "/etc/ssl/app.pem"
content = "${data.vault_pki_secret_backend_sign.app.certificate}\n"
}Sertifikat ditulis langsung ke mesin saat provisioning, sehingga tidak perlu meng-copy-paste certificate secara manual atau menyimpannya di repository.
Untuk rahasia yang memang statis, misalnya konfigurasi aplikasi, gunakan data source vault_generic_secret. Data source ini membaca nilai dari path mana pun di OpenBao dan cocok untuk nilai yang tidak berubah-ubah.
Tip
Simpan token provider dengan hati-hati. Gunakan vault_generic_secret untuk rahasia statis, atau lebih baik lagi dynamic secret lewat vault_database_creds — sehingga kredensial tidak pernah mengendap di state file.
Untuk pekerjaan konfigurasi yang sifatnya imperatif, Ansible menyediakan lookup plugin community.hashi_vault. Lookup ini dieksekusi saat playbook dikompilasi, sehingga nilainya tersedia untuk dijadikan variabel, templat, atau argument modul.
- hosts: webservers
vars:
db_password: "{{ lookup('community.hashi_vault.vault_kv2_get',
'secret/data/app',
url='https://bao.internal.example.com',
token=api_token) }}"
tasks:
- name: Tulis konfigurasi aplikasi
ansible.builtin.template:
src: app.env.j2
dest: /etc/app/app.envLookup vault_kv2_get membaca secret dari KV v2 engine. Nilainya dikembalikan sebagai objek; untuk mengambil field tertentu, akses dengan result.data.data.db_password bila perlu.
| Aspek | OpenTofu / Terraform | Ansible |
|---|---|---|
| Kapan dijalankan | Saat plan dan apply provisioning | Saat playbook berjalan |
| Mekanisme | Provider vault dan data source | Lookup plugin community.hashi_vault |
| Penggunaan umum | Dynamic DB creds, PKI saat build resource | Variabel untuk konfigurasi host |
| Kredensial di state | Nilai tersimpan di state file | Nilai hanya ada saat runtime |
Garis besarnya: OpenTofu atau Terraform cocok saat rahasia ikut lahir bersama resource yang diprovision; Ansible cocok saat rahasia dipakai untuk konfigurasi setelah mesin hidup.
Pada episode 14 ini, kalian memahami penggunaan provider vault pada OpenTofu dan Terraform untuk mengambil dynamic database credentials dan PKI certificate saat provisioning, mengenal vault_generic_secret untuk rahasia statis, serta lookup plugin community.hashi_vault.vault_kv2_get pada Ansible playbook.
Inti yang harus dibawa pulang:
vault kompatibel dengan OpenBao berkat kesetaraan API.Di episode 15 berikutnya, kita naik ke tingkat arsitektur: membangun OpenBao High Availability cluster dengan Raft integrated storage dan memahami peran active serta standby node.