Пост

Настройка 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

В Web интерфейсе Keycloak создаем нового клиента

Images Настройки Keycloak - Client

  • 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

Images Настройки Keycloak - Client

  • Client authentication: On
  • Authentication flow:
    • Standard flow: On
    • Direct access grants: On

Копируем Client secret в настройках клиента grafana (во вкладке Credentials)

Переходим во вкладку Roles, создаем 2 роли

Images Настройки Keycloak - Roles

  • grafana-admin
  • grafana-editor

Создаем мэппер (mappers). Для этого переходим во вкладку Client scopes и проваливаемся по ссылке grafana-dedicated (Dedicated scope and mappers for this client)

Images Настройки Keycloak - Mappers

Добавляем мэппер roles

Images Настройки Keycloak - Mappers

  • 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

Images Настройки Keycloak - Members

К каждой группе привязываем соответствующую роль во вкладке Role mapping

Images Настройки Keycloak - Assign role

Images Настройки 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, проверяем роль в профайле

Images Grafana - Profile

Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.