Мониторинг под замком: настраиваем вход в Grafana через OIDC за 15 минут
Grafana с паролем admin или открытым анонимным доступом — мечта любого аудитора по безопасности. Разбираем, как за 15 минут подключить дашборды к единому SSO-шлюзу, закрыть дашборды вторым фактором и автоматически маппить роли админов и зрителей из групп AD.

«Да кому нужен наш мониторинг? Там же просто циферки нагрузки на процессор и графики потребления памяти, никаких секретов нет!» — классическая фраза дежурного инженера, пока в компанию не приходит пентестер или аудит безопасности.
Через сорок минут после начала проверки выясняется занятное:
1. В Grafana настроены десятки подключений к базам данных (Data Sources): Prometheus, ClickHouse, ElasticSearch, боевой PostgreSQL с клиентскими транзакциями.
2. Любой сотрудник с правами Editor может открыть вкладку Explore и выполнить произвольный SQL-запрос к продакшн-базе.
3. Половина офиса заходит под общей учёткой viewer с паролем из четырёх единиц, а остальные пользуются учёткой admin:admin.
Оставлять Grafana с базовой авторизацией или прямым LDAP-коннектором — это добровольно вешать на дверь серверной табличку «Вход свободный».
Давайте закроем этот бардак за 15 минут, настроив полноценный вход через современный шлюз доступа по протоколу OpenID Connect (OIDC).
---
Что мы хотим получить на выходе
- Пользователи заходят по кнопке «Войти через SSO» в один клик.
- Пароли проверяются в Active Directory / LDAP через единый шлюз доступа.
- Обязательный второй фактор (TOTP) запрашивается шлюзом автоматически.
- Маппинг ролей на лету: если сотрудник в AD состоит в группе
Domain Admins— в Grafana онAdmin. Если вDevOps—Editor. Все остальные получают права безопасногоViewer. - Локальные формы логина и паролей отключены наглухо.
---
Шаг 1. Регистрируем клиент в шлюзе OwnGate
В панели шлюза доступа OwnGate создаём новое приложение:
- Client Name:
Grafana Production - Redirect URI:
https://grafana.company.local/login/generic_oauth - Scopes:
openid,profile,email,groups
Шлюз выдаёт нам пару ключей: client_id и client_secret. Запоминаем их.
---
Шаг 2. Конфигурируем grafana.ini
Открываем конфигурационный файл Grafana (или прокидываем переменные окружения в Docker-контейнер через GF_AUTH_GENERIC_OAUTH_*):
[auth.generic_oauth]
enabled = true
name = OwnGate SSO
allow_sign_up = true
auto_login = false
# Данные клиента
client_id = grafana-prod-client
client_secret = super-secret-token-from-owngate
scopes = openid profile email groups
# Эндпоинты шлюза доступа OwnGate
auth_url = https://auth.company.local/oauth2/authorize
token_url = https://auth.company.local/oauth2/token
api_url = https://auth.company.local/oauth2/userinfo
# Извлечение ролей из JWT-токена
role_attribute_path = contains(groups[*], 'DevOps-Admins') && 'Admin' || contains(groups[*], 'Developers') && 'Editor' || 'Viewer'
role_attribute_strict = true
allow_assign_grafana_admin = true
Обратите внимание на строчку role_attribute_path. Это встроенный в Grafana синтаксис JMESPath. Grafana смотрит в массив groups, который отдаёт шлюз OwnGate:
- Нашла
DevOps-Admins— делает пользователя администратором Grafana; - Нашла
Developers— разрешает редактировать дашборды; - Не нашла ничего привилегированного — оставляет в режиме безопасного чтения
Viewer.
---
Шаг 3. Отключаем дефолтные лазейки
Чтобы сотрудники и злоумышленники не пытались подбирать локальный пароль admin, полностью отключаем базовую аутентификацию в grafana.ini:
[auth]
# Прячем форму логина/пароля, оставляем только SSO
disable_login_form = true
[auth.basic]
enabled = false
[users]
# Запрещаем регистрацию новых пользователей мимо шлюза
allow_sign_up = false
auto_assign_org = true
auto_assign_org_role = Viewer
Перезапускаем сервис:
sudo systemctl restart grafana-server
# или docker restart grafana
---
Что изменилось для команды
1. Для пользователей: Исчезла необходимость придумывать и помнить отдельный пароль от мониторинга. При клике на ссылку в Slack дашборд открывается бесшовно через SSO.
2. Для безопасности: Все сессии защищены вторым фактором (TOTP). Даже если ноутбук сотрудника украдут с сохранённым паролем от AD, без 6 цифр в аутентификаторе в Grafana никто не войдёт.
3. Для сисадминов: Перевод сотрудника из отдела разработки в тимлиды автоматически повышает его привилегии в Grafana. А при увольнении доступ отзывается ровно за одну секунду — блокировкой в домене.
Пятнадцать минут на правку одного конфига — и ваш мониторинг больше не является проходным двором.