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

start keycloak dari terminal

Dari browser buka http://localhost:8080
login keycloak baru install

Login dengan user admin yang sudah dibuat sebelumnya
login dengan admin keycloak

Konfigurasi Keycloak

Setelah Keycloak terinstall, tahap selanjutnya adalah membuat realm, role dan user.

Membuat Realm

Klik pada realm master, lalu klik Create realm
create a new realm

buat realm baru keycloak 23
Realm Name : platform

anda bisa menggunakan nama apa pun disini, sebagai contoh saya menggunakan platform

Membuat Client

Click menu Clients -> Create client
buat client baru di keycloak

create a new keycloak client
Yang perlu diinput

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.

RoleKeterangan
AdminUser administrator
EditorUser bisa mengedit dashboard
ViewerHanya 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
create keycloak role realm
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

RoleUser
Admindono
Editorkasino
Viewerindro

buat user baru keycloak
klik Credential -> Set password, untuk membuat password user
Set Temporary: Off, agar password berlaku permanen
set password user keycloak permently
klik Role mapping -> Assign role. Pilih role yang sesuai, lalu klik Assign
assign role to the users
Lanjutkan untuk membuat user kasino dan indro, sesuaikan dengan role-nya.

Klik menu Client Scope -> roles -> Mappers -> realm roles

realm role mapper keycloak

klik “Add to ID token” untuk mengaktifkannya
add realm role to token id
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

grafana running successfully
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
grafana dari browser
klik tombol Sign in with Keycloak
Kita akan diarahkan ke halaman login Keycloak
login grafana via keycloak

Tunggu beberapa saat anda akan otomatis login ke Grafana
berhasil login ke grafana dengan keycloak

Leave a comment

Your email address will not be published. Required fields are marked *