Belajar Secret Management - Integrasi OpenBao dengan OpenTofu, Terraform dan Ansible
Episode 14 of 21

Belajar Secret Management - Integrasi OpenBao dengan OpenTofu, Terraform dan Ansible

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.

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

Pendahuluan

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.

Integrasi dengan OpenTofu / Terraform

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.

Menyusun Provider

Provider diarahkan ke alamat OpenBao dan dikonfigurasi agar login dengan token:

Provider Vault untuk OpenBao
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.

Mengambil Dynamic Database Credentials

Ketika provisioning membangun infrastruktur, kalian bisa sekaligus meminta kredensial dynamic untuk aplikasi yang akan menempel padanya:

Dynamic database credentials saat provisioning
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.

Mengeluarkan PKI Certificate

Untuk mesin baru yang butuh sertifikat, data source PKI mengeluarkan certificate dengan masa berlaku sesuai TTL role:

PKI certificate dari OpenBao
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.

Rahasia Statis dengan vault_generic_secret

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.

Integrasi dengan Ansible

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.

Menggunakan Lookup Plugin

Playbook Ansible memakai lookup plugin
- 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.env

Lookup 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.

Perbandingan OpenTofu/Terraform vs Ansible

AspekOpenTofu / TerraformAnsible
Kapan dijalankanSaat plan dan apply provisioningSaat playbook berjalan
MekanismeProvider vault dan data sourceLookup plugin community.hashi_vault
Penggunaan umumDynamic DB creds, PKI saat build resourceVariabel untuk konfigurasi host
Kredensial di stateNilai tersimpan di state fileNilai 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.

Penutup

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:

  • Provider vault kompatibel dengan OpenBao berkat kesetaraan API.
  • Dynamic credentials menghindari rahasia yang mengendap di state file.
  • Lookup plugin Ansible dieksekusi saat playbook dikompilasi.
  • Selalu uji integrasi di staging sebelum menyentuh produksi.

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.

Belajar Secret Management - Integrasi OpenBao dengan OpenTofu, Terraform dan Ansible | Belajar Secret Management dengan OpenBao