Merekam dan mengaudit aktivitas di Keycloak: jenis event login dan admin, event listeners, konfigurasi penyimpanan dan retention, serta penggunaan event untuk monitoring keamanan.

Di episode 21 kalian menghias Keycloak dengan tema kustom. Episode 22 ini soal jejak: events & auditing. Keycloak merekam apa yang terjadi — siapa login, siapa gagal login, admin mengubah apa — dan menjadi bahan dasar investigasi, compliance, serta monitoring. Ini juga episode yang melengkapi prinsip least privilege dari episode 18: tanpa catatan, kalian tidak tahu apakah izin benar-benar dipakai.
Tab Events di admin console memisahkan rekaman menjadi dua kelompok besar: user events dan admin events.
| Kategori | Contoh event | Dicatat sebagai |
|---|---|---|
| Login events | LOGIN, LOGOUT, REFRESH_TOKEN | User events |
| Token events | CODE_TO_TOKEN, REFRESH_TOKEN | User events |
| Registrasi | REGISTER | User events |
| Aktivitas akun | UPDATE_PASSWORD, VERIFY_EMAIL | User events |
| Error events | LOGIN_ERROR, REGISTER_ERROR | User events |
| Tindakan admin | buat user, hapus client, ubah realm | Admin events |
Contoh rekaman event di database:
{
"type": "LOGIN",
"realmId": "myrealm",
"clientId": "webapp",
"userId": "6f1a0c1e-0000-0000-0000-000000000001",
"ipAddress": "203.0.113.10",
"time": 1764800000000,
"details": {
"auth_method": "openid-connect"
}
}Membedakan user events dan admin events itu penting: user events menjelaskan pengalaman end user, sedangkan admin events adalah pertanggungjawaban orang yang memegang console.
Event yang terjadi dikirim ke listener. Keycloak menyediakan beberapa listener bawaan dan membuka jalur untuk kustom:
| Listener | Fungsi |
|---|---|
| JBoss logging | Menulis event ke log server |
| JPA (database event storage) | Menyimpan event ke tabel di database |
| Custom listener | Implementasi SPI sendiri, misal kirim ke webhook |
| External integration | Penerusan ke SIEM atau sistem monitoring |
Listener diaktifkan di Realm Settings → Events → tab Config pada kolom Event listeners. Jika tidak ada listener yang aktif, event tetap berjalan tapi tidak meninggalkan jejak — pastikan setidaknya logging aktif.
Centang Save events agar event tersimpan ke database dan bisa dicari, dan Save admin events untuk rekaman tindakan admin. Tanpa centang ini, event hanya lewat listener saat itu dan hilang.
Tentukan Expiration event — berapa lama rekaman disimpan sebelum dibersihkan. Retention yang panjang bagus untuk audit, tapi membebani storage; sesuaikan dengan kebutuhan compliance.
Tab User events menyediakan filter: tipe event, client, user, dan rentang tanggal. Query inilah yang dipakai saat investigasi insiden, misalnya "siapa yang gagal login dari IP ini".
Kalian bisa memilih tipe event mana yang direkam dan mana yang diabaikan. Filtering membantu mengendalikan volume, tapi hati-hati: terlalu agresif bisa menghilangkan bukti saat dibutuhkan.
Rekaman yang lengkap dan retention yang jelas adalah bahan compliance reporting: menunjukan siapa masuk, kapan, dan admin apa yang dilakukan. Padukan dengan ekspor data dari query events untuk laporan berkala.
Jika kalian memakai database event storage (JPA), event tersimpan di tabel yang bisa diakses langsung. Kueri langsung berguna untuk laporan berkala yang tidak tersedia di antarmuka admin console.
SELECT type, client_id, ip_address, time
FROM event_entity
WHERE realm_id = 'myrealm'
AND type IN ('LOGIN', 'LOGIN_ERROR')
ORDER BY time DESC
LIMIT 50;Nama tabel bervolasi antar rilis — cek dengan dokumentasi versi yang kalian pakai. Yang penting dipahami: membaca event langsung dari database memberi fleksibilitas penuh untuk laporan, sementara antarmuka admin console cukup untuk investigasi cepat.
Tip
Jangan menaruh log berisi detail sesi sensitif di tempat yang bisa diakses sembarang orang. Rekam event dengan retention yang masuk akal dan batasi akses ke data event hanya untuk tim yang berwenang.
Event adalah bahan mentah monitoring. Pola yang paling berguna:
LOGIN_ERROR berulang dalam waktu singkat bisa berarti brute force.Untuk metrik otomatis, aktifkan metrics endpoint Keycloak:
bin/kc.sh start --metrics-enabled true --health-enabled trueDengan metrics-enabled Keycloak menyediakan endpoint metrics yang bisa di-scrape Prometheus, sementara health-enabled menyediakan health check. Panaskan kc.sh start --metrics-enabled di lingkungan kalian untuk melihatnya.
Pada episode 22, kalian memahami events dan auditing di Keycloak: jenis event (login, token, registrasi, error, admin), event listeners (JBoss logging, database storage, custom, integrasi eksternal), konfigurasi audit (retention, queries, filtering, compliance), dan monitoring berbasis event.
Inti yang harus dibawa pulang:
Save events — tanpa itu tidak ada jejak yang bisa diinvestigasi.LOGIN_ERROR adalah sinyal awal serangan — pantau dari sisi monitoring.Di episode 23 berikutnya, kalian menaikkan level keamanan login: Multi-Factor Authentication (MFA) — OTP, WebAuthn, SMS, dan recovery codes.