Авторизация
Значения по умоланию
При установке платформы можно указать свои значения логина и пароля для технического пользователя по умолчанию для авторизации и проведения первичной настройки.
Если значения не указать - будут использованы значения по умолчанию:
Пользователь: admin-internal
Проль: admin
Identity Provider
IDP (Identity Provider, поставщик удостоверений) — встроенный сервис аутентификации платформы Астра Мониторинг. Сервис работает по протоколу OpenID Connect (стандарт аутентификации на базе OAuth 2.0) и позволяет пользователям входить в платформу с помощью учётных записей из корпоративного каталога LDAP (Lightweight Directory Access Protocol) или через внешнего провайдера OIDC (OpenID Connect).
IDP не хранит пароли пользователей — аутентификация всегда делегируется внешним системам (LDAP или OIDC). После успешной проверки учётных данных IDP выдаёт JWT-токен (JSON Web Token), который используется для доступа к платформе.
Поток входа
Пользователь → IDP AM → LDAP/OIDC → JWT-токен → Платформа Астра Мониторинг
Ключевые адреса
Адрес |
Назначение |
|---|---|
|
Публичный адрес сервиса IDP |
|
Автоматическая конфигурация для клиентов (Discovery) |
|
Публичные ключи для проверки токенов (JWKS) |
Примечание
IDP AM внутри использует движок Dex — поэтому в конфигурационных файлах ключи начинаются с dex.*. Снаружи сервис доступен по пути /oidc/realms/astra-monitoring через nginx-прокси (docker-compose) или Ingress (kubernetes). Пользователи и клиенты обращаются только к публичному адресу — все запросы проксируются до контейнера identity-provider.
Для пользователей — Вход в систему
При открытии интерфейса платформы вы будете перенаправлены на страницу входа IDP, где сможете авторизоваться.
Методы авторизации
Выберите LDAP (username) и введите:
Username — ваше имя пользователя (логин в корпоративном каталоге)
Пароль — пароль от корпоративной учётной записи
Выберите LDAP (email) и введите:
Email — ваш адрес электронной почты
Пароль — пароль от корпоративной учётной записи
Выберите внешнего провайдера (например, Keycloak SSO). Вы будете перенаправлены на страницу входа провайдера. После успешной аутентификации — автоматически возвращены в платформу.
Введите логин и пароль локального пользователя, заданного администратором в конфигурации IDP.
Предупреждение
Этот метод предназначен только для первичного входа и настройки системы. После настройки коннекторов LDAP/OIDC статический пользователь должен быть удалён.
Единый вход (SSO)
При активной сессии IDP повторный вход в другое приложение происходит без повторного ввода пароля.
Роли
В платформе есть три системные роли:
Администратор — полный доступ ко всему функционалу
Сотрудник — полный доступ, за исключением раздела «Администрирование»
Наблюдатель — доступ на просмотр, за исключением раздела «Администрирование»
Роль определяется группой из LDAP или OIDC, в которой состоит пользователь. Подробнее — Пользователи.
Для администраторов — Настройка
Установка и запуск
Добавьте аргумент --profile idp к команде запуска:
При запуске с этим аргументом используется профиль IDP вместо Keycloak. Keycloak не запускается — nginx автоматически направляет запросы /oidc/* на контейнер identity-provider. Конфигурация подключений находится в файле identity-provider/bootstrap.yaml внутри директории развёртывания.
Для отключения Keycloak и включения IDP используйте опцию keycloak.enable="false":
helm upgrade astra-monitoring am-helm/astra-icl-monitoring \
-n astra-monitoring \
--install \
--set keycloak.enable="false"
Конфигурация IDP настраивается через блок identity_provider в файле values.yaml Helm-чарта.
Конфигурация IDP
Конфигурация задаётся в YAML-файле и через переменные окружения. Переменные окружения имеют приоритет над файлом.
Docker-compose — файл
identity-provider/bootstrap.yamlв директории развёртыванияKubernetes — блок
identity_providerвvalues.yamlHelm-чарта
Структура конфигурации
Параметры развёртывания (identity_provider.*):
Параметр |
Описание |
|---|---|
|
Образ контейнера IDP |
|
Версия образа |
|
Порт сервиса (по умолчанию 8080) |
|
Уровень логирования |
|
Статические пользователи (см. раздел «Статический пользователь») |
|
Коннекторы аутентификации (LDAP, OIDC) |
Параметры сервиса (внутренняя конфигурация IDP):
Блок |
Описание |
|---|---|
|
Публичный URL сервиса IDP |
|
Базовый путь (по умолчанию |
|
Настройки подключения к PostgreSQL |
|
OAuth2-клиенты платформы |
|
Коннекторы аутентификации (LDAP, OIDC) |
Конфигурация для первичного входа
При первом запуске системы необходимо настроить статического пользователя-администратора для выполнения первичной настройки. Блок static_passwords создаёт локального пользователя, через которого можно войти в платформу до подключения внешних источников аутентификации (LDAP/OIDC).
http:
listen: ":8080"
tls_enabled: false
shutdown_timeout: "10s"
dex:
issuer: "https://<адрес-сервера>/oidc/realms/astra-monitoring"
web_path: "/oidc/realms/astra-monitoring"
enable_password_db: true
storage_type: "postgres"
storage_config:
postgres_dsn: "" # задать через ENV
migrate: true
static_clients:
- id: "admin-ui"
secret: "" # задать через ENV
redirect_uris:
- "https://<адрес-сервера>"
- "https://<адрес-сервера>/"
# Статический пользователь для первичной настройки
static_passwords:
- email: "admin-internal"
username: "admin-internal"
hash: "" # bcrypt-хеш пароля (см. ниже)
groups:
- "Administrators"
static_passwords— блок, необходимый для первичного входа в систему:username— имя пользователя для входаhash— bcrypt-хеш пароля (генерация:htpasswd -bnBC 12 "" <пароль> | tr -d ':\n')groups— группаAdministratorsдаёт полный доступ для первичной настройки
enable_password_db: true— обязательно для работы статических паролей
Важно
После первичной настройки добавьте в конфигурацию блок connectors с подключениями к LDAP/OIDC (см. раздел «Подключение коннекторов»), удалите блок static_passwords и перезапустите сервер.
Конфигурация для рабочего режима
После первичной настройки конфигурация переводится в рабочий режим — вместо static_passwords указываются коннекторы:
http:
listen: ":8080"
tls_enabled: false
shutdown_timeout: "10s"
dex:
issuer: "https://<адрес-сервера>/oidc/realms/astra-monitoring"
web_path: "/oidc/realms/astra-monitoring"
enable_password_db: false # статические пароли отключены
storage_type: "postgres"
storage_config:
postgres_dsn: "" # задать через ENV
migrate: true
static_clients:
- id: "admin-ui"
secret: "" # задать через ENV
redirect_uris:
- "https://<адрес-сервера>"
- "https://<адрес-сервера>/"
connectors:
- type: ldap
id: "ldap-uid"
name: "LDAP (логин uid)"
config:
host: "ldaps://ldap.example.com:636"
startTLS: false
insecureNoSSL: false
bindDN: "" # через ENV
bindPW: "" # через ENV
userSearch:
baseDN: "cn=users,dc=example,dc=loc"
filter: "(|(objectClass=inetOrgPerson)(objectClass=person))"
username: "uid"
idAttr: "uid"
emailAttr: "mail"
nameAttr: "cn"
groupSearch:
baseDN: "cn=groups,dc=example,dc=loc"
filter: "(objectClass=groupOfNames)"
userMatchers:
- userAttr: "DN"
groupAttr: "member"
nameAttr: "cn"
Переопределение через переменные окружения
Переменные с префиксом APP_ перекрывают значения из файла. Уровни разделяются __, индексы массивов — __{index}__.
Переменная |
Соответствующий ключ |
Описание |
|---|---|---|
|
|
Строка подключения PostgreSQL |
|
|
Секрет клиента |
|
|
LDAP bind DN |
|
|
LDAP bind пароль |
APP_dex__storage_config__postgres_dsn=postgres://user:pass@host:5432/db?sslmode=require
APP_dex__static_clients__0__secret=...
APP_dex__connectors__0__config__bindDN=uid=idp-am,cn=users,dc=example,dc=loc
APP_dex__connectors__0__config__bindPW=********
Важно
Секреты (пароли, ключи, строки подключения) задаются только через переменные окружения. Не храните секреты в YAML-файлах.
Подключение коннекторов
identity_provider:
connectors:
- type: ldap
id: ldap-username
name: "LDAP (username)"
config:
usernamePrompt: "Username"
host: "ldaps://ldap.example.com:636"
insecureNoSSL: false
startTLS: false
bindDN: "uid=mon_viewer,cn=users,cn=accounts,dc=example,dc=loc"
bindPW: "" # через ENV
userSearch:
baseDN: "cn=users,cn=accounts,dc=example,dc=loc"
filter: "(|(objectClass=ipaUser)(objectClass=person))"
username: "uid"
idAttr: "uid"
emailAttr: "mail"
nameAttr: "cn"
groupSearch:
baseDN: "cn=groups,cn=accounts,dc=example,dc=loc"
filter: "(objectClass=groupOfNames)"
userMatchers:
- userAttr: "DN"
groupAttr: "member"
nameAttr: "cn"
Параметры подключения:
Параметр |
Описание |
|---|---|
|
Адрес LDAP-сервера: |
|
Отключить SSL (только для dev) |
|
Использовать StartTLS при |
|
DN (Distinguished Name) пользователя для подключения к LDAP |
|
Пароль для подключения к LDAP |
Поиск пользователей (userSearch):
Поле |
Пример |
Описание |
|---|---|---|
|
|
База поиска пользователей |
|
|
LDAP-фильтр |
|
|
Поле логина |
|
|
Уникальный идентификатор |
|
|
|
|
|
Отображаемое имя |
Поиск групп (groupSearch):
Поле |
Пример |
Описание |
|---|---|---|
|
|
База поиска групп |
|
|
LDAP-фильтр |
|
|
Атрибут пользователя для сопоставления |
|
|
Атрибут группы для членов |
|
|
Имя группы (определяет роль в платформе) |
Аналогично LDAP (username), но для входа по email:
identity_provider:
connectors:
- type: ldap
id: ldap-email
name: "LDAP (email)"
config:
usernamePrompt: "Email"
host: "ldaps://ldap.example.com:636"
insecureNoSSL: false
startTLS: false
bindDN: "uid=mon_viewer,cn=users,cn=accounts,dc=example,dc=loc"
bindPW: "" # через ENV
userSearch:
baseDN: "cn=users,cn=accounts,dc=example,dc=loc"
filter: "(|(objectClass=ipaUser)(objectClass=person))"
username: "mail" # отличие: используется mail вместо uid
idAttr: "uid"
emailAttr: "mail"
nameAttr: "cn"
groupSearch:
baseDN: "cn=groups,cn=accounts,dc=example,dc=loc"
filter: "(objectClass=groupOfNames)"
userMatchers:
- userAttr: "DN"
groupAttr: "member"
nameAttr: "cn"
Ключевое отличие: username: "mail" — для входа используется email вместо логина.
identity_provider:
connectors:
- type: oidc
id: keycloak
name: "Keycloak SSO"
config:
issuer: "https://keycloak.example.com/realms/astra-monitoring"
clientID: "dex_client"
clientSecret: "" # через ENV
redirectURI: "https://am.example.com/oidc/realms/astra-monitoring/callback"
scopes:
- openid
- profile
- groups
claimMapping:
userIDKey: "sub"
userNameKey: "preferred_username"
emailKey: "email"
groupsKey: "groups"
insecureSkipVerify: false
insecureEnableGroups: true
insecureSkipEmailVerified: true
insecureSkipIssuerVerification: false
getUserInfo: false
Параметры подключения:
Параметр |
Описание |
|---|---|
|
URL realm Keycloak |
|
ID клиента, созданного в Keycloak |
|
Секрет клиента |
|
URL возврата после авторизации (абсолютный, должен содержать |
|
Запрашиваемые разрешения: |
Маппинг полей (claimMapping):
Поле |
Значение |
Описание |
|---|---|---|
|
|
Уникальный идентификатор пользователя |
|
|
Логин пользователя |
|
|
Email пользователя |
|
|
Поле с группами |
Флаги безопасности:
Флаг |
Описание |
Prod |
|---|---|---|
|
Отключить проверку TLS-сертификата |
|
|
Включить передачу групп |
по необходимости |
|
Не требовать подтверждения email |
|
|
Не проверять издателя токена |
|
|
Получать доп. атрибуты через userinfo endpoint |
|
Важно
В production все insecure* флаги должны быть false.
Статический пользователь (нулевой администратор)
Статический пользователь задаётся в конфигурации IDP и предназначен для первичного входа и настройки системы.
Предупреждение
После настройки коннекторов LDAP/OIDC статический пользователь должен быть удалён. Его наличие в production-конфигурации является уязвимостью.
identity_provider:
static_passwords:
- email: "admin-internal"
username: "admin-internal"
hash: "$2y$12$To9g2G0pbTfdsPanGWwBo.6RLY4Tst7.xPf3q/X78ApwtPL8fKCA2"
groups:
- "Administrators"
email/username — логин статического пользователя
hash — bcrypt-хеш пароля. Для генерации:
groups — группа, определяющая роль пользователя в платформе
Пошаговый сценарий настройки
Этап 1 — Первичный вход:
Подготовьте
bootstrap.yamlпо шаблону «Конфигурация для первичного входа» (см. выше). Сгенерируйте bcrypt-хеш пароля дляadmin-internal:htpasswd -bnBC 12 "" <пароль> | tr -d ':\n'Установите АМ с профилем IDP (docker-compose:
--profile idp, kubernetes:keycloak.enable="false")Войдите в платформу под
admin-internalс заданным паролемУбедитесь, что интерфейс доступен и работает корректно
Этап 2 — Подключение внешней аутентификации:
Добавьте в
bootstrap.yamlблокconnectorsс подключениями к LDAP и/или OIDC (см. раздел «Подключение коннекторов»)Перезапустите сервер
Убедитесь, что внешние пользователи могут входить в систему с нужными ролями
Примечание
Группы из LDAP/OIDC маппятся в роли AM автоматически. Убедитесь, что в LDAP пользователи состоят в соответствующих группах (Administrators, Employees, Observers).
Этап 3 — Удаление статического пользователя:
Убедитесь, что внешний пользователь с ролью администратора может успешно войти в систему
Предупреждение
Перед удалением нулевого администратора обязательно проверьте, что вход через LDAP/OIDC работает и у внешнего пользователя есть роль администратора.
Удалите блок
static_passwordsизbootstrap.yamlи установитеenable_password_db: falseПерезапустите сервер
Система настроена — дальнейшая работа происходит под внешними пользователями
Управление ролями и маппинг групп
Роль пользователя определяется группой из LDAP/OIDC:
Группа |
Роль в AM |
|---|---|
|
Администратор — полный доступ |
|
Сотрудник — без раздела «Администрирование» |
|
Наблюдатель — только просмотр |
Группы назначаются:
LDAP/OIDC пользователи — группы приходят из каталога (LDAP
groupSearchили OIDCgroupsKey)Статические пользователи — группы задаются в
static_passwords[].groups
Подробнее о ролях — Пользователи.
Рекомендации по окружениям
Параметр |
dev |
stage |
prod |
|---|---|---|---|
TLS (HTTPS) |
можно отключить |
включён |
включён |
LDAP-соединение |
|
|
|
Проверка SSL для LDAP |
можно отключить |
включена |
включена |
SSL для PostgreSQL |
можно |
|
|
Секреты в YAML |
запрещено |
запрещено |
запрещено |
Статические пользователи |
допустимо |
отключить |
отключить |
Заголовки прокси |
желательно |
обязательно |
обязательно |
Миграция с Keycloak
Когда нужна миграция
При обновлении Астра Мониторинг с версии, использующей Keycloak, на версию с IDP AM.
Ключевые отличия
Keycloak |
IDP AM |
|---|---|
Web-консоль администрирования |
Конфигурация через YAML-файл |
Концепция realm (области) |
Единый issuer (путь |
Встроенное хранилище пользователей |
LDAP/OIDC (локальные — только статические) |
Поддержка множества протоколов |
Только OIDC |
Управление сессиями через UI |
Настройка через конфигурацию |
Переходный вариант: OIDC-коннектор к Keycloak
Для плавной миграции можно настроить IDP AM на делегирование аутентификации существующему Keycloak:
Разверните АМ с профилем IDP
Настройте OIDC-коннектор, указывающий на Keycloak
Убедитесь, что пользователи могут аутентифицироваться через Keycloak → IDP AM → AM
Переключитесь на прямые LDAP-коннекторы
Декомиссируйте Keycloak
Шаги миграции
Установите новую версию АМ с профилем IDP (вместо Keycloak)
Перенесите настройки подключения к LDAP из конфигурации Keycloak в конфигурацию IDP AM
Проверьте маппинг групп: группы LDAP должны совпадать с ролями AM (Administrators, Employees, Observers)
Убедитесь, что пользователи могут войти через IDP AM
Декомиссируйте Keycloak
Эксплуатация (SRE)
Проверки доступности
Проверка |
Как |
Ожидаемое |
|---|---|---|
Readiness |
|
|
JWKs |
|
|
Liveness |
TCP-проверка порта или |
Ответ по TCP/200 |
Ротация ключей подписи
Добавить новый ключ подписи
Опубликовать в JWKS (оба ключа активны)
Раскатать обновление
После истечения всех токенов, подписанных старым ключом — удалить старый ключ
Важно
Не меняйте issuer между обычными релизами — это приведёт к инвалидации всех ранее выданных токенов.
Мониторинг и алерты
Рост 5xx ошибок на
/authи/tokenВсплеск ошибок
invalid_client(нескорректированные клиенты)Таймауты при подключении к LDAP
Безопасность
HTTPS — обязателен в production
LDAP — используйте
ldaps://илиldap://+ StartTLSПрокси — должен передавать заголовки
X-Forwarded-ProtoиX-Forwarded-Host, иначе адресissuerформируется неверноТокены — не хранить в
localStorageбраузера; используйте HttpOnly + Secure cookie
Логи
Компонент |
Где смотреть |
На что обращать внимание |
|---|---|---|
IDP AM |
|
Поля |
LDAP |
Bind/Search |
Таймауты, отказ аутентификации |
БД PostgreSQL |
Миграции/подключение |
Ошибки миграций, ошибки подключения |
Прокси |
Перед IDP AM |
Наличие |
Troubleshooting
Ошибки авторизации (/auth)
Симптом |
Причина |
Решение |
|---|---|---|
|
Адрес возврата не совпадает с зарегистрированным или не абсолютный |
Укажите корректный |
|
Ошибка подключения к LDAP (неверные учётные данные, нет пользователя, таймаут) |
Проверьте подключение к LDAP, фильтры и учётные данные |
Ошибки при получении токена (/token)
Симптом |
Причина |
Решение |
|---|---|---|
|
Неверные |
Проверьте ID и секрет клиента в конфигурации |
Некорректный |
Адрес IDP настроен неверно |
Проверьте |
Проблемы с группами и email
Проблема |
Причина |
Решение |
|---|---|---|
Группы не приходят в токене |
Не настроен |
Настройте параметры поиска групп в коннекторе LDAP |
Нет email |
В LDAP отсутствует атрибут |
Добавьте |
Refresh-токен не выдаётся |
Не запрошен scope |
Добавьте |
Проблемы с прокси
Симптом |
Причина |
Решение |
|---|---|---|
Адрес |
Прокси не передаёт |
Прокиньте оба заголовка до IDP AM |
После обновления все токены недействительны |
Изменился |
Не меняйте |