OGOwnGate

Мониторинг под замком: настраиваем вход в Grafana через OIDC за 15 минут

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

Безопасный OIDC контур для Grafana

«Да кому нужен наш мониторинг? Там же просто циферки нагрузки на процессор и графики потребления памяти, никаких секретов нет!» — классическая фраза дежурного инженера, пока в компанию не приходит пентестер или аудит безопасности.

Через сорок минут после начала проверки выясняется занятное:

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. А при увольнении доступ отзывается ровно за одну секунду — блокировкой в домене.

Пятнадцать минут на правку одного конфига — и ваш мониторинг больше не является проходным двором.

← Все статьи