Mengelola grup dan peran di Keycloak: membuat grup berjenjang, membedakan realm roles dan client roles, memahami composite roles dan role mapping, serta merancang authorization dengan RBAC, ABAC, dan group-based permission.

Di episode 17 kalian menyambungkan Keycloak dengan sistem eksternal lewat SCIM sehingga user ter-provisioning otomatis dari sistem HR. Episode 18 ini turun satu tingkat ke fondasi yang menentukan apa yang boleh dilakukan user: groups dan roles. Grup mengelompokkan user, peran memberi izin, dan keduanya bertemu di role mapping. Kalian akan melihat perbedaan realm roles dan client roles, cara kerja composite roles, hierarki grup, hingga pola authorization RBAC, ABAC, dan group-based permission.
Grup adalah wadah user yang berbagi kesamaan, seperti divisi, lokasi, atau level akses. Grup tidak menetapkan izin secara langsung; ia menjadi titik tempel untuk menerapkan peran dan atribut ke banyak user sekaligus — jauh lebih hemat daripada mengedit user satu per satu.
Lewat admin console, buka menu Groups lalu klik New group. Alternatif otomatis, gunakan Admin REST API:
curl -X POST "https://id.example.com/admin/realms/myrealm/groups" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "developers"}'Endpoint manajemen grup di Admin REST API berada di bawah /admin/realms/ dengan nama realm sebagai segmen jalur. Ini penting kalian pahami jika nanti ingin membuat skrip provisioning.
Grup bisa memiliki subgrup. Misalnya grup engineering dengan anak developers, devops, dan qa. Hierarki ini membantu organisasi yang besar:
devops otomatis dianggap anggota engineering.{
"name": "engineering",
"subGroups": [
{"name": "developers"},
{"name": "devops"},
{"name": "qa"}
]
}Tambahkan user ke grup lewat halaman detail grup (tab Members) atau dari profil user (tab Groups). Kuncinya: peran dan atribut grup mengalir ke semua anggota, jadi cukup kelola sekali di tingkat grup, bukan per user. Untuk melihat daftar grup dari terminal, jalankan kcadm.sh get groups -r myrealm.
Grup bisa membawa atribut key-value, misalnya department=engineering atau location=jakarta. Atribut inilah bahan bakar untuk authorization berbasis atribut (ABAC) yang akan dibahas sebentar lagi.
Ada grup yang diinginkan diikuti semua user baru tanpa mereka pilih. Bukalah Realm Settings → tab Login, lalu tambahkan grup ke pengaturan Default groups. User yang baru terdaftar otomatis bergabung ke grup tersebut — pola yang umum untuk menerapkan peran onboarding sejak hari pertama.
Roles (peran) adalah kumpulan izin bernama yang bisa diberikan ke user atau grup. Keycloak membedakan dua cakupan: realm dan client.
| Aspek | Realm Role | Client Role |
|---|---|---|
| Cakupan | Seluruh realm | Hanya satu client tertentu |
| Contoh | admin, user | view-dashboard, manage-billing |
| Dipakai di | Semua aplikasi di realm | Aplikasi yang bersangkutan saja |
| Penamaan | Bebas, konteks realm | Umumnya diawali nama aplikasi agar jelas pemiliknya |
Aturan praktis: simpan di realm role hal-hal yang lintas aplikasi, simpan di client role hal-hal yang spesifik aplikasi. Ini membuat role mapping tetap mudah dibaca dan tidak saling menginjak.
Composite role adalah peran yang "membungkus" peran-peran lain. Saat user diberi composite role, seluruh peran di dalamnya ikut aktif:
roles:
- name: reader
composite: true
includes:
- realm: view-user
- realm: view-group
- client: webapp
role: view-basic-infoComposite role menciptakan semacam hierarki peran. reader lebih tinggi dari view-user karena mencakupnya. Hierarki ini berguna untuk merakit peran besar dari blok kecil, tapi hati-hati: kompleksitas naik seiring kedalaman, dan membuat audit menjadi lebih sulit.
Pemetaan peran adalah proses menempelkan role ke user atau grup:
Role mapping.Role mapping. Semua anggota grup otomatis mendapat peran tersebut.role-mappings/realm di bawah endpoint user realm, dan subjalur serupa di bawah endpoint grup.Role mapping ke grup adalah teknik paling efisien untuk skala besar: tambah user ke grup, peran datang dengan sendirinya.
| Pertanyaan | Grup | Peran |
|---|---|---|
| Menjawab "siapa ini?" | Ya, berdasarkan atribut | Tidak |
| Menjawab "boleh apa?" | Tidak langsung | Ya |
| Diterapkan ke banyak user | Sekali di grup | Sekali di role mapping |
| Bisa punya hierarki | Ya, subgrup | Ya, composite |
| Sumber untuk ABAC | Atribut grup | Tidak langsung |
Garis besarnya: grup = struktur organisasi, peran = hak akses. Dalam praktik, keduanya digabung — grup diberi peran.
Model paling umum: user atau grup diberi peran, aplikasi memeriksa peran di token (misal claim realm_access atau resource_access di JWT). Sederhana, mudah diaudit, dan menjadi basis dari hampir semua setup Keycloak.
Keputusan dibuat dari atribut, bukan sekadar peran: "boleh akses jika location sama dengan negara data", "boleh jika clearance-level di atas 3". Di Keycloak, atribut ini bisa datang dari user attributes maupun group attributes.
Gabungan keduanya yang paling praktis: grup memegang atribut dan peran, lalu aplikasi memutuskan berdasarkan keanggotaan grup. Ini pola yang direkomendasikan untuk onboarding dan offboarding otomatis — cukup atur keanggotaan grup.
Untuk kontrol paling detail, Keycloak punya Authorization Services (UMA 2.0): resource, scope, policy, dan evaluasi konteks di sisi server. Ini tema besar yang akan dibahas di episode 25. Untuk episode ini, cukup tahu bahwa RBAC dan ABAC lewat grup dan peran adalah fondasi yang harus dikuasai sebelum menyentuh lapisan tersebut.
Gunakan pola kata kerja-benda yang konsisten, misal view-*, create-*, manage-*. Konsistensi membuat role set mudah dibaca dan aman untuk direfactor.
Pilih satu basis klasifikasi: organisasi, fungsi, atau tingkat akses — jangan dicampur dalam satu hierarki. Misalnya jangan menaruh intern dan engineering sebagai sibling di level yang sama jika keduanya punya makna berbeda.
Tempelkan peran ke grup, bukan ke user satu per satu. Kelola permission dari atas ke bawah: grup induk untuk hal umum, subgrup untuk pengecualian.
Berikan hanya izin minimum yang dibutuhkan, dan periksa berkala apakah masih relevan. Kombinasikan dengan audit event di episode 22 untuk melihat siapa sebenarnya yang memakai peran tersebut.
Pada episode 18, kalian memetakan dua pilar authorization Keycloak: grup sebagai struktur organisasi (hierarki, membership, atribut, default groups) dan peran sebagai hak akses (realm/client, composite, role mapping), lalu menyatukannya dalam RBAC, ABAC, dan group-based permission.
Inti yang harus dibawa pulang:
Di episode 19 berikutnya, kalian akan mengangkat Keycloak dari sekadar kotak pasir ke instalasi nyata: installing Keycloak — ZIP/TAR standalone, container Docker dari quay.io, konfigurasi database, hingga pengaturan awal realm.