Di episode ini kita akan membahas Identity Engine: bagaimana Vault menyatukan identitas yang sama dari berbagai auth method melalui Entity dan Alias, serta mewariskan policy lewat Groups. Kalian akan memahami pola multi-auth dan manajemen akses skala organisasi.

Setelah di episode 10 sebelumnya kita membahas authentication methods — token, userpass, AppRole, dan OIDC — kalian mungkin menyadari satu masalah halus namun krusial: setiap kali seorang user login lewat auth method yang berbeda, Vault memperlakukannya sebagai identitas yang terpisah. User yang sama login via userpass pagi hari dan via OIDC siang hari akan mendapat dua token berbeda, dua set policy berbeda, dan dua jejak audit yang tidak terhubung. Di organisasi nyata dengan Okta, GitHub, dan LDAP sekaligus, ini menjadi mimpi buruk governance.
Pada episode kali ini kita akan membahas Identity Engine — jawaban Vault atas masalah tersebut. Identity Engine memperkenalkan tiga konsep: Entity (identitas manusia/mesin yang sebenarnya), Alias (cara identitas tersebut tampil di tiap auth method), dan Group (kumpulan entitas untuk mewariskan policy). Dengan memahami ketiganya, kalian bisa merancang sistem akses yang terpadu: satu orang, banyak metode login, satu kumpulan hak akses, dan satu jejak audit.
Mari kita bedah satu per satu.
Coba bayangkan skenario ini di perusahaan kalian:
budi@company.com → mendapat policy dev-kv.budi dengan policy berbeda.Akibatnya: policy tidak terpadu, audit log tidak bisa menjawab pertanyaan "apa yang dilakukan Budi hari ini?" secara lengkap, dan jika Budi dipecat, admin harus mencabut akses di banyak tempat. Identity Engine menyatukan semua ini.
Konsep intinya:
| Konsep | Analogi | Definisi di Vault |
|---|---|---|
| Entity | Orang atau mesin yang sebenarnya | Identitas tunggal yang menyimpan policy (entity policies) |
| Alias | Kartu identitas yang berbeda untuk orang yang sama | Pemetaan antara auth method + ID user → satu entity |
| Group | Tim / departemen | Kumpulan entity yang mewariskan policy ke anggotanya |
+--------------- Entity: Budi Dwi (ID: 1a2b3c) ---------------+
| entity policies: [dev-kv] |
| |
| +-------- Alias 1 --------+ +-------- Alias 2 ---------+ |
| | auth: oidc | | auth: userpass | |
| | name: budi@company.com | | name: budi | |
+---+-------------------------+---+--------------------------+Sekarang, apakah Budi login dari Okta atau userpass, Vault mengenalinya sebagai Entity yang sama. Policy pada entity berlaku untuk keduanya, dan audit log pun mencatat keduanya ke identitas yang sama.
Biasanya entity dibuat otomatis oleh Vault saat seseorang pertama kali login lewat auth method tertentu. Namun untuk kontrol penuh, kita juga bisa membuatnya secara manual. Mari kita lihat keduanya.
1. Login pertama kali — Vault membuat entity + alias otomatis
vault login -method=userpass username=budi password=S3cur3Pa55word!vault identity lookupKey Value
--- -----
aliases [map[canonical_id:71a7... custom_metadata:<nil> creation_time:... id:... last_update_time:... merged_from_canonical_ids:<nil> metadata:<nil> mount_accessor:auth_userpass_8f2... mount_path:auth/userpass/ mount_type:userpass name:budi]]
canonical_id 71a7e5b1-...
creation_time 2026-08-02T10:00:00.000Z
id 71a7e5b1-...
last_update_time 2026-08-02T10:00:00.000Z
local false
metadata <nil>
name 2be7c3d0-... # auto-generated dari login
policies []Perhatikan bagian aliases: di dalamnya ada mount_type: userpass dan name: budi. Ini adalah Alias pertama milik Entity Budi. Entity name yang auto-generated (berupa UUID acak) biasanya akan di-rename manual agar lebih manusiawi — kita akan lakukan sebentar lagi.
2. Membuat entity manual (control penuh)
vault write -format=json identity/entity \
name="budi-dwi" \
metadata=team="backend-engineers"{
"data": {
"aliases": null,
"canonical_id": "71a7e5b1-...",
"creation_time": "2026-08-02T10:05:00.000Z",
"id": "71a7e5b1-...",
"last_update_time": "2026-08-02T10:05:00.000Z",
"name": "budi-dwi",
"policies": []
}
}3. Menambahkan alias userpass ke entity ini
vault write identity/alias \
name="budi" \
canonical_id="71a7e5b1-..." \
mount_accessor="auth_userpass_8f2..." # dari vault auth list -format=jsonSekarang, saat Budi login via userpass, Vault akan menemukan alias budi pada mount auth_userpass_8f2..., memetakannya ke Entity budi-dwi, dan menerapkan policy entity tersebut.
4. Menambah alias OIDC — menyatukan dua metode login
Langkah yang sama dilakukan untuk alias dari auth method OIDC:
vault write identity/alias \
name="budi@company.com" \
canonical_id="71a7e5b1-..." \
mount_accessor="auth_oidc_9d1..."Voilà — sekarang Budi yang login via userpass maupun OIDC adalah satu Entity. Policy apa pun yang kita tempelkan ke entity budi-dwi berlaku di kedua metode login.
Di episode 9 kita belajar tentang policy yang melekat pada token (token_policies). Sekarang ada lapisan baru: entity policies (identity_policies). Keduanya digabung ketika menentukan hak akses — ingat kembali union semantics: capabilities digabungkan. Tapi ada perbedaan penting dalam cara pengelolaannya:
| Jenis Policy | Melekat pada | Diatur oleh | Dampak pada login baru |
|---|---|---|---|
token_policies | Token (hasil login) | Role/auth method config | Policy ditentukan saat login |
entity_policies | Entity (identitas) | Admin identity engine | Berlaku untuk semua alias entity |
group_policies | Group (kumpulan entity) | Admin identity engine | Diwariskan ke seluruh anggota group |
vault token lookupKey Value
--- -----
accessor Z6Xb...
creation_time 1722747600
duration 768h
entity_id 71a7e5b1-...
expire_time 2026-09-02T10:00:00.000Z
id hvs.CAESILf...
identity_policies ["dev-kv"] # dari entity
issue_time 2026-08-02T10:00:00.000Z
meta map[username:budi]
policies ["default" "dev-kv"] # gabungan
renewable true
token_policies ["default"] # dari token/auth method
ttl 768hPerhatikan perbedaan identity_policies dan token_policies pada output di atas. policies adalah gabungan keduanya, dan itulah yang benar-benar dievaluasi saat request masuk.
Important
Keuntungan terbesar entity policies: kalian mengubah hak akses user sekali di entity, dan perubahan langsung berlaku di semua metode login — userpass, OIDC, LDAP — tanpa harus menyentuh konfigurasi masing-masing auth method.
Mengelola policy satu per satu untuk 500 karyawan tidak akan scalable. Di sinilah Group bekerja: kumpulan entity yang mewariskan policy ke semua anggotanya. Ada dua jenis group di Vault:
1. Internal Groups — dibuat manual oleh admin Vault.
vault write identity/group \
name="backend-engineers" \
policies="dev-kv,ci-access"Key Value
--- -----
id e3f4a1b2-...
name backend-engineers
policies ["ci-access" "dev-kv"]
type internalKemudian tambahkan entity Budi (dan rekan-rekannya) ke group:
vault write identity/group/id/e3f4a1b2-... \
member_entity_ids="71a7e5b1-...,9c8d7e6f-..."2. External Groups — dibuat otomatis saat auth method (LDAP/OIDC) mengirimkan klaim groups dari IdP.
vault write identity/group/name/okta-backend-engineers \
type="external" \
policies="dev-kv"vault read identity/group/name/okta-backend-engineersExternal groups bekerja dengan cara: saat user login via OIDC, IdP menyertakan klaim groups (misal backend-engineers dari Okta). Vault otomatis menautkan entity user ke external group yang namanya cocok dengan klaim tersebut, dan policy group pun diwariskan.
Tip
Kombinasi paling umum di produksi: entity untuk identitas personal, internal groups untuk grouping berbasis tim yang dikelola Vault, dan external groups untuk grouping yang sudah dikelola IdP. Prinsipnya: jangan duplikasi keanggotaan tim yang sudah ada di IdP — biarkan external group yang menyinkronkannya.
Karena policy bisa datang dari token, entity, dan group sekaligus, pertanyaan "kenapa user ini bisa akses path itu?" menjadi krusial saat audit. Vault menyediakan alat untuk menelusuri ini:
vault identity lookup-entity -name budi-dwiKey Value
--- -----
aliases [map[mount_path:auth/userpass mount_type:userpass name:budi] map[mount_path:auth/oidc mount_type:oidc name:budi@company.com]]
id 71a7e5b1-...
name budi-dwi
policies [dev-kv]
merged_entity_ids []
metadata map[team:backend-engineers]
groups [map[name:backend-engineers policies:[ci-access dev-kv]]]Output ini menjawab banyak pertanyaan audit: entity Budi punya policy dev-kv langsung, dan mewarisi ci-access + dev-kv dari group backend-engineers. Total hak akses Budi = gabungan policy entity + policy group + policy token saat login.
Dengan perintah di bawah ini, kalian bisa memeriksa apakah sebuah token punya hak akses ke path tertentu beserta sumbernya:
vault token capabilities hvs.CAESILf... secret/data/appread listMari kita rangkai seluruh konsep dalam satu skenario lengkap. Perusahaan kalian punya tim backend yang aksesnya harus konsisten, baik mereka login dari Okta (OIDC) maupun dari lab staging (userpass).
1. Persiapkan kedua auth method
vault auth enable userpass
vault auth enable oidc2. Buat policy bersama
path "secret/data/staging/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
path "secret/metadata/staging/*" {
capabilities = ["list"]
}vault policy write dev-kv policy/dev-kv.hcl3. Buat internal group dengan policy
vault write identity/group/name=backend-engineers \
policies="dev-kv"4. Buat userpass user dan entity
vault write auth/userpass/users/budi password="S3cur3Pa55word!"vault write identity/entity name="budi-dwi" metadata=team="backend-engineers"vault write identity/alias name="budi" \
canonical_id="<entity-id>" \
mount_accessor="<accessor-userpass>"vault write identity/alias name="budi@company.com" \
canonical_id="<entity-id>" \
mount_accessor="<accessor-oidc>"5. Masukkan entity ke group
vault write identity/group/id/<group-id> \
member_entity_ids="<entity-id>"Sekarang, apakah Budi login via userpass di lab maupun via Okta di produksi, hasilnya sama: token dengan policies: [default dev-kv] (dari group backend-engineers). Satu kali konfigurasi, berlaku untuk semua jalur login, dan tercatat dalam satu audit trail.
Seiring pertumbuhan organisasi, kalian akan membutuhkan cara untuk memetakan seluruh identitas yang terdaftar. Vault menyediakan perintah listing untuk ketiga level tersebut:
vault list identity/entity
vault list identity/alias
vault list identity/groupKeys
----
budi-dwi
siti-amelia
backend-service-01Penting untuk dipahami bahwa alias dan entity itu berbeda konsep:
| Pertanyaan | Alias | Entity |
|---|---|---|
| "Budi login dari mana?" | Dari userpass (name: budi) atau OIDC (name: budi@company.com) | Bukan milik alias — ini milik entity |
| "Siapa Budi sebenarnya?" | Tidak tahu; hanya tahu metode + identifier | Entity budi-dwi dengan metadata team: backend-engineers |
| "Policy mana yang berlaku?" | Tidak membawa policy | Membawa entity policies + mewarisi group policies |
Banyak tim memulai dengan memakai metadata entity untuk kebutuhan operasional, misalnya team, department, atau cost-center. Metadata ini bisa dibaca di audit log dan berguna untuk reporting, meskipun tidak mempengaruhi otorisasi — otorisasi hanya dipengaruhi oleh policy entity dan group.
Note
Perlu diingat juga bahwa service account (mesin) juga bisa punya entity. Aplikasi yang login via AppRole otomatis mendapatkan entity sendiri. Dengan begitu, kalian bisa menerapkan pola yang sama — kelompokkan service account dalam group, beri policy via group — dan mencabut akses satu mesin secara terpusat jika diperlukan.
| Kesalahan | Gejala | Solusi |
|---|---|---|
| Memberi policy langsung ke user di auth method | Policy tidak konsisten antar metode login | Pindahkan policy ke entity/group |
| Membuat userpass per orang tanpa entity | Login dari dua metode = dua identitas berbeda | Satukan via alias + canonical_id |
| Menempel policy ke external group secara manual | Policy hilang saat group tersinkron ulang dari IdP | Atur pemetaan di config auth method |
Tidak memeriksa identity_policies saat audit | Hak akses yang dianut diabaikan | Selalu cek vault token lookup lengkap |
| Duplikasi keanggotaan grup yang sudah di IdP | Drift keanggotaan antara Vault dan IdP | Gunakan external groups |
| Merge entity yang salah (identity merge) | Dua orang tergabung jadi satu akses | Verifikasi canonical_id sebelum merge |
Warning
Hati-hati dengan entity merge. Vault bisa menggabungkan dua entity menjadi satu (fitur untuk kasus duplikat), tapi ini permanen dan bisa membuat dua orang berbagi identitas jika salah sasaran. Selalu verifikasi canonical_id dan metadata sebelum melakukan merge.
Pada episode ini kita telah membahas Identity Engine: Entity sebagai identitas sejati manusia/mesin, Alias sebagai pemetaan identitas di tiap auth method, dan Group (internal & external) sebagai mekanisme mewariskan policy ke banyak entity sekaligus. Kita juga mempelajari perbedaan token policies vs entity policies vs group policies, dan bagaimana menggabungkannya untuk menciptakan pengalaman multi-auth yang terpadu: satu orang, banyak jalur login, satu set hak akses.
Inti dari episode ini: jangan biarkan auth method mendikte struktur hak akses kalian. Identity engine memisahkan "siapa user-nya" dari "lewat pintu mana dia masuk", sehingga governance jadi jauh lebih sederhana dan scalable.
Di episode 12 selanjutnya, kita akan membahas siklus hidup token dan secret: Lease, TTL, Renewal & Revocation — bagaimana setiap akses di Vault punya batas waktu, cara memperpanjangnya secara otomatis, dan bagaimana mencabut akses seketika saat terjadi kebocoran. Pastikan tetap semangat!