Настройка OAUTH авторизации в Grafana (Keycloak, Roles)
Grafana - это свободная, открытое программное обеспечение для мониторинга и визуализации данных, ориентированная на IT-инфраструктуру. Она собирает данные из различных источников, таких как time series databases (например, InfluxDB), системы мониторинга (например, Prometheus, Graphite), SIEM-системы (например, Elasticsearch, Splunk), и отображает их в удобном для пользователя формате.
Исходные данные
Данная статья проверялась на следующих версиях ПО:
- Grafana v.9.4.3 (но и на v.11.3.0 работает)
- Keycloak v.21.0.1
Настройка Keycloak
- Установка Keycloak + PostgeSQL в Linux была рассмотрена в одной из предыдущих статей.
- Список статей из категории Keycloak
В Web интерфейсе Keycloak создаем нового клиента
- Client ID:
grafana
- Name:
grafana
- Root URL:
https://grafana.itdraft.ru
- Home URL:
https://grafana.itdraft.ru
- Valid redirect URI:
https://grafana.itdraft.ru/login/generic_oauth/*
- Web origins:
https://grafana.itdraft.ru
- Client authentication:
On
- Authentication flow:
- Standard flow:
On
- Direct access grants:
On
- Standard flow:
Копируем Client secret
в настройках клиента grafana
(во вкладке Credentials
)
Переходим во вкладку Roles
, создаем 2 роли
- grafana-admin
- grafana-editor
Создаем мэппер (mappers). Для этого переходим во вкладку Client scopes
и проваливаемся по ссылке grafana-dedicated
(Dedicated scope and mappers for this client)
Добавляем мэппер roles
- Mapper type:
User Client Role
- Name:
roles
- Client ID:
grafana
- Multivalued:
On
- Token Claim Name:
resource_access.${client_id}.roles
- Claim JSON Type:
String
- Add to ID token:
On
- Add to access token:
On
- Add to userinfo:
On
Для mapper type:
User Client Role
роль берется из настроек клиента (вкладкаRoles
).Для mapper type:
User Realm Role
роль берется из глобальных настроек (пункт менюRealm roles
).
В Web интерфейсе Keycloak переходим в раздел Groups и создаем 2 группы:
- gr-admin
- gr-editor
Для каждой группы добавляем пользователей во вкладке Members
К каждой группе привязываем соответствующую роль во вкладке Role mapping
Настройки Keycloak - Assign role
Настройки Keycloak - Filter by client
- Assign role > Filter by client
Настройка Keycloak завершена
Настройка Grafana
Редактируем файл grafana.ini
область [auth.generic_oauth]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo nano /etc/grafana/grafana.ini
...
[auth.generic_oauth]
enabled = true
name = Keycloak_oauth
allow_sign_up = true
client_id = grafana
client_secret = %CLIENT_SECRET% # From Keycloak
scopes = openid email profile offline_access roles
email_attribute_path = email
login_attribute_path = username
name_attribute_path = full_name
auth_url = https://keycloak.itdraft.ru/realms/itdraft/protocol/openid-connect/auth
token_url = https://keycloak.itdraft.ru/realms/itdraft/protocol/openid-connect/token
api_url = https://keycloak.itdraft.ru/realms/itdraft/protocol/openid-connect/userinfo
role_attribute_path = contains(resource_access.grafana.roles[*], 'admin') && 'Admin' || contains(resource_access.grafana.roles[*], 'editor') && 'Editor' || 'Viewer'
Перезапускаем Grafana
1
$ sudo systemctl restart grafana-server
Авторизуемся в Grafana с помощью Keyclaok, проверяем роль в профайле