Pada tutorial kali ini kita akan membahas cara untuk mengelola user Grafana dengan menggunakan Keycloak, semua user akan dikelola oleh Keycloak beserta dengan role-nya. Cara ini jauh lebih mudah untuk di maintance, karena kita memiliki satu sumber yang sama yaitu Keycloak, dan login ini bisa digunakan untuk berbagai aplikasi lainnya seperti Airflow, Superset, Jenkins, Trino, jadi satu login untuk semua aplikasi.
Bila di tempat anda bekerja menggunakan LDAP/AD, keycloak bisa digunakan sebagai perantara, cukup menggunakan login LDAP/AD anda, semua user yang ada di LDAP akan bisa otomatis login ke Grafana (tentunya bila memiliki role), dan role LDAP yang ada bisa dimapping ke role di Grafana, contoh kasus ini akan kita bahas ditulisan selanjutnya.
Install Keycloak
Bila anda belum memiliki Keycloak, kita bisa menggunakan docker, ataupun menjalankan aplikasi Keycloak langsung. Yang kita lakukan disini adalah membuat contoh untuk dev, untuk production buat user dan password yang aman.
Docker
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:23.0.6 start-dev
Standalone
wget https://github.com/keycloak/keycloak/releases/download/23.0.6/keycloak-23.0.6.tar.gz tar zxvf keycloak-23.0.6.tar.gz cd keycloak-23.0.6 export KEYCLOAK_ADMIN_PASSWORD=admin export KEYCLOAK_ADMIN=admin ./bin/kc.sh start-dev
Dari browser buka http://localhost:8080
Login dengan user admin yang sudah dibuat sebelumnya
Konfigurasi Keycloak
Setelah Keycloak terinstall, tahap selanjutnya adalah membuat realm, role dan user.
Membuat Realm
Klik pada realm master, lalu klik Create realm
anda bisa menggunakan nama apa pun disini, sebagai contoh saya menggunakan platform
Membuat Client
Click menu Clients -> Create client
1. GENERAL SETTINGS Client type: OpenID Connect Client ID: grafana Name: Grafana 2. CAPABILITY CONFIG Client authentication : ON Authentication flow: Standard flow Direct access grants 3. LOGIN SETTINGS Valid redirect URIs: http://localhost:3000/*
Valid redirect URIs bisa diganti dengan *, untuk memudahkan testing, tapi sangat tidak disarankan untuk production. Pada server production gunakan domain name lengkap, seperti https://grafana.jaranguda.com/*
akhiri dengan klik Save
klik tab Credentials, copy Client Secret
Membuat Role
Buat role yang akan digunakan oleh user untuk login ke grafana. Grafana sendiri memiliki 3 jenis role.
Role | Keterangan |
---|---|
Admin | User administrator |
Editor | User bisa mengedit dashboard |
Viewer | Hanya view akses |
untuk itu kita akan membuat role yang sama di Keycloak, role ini yang akan dikirim oleh Keycloak nanti setelah user login.
Klik menu Realm roles -> Create role
klik Save. lakukan hal yang sama untuk role Viewer dan Editor.
Membuat User
Klik menu Users -> Add user. Untuk user kita akan membuat 3 user untuk 3 role yang berbeda
Role | User |
---|---|
Admin | dono |
Editor | kasino |
Viewer | indro |
klik Credential -> Set password, untuk membuat password user
Set Temporary: Off, agar password berlaku permanen
klik Role mapping -> Assign role. Pilih role yang sesuai, lalu klik Assign
Lanjutkan untuk membuat user kasino dan indro, sesuaikan dengan role-nya.
Klik menu Client Scope -> roles -> Mappers -> realm roles
klik “Add to ID token” untuk mengaktifkannya
Akhiri dengan klik Save
Install Grafana
Jalankan Grafana dengan docker
docker run -p 3000:3000 grafana/grafana-oss
tambahkan environment variable
docker run -p 3000:3000 -e GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP="true" -e GF_AUTH_GENERIC_OAUTH_API_URL="http://192.168.88.5:8080/realms/platform/protocol/openid-connect/userinfo" -e GF_AUTH_GENERIC_OAUTH_AUTH_URL="http://192.168.88.5:8080/realms/platform/protocol/openid-connect/auth" -e GF_AUTH_GENERIC_OAUTH_CLIENT_ID="grafana" -e GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET="0W5bnhTz7JsucsRRmB7GqSxdESPyNO0n" -e GF_AUTH_GENERIC_OAUTH_ENABLED="true" -e GF_AUTH_GENERIC_OAUTH_NAME="keycloak" -e GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH="contains(realm_access.roles[*], 'Admin') && 'Admin' || contains(realm_access.roles[*], 'Editor') && 'Editor' || contains(realm_access.roles[*], 'Viewer') && 'Viewer'" -e GF_AUTH_GENERIC_OAUTH_SCOPES="openid profile" -e GF_AUTH_GENERIC_OAUTH_TOKEN_URL="http://192.168.88.5:8080/realms/platform/protocol/openid-connect/token" -e GF_SERVER_DOMAIN="192.168.88.5:3000" -e GF_SERVER_ROOT_URL="http://192.168.88.5:3000" -e GF_LOG_LEVEL=debug grafana/grafana-oss
Bila anda menggunakan docker, gunakan IP dari komputer anda, jangan gunakan localhost karena docker akan mengakses 127.0.0.1 yaitu IP dari docker yang dijalankan, sehingga akan terjadi error.
Standalone
wget https://dl.grafana.com/oss/release/grafana-10.3.1.linux-amd64.tar.gz tar zxvf grafana-10.3.1.linux-amd64.tar.gz cd grafana-v10.3.1 # set environment variable export GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP="true" export GF_AUTH_GENERIC_OAUTH_API_URL="http://192.168.88.5:8080/realms/platform/protocol/openid-connect/userinfo" export GF_AUTH_GENERIC_OAUTH_AUTH_URL="http://192.168.88.5:8080/realms/platform/protocol/openid-connect/auth" export GF_AUTH_GENERIC_OAUTH_CLIENT_ID="grafana" export GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET="0W5bnhTz7JsucsRRmB7GqSxdESPyNO0n" export GF_AUTH_GENERIC_OAUTH_ENABLED="true" export GF_AUTH_GENERIC_OAUTH_NAME="keycloak" export GF_AUTH_GENERIC_OAUTH_ROLE_ATTRIBUTE_PATH="contains(realm_access.roles[*], 'Admin') && 'Admin' || contains(realm_access.roles[*], 'Editor') && 'Editor' || contains(realm_access.roles[*], 'Viewer') && 'Viewer'" export GF_AUTH_GENERIC_OAUTH_SCOPES="openid profile" export GF_AUTH_GENERIC_OAUTH_TOKEN_URL="http://192.168.88.5:8080/realms/platform/protocol/openid-connect/token" export GF_SERVER_DOMAIN="192.168.88.5:3000" export GF_SERVER_ROOT_URL="http://192.168.88.5:3000" export GF_LOG_LEVEL=debug # jalankan grafana ./bin/grafana-server
Dari browser buka halaman http://localhost:3030
klik tombol Sign in with Keycloak
Kita akan diarahkan ke halaman login Keycloak