Управление пользователями¶
AppSec.AIGate использует ролевую модель доступа (RBAC) с интеграцией через Keycloak и OAuth2 Proxy. В этом разделе описано, как работает аутентификация, какие роли существуют и как управлять пользователями через UI.
Одна инсталляция — одна организация
AppSec.AIGate поставляется как изолированная инсталляция для одной организации (single-tenant). Разграничение доступа обеспечивается ролевой моделью (RBAC); отдельного разделения данных «по организациям» внутри инсталляции нет.
Роли и полномочия¶
В системе определены четыре роли. Каждый пользователь может иметь одну или несколько ролей.
admin¶
Назначение: Полный контроль над системой
Типичный пользователь: CISO, DevSecOps-инженер, администратор платформы
Роль admin даёт неограниченный доступ ко всем функциям системы. Только администраторы могут:
- Управлять пользователями — создавать, удалять, блокировать учётные записи, назначать роли.
- Удалять ресурсы — провайдеров, профили, контентные политики, экспортеры (безвозвратное удаление).
- Просматривать аудит — журнал всех действий всех пользователей (см. Аудит и журнал действий).
- Настраивать retention — политики хранения данных (см. Настройки хранения данных).
- Управлять всеми ресурсами — создавать, редактировать, активировать провайдеров, профили, политики и экспортеры.
Рекомендация: Минимизируйте количество пользователей с ролью admin. Для повседневных операций (настройка профилей, реагирование на инциденты) используйте роль operator.
operator¶
Назначение: Операционное управление безопасностью
Типичный пользователь: SOC-аналитик, AppSec-инженер, DevOps
Роль operator предназначена для ежедневной работы с системой. Операторы могут:
- Создавать и редактировать — провайдеров, профили безопасности, контентные политики, экспортеры.
- Генерировать отчёты — создавать и скачивать отчёты о соответствии.
- Анализировать события — просматривать события безопасности, фильтровать по типам и времени.
- Мониторить Dashboard — видеть статистику, графики, последние инциденты.
Ограничения:
- Не может удалять провайдеров, профили, политики (только admin).
- Не может управлять пользователями — создавать, удалять, назначать роли.
- Не может просматривать аудит — журнал действий доступен только admin.
- Не может изменять retention settings — только admin.
viewer¶
Назначение: Только просмотр (read-only)
Типичный пользователь: Аудитор, менеджер, внешний проверяющий
Роль viewer ограничена чтением данных без возможности изменений:
- Просматривать — все провайдеры, профили, политики, экспортеры, события, Dashboard.
- Скачивать отчёты — ранее сгенерированные отчёты (PDF, CSV).
Ограничения:
- Не может создавать, редактировать или удалять любые ресурсы.
- Не может генерировать отчёты (только скачивать существующие).
- Не может управлять пользователями.
- Не может просматривать аудит и retention settings.
Когда использовать: Для предоставления доступа внешним аудиторам или руководству без риска случайного изменения конфигурации.
Матрица прав доступа (RBAC)¶
Полная таблица разрешений по ролям:
| Ресурс / Операция | admin | operator | viewer |
|---|---|---|---|
| Providers | |||
| Просмотр списка и деталей | ✓ | ✓ | ✓ |
| Создание | ✓ | ✓ | — |
| Редактирование | ✓ | ✓ | — |
| Удаление | ✓ | — | — |
| Profiles | |||
| Просмотр списка и деталей | ✓ | ✓ | ✓ |
| Создание | ✓ | ✓ | — |
| Редактирование / активация | ✓ | ✓ | — |
| Удаление / архивация | ✓ | — | — |
| Content Policies | |||
| Просмотр | ✓ | ✓ | ✓ |
| Создание / редактирование | ✓ | ✓ | — |
| Удаление | ✓ | — | — |
| Exporters | |||
| Просмотр | ✓ | ✓ | ✓ |
| Создание / редактирование | ✓ | ✓ | — |
| Удаление | ✓ | — | — |
| Reports | |||
| Генерация (создание) | ✓ | ✓ | — |
| Скачивание | ✓ | ✓ | ✓ |
| Удаление | ✓ | ✓ | — |
| Security Events | |||
| Просмотр и фильтрация | ✓ | ✓ | ✓ |
| Dashboard | |||
| Просмотр метрик и графиков | ✓ | ✓ | ✓ |
| Audit Log | |||
| Просмотр журнала действий | ✓ | — | — |
| Retention Settings | |||
| Просмотр и изменение | ✓ | — | — |
| Users | |||
| Просмотр списка | ✓ | — | — |
| Создание / редактирование | ✓ | — | — |
| Удаление / блокировка | ✓ | — | — |
| Назначение ролей | ✓ | — | — |
Правило приоритета ролей: Если пользователю назначено несколько ролей (например, admin и viewer), применяется максимальный уровень привилегий.
Управление пользователями¶
Страница Пользователи доступна только пользователям с ролью admin по адресу /users в Admin UI.
Список пользователей¶
На странице отображается таблица со всеми зарегистрированными пользователями:
| Столбец | Описание |
|---|---|
| Username | Имя пользователя (уникальное) |
| Электронная почта | |
| ФИО | Имя и фамилия пользователя |
| Статус | Бейдж: Активный (зелёный) или Заблокирован (красный) |
| Email verified | Бейдж: ✓ Подтверждён или ⏳ Не подтверждён |
| Действия | Кнопки: просмотр, редактирование, управление ролями, блокировка/разблокировка, удаление |
Создание пользователя¶
- Нажмите кнопку Добавить пользователя в правом верхнем углу.
-
Заполните форму:
Поле Обязательное Валидация Описание Username Да Мин. 3 символа, уникальное Логин для входа в систему Email Да RFC 5322, уникальный Email (используется для уведомлений и восстановления пароля) Имя Да — Имя пользователя Фамилия Да — Фамилия пользователя Пароль Да Мин. 8 символов Начальный пароль пользователя Подтвердите пароль Да Должен совпадать с паролем Повтор пароля Роль Да Admin, Operator или Viewer Роль, назначаемая пользователю при создании -
Нажмите Создать пользователя.
- Пользователь создаётся в Keycloak с
enabled=trueиemailVerified=false.
Редактирование пользователя¶
- Нажмите иконку карандаша (✏️) в строке пользователя.
- Измените нужные поля: username, email, имя, фамилия.
- Нажмите Сохранить.
Ограничения:
- Пароль нельзя изменить через Admin UI — используйте Keycloak Admin Console (
http://localhost:8080) или функцию сброса пароля.
Управление ролями¶
- Нажмите иконку щита (🛡) в строке пользователя — откроется модальное окно Управление ролями пользователя.
-
В окне отображаются текущие роли пользователя с кнопками:
- Назначить — добавить роль (выбор из: admin, operator, viewer).
- Отозвать — убрать роль.
-
Изменения применяются немедленно — при следующем запросе OAuth2 Proxy получит обновлённый токен с новыми ролями.
Пример: Новый SOC-аналитик — создайте пользователя, назначьте роль operator. Он получит доступ к Dashboard, событиям, профилям и политикам, но не сможет удалять ресурсы или управлять пользователями.
Блокировка / разблокировка¶
- Нажмите иконку питания (⏻) в строке пользователя.
- Система попросит подтверждение.
- Заблокированный пользователь (
enabled=false) не сможет авторизоваться в Keycloak — его текущая сессия продолжит работать до истечения TTL cookie OAuth2 Proxy.
Когда использовать: Временная блокировка при расследовании инцидента, увольнение сотрудника. Для немедленного прекращения доступа также очистите сессии в Keycloak Admin Console.
Удаление пользователя¶
- Нажмите иконку корзины (🗑) в строке пользователя.
- Подтвердите удаление в диалоговом окне.
- Пользователь безвозвратно удаляется из Keycloak.
Внимание
Удаление необратимо. Аудитные записи, созданные этим пользователем, сохраняются (содержат имя и email на момент действия), но учётная запись восстановлению не подлежит — потребуется создать заново.
Архитектура аутентификации¶
Система аутентификации состоит из трёх компонентов:
- OAuth2 Proxy — проверяет сессию пользователя и перенаправляет на вход, если сессии нет.
- Keycloak — поставщик учётных записей (Identity Provider): хранит пользователей и роли, выполняет вход и выдаёт токены доступа.
- Серверная часть (Admin API) — при каждом запросе проверяет права доступа (роль пользователя).
Поток аутентификации:
- Пользователь открывает Admin UI в браузере.
- OAuth2 Proxy проверяет наличие активной сессии.
- Если сессия отсутствует или истекла — пользователь перенаправляется на страницу входа Keycloak.
- Пользователь вводит логин и пароль в Keycloak.
- Keycloak выдаёт токен доступа с данными пользователя: имя, email, роли (
groups). - OAuth2 Proxy создаёт сессию и возвращает пользователя в Admin UI.
- При каждом запросе серверная часть проверяет роль пользователя на основе данных из токена.
Keycloak интеграция¶
Начальная конфигурация¶
При первом запуске в production-режиме (make prod) автоматически выполняется инициализация Keycloak через контейнер keycloak-init:
-
Создание realm
llm-firewallс настройками:- Вход по email разрешён.
- Дублирование email запрещено.
- Защита от brute force включена.
- Сброс пароля включён.
- Редактирование username отключено.
-
Создание ролей в realm:
admin,operator,viewer. -
Создание OAuth2 клиента
admin-api:- Тип: public client (без client secret).
- Протокол: OpenID Connect.
- Redirect URIs:
http://localhost:4180/*,http://localhost:4180/oauth2/callback. - Standard flow + Direct access grants.
-
Создание начального администратора:
- Username: значение
ADMIN_USER_EMAIL(по умолчаниюadmin@llm-firewall.local). - Пароль: значение
ADMIN_USER_PASSWORD(по умолчаниюAdminPassword123!). - Роль:
admin.
- Username: значение
Важно
Смените пароль начального администратора сразу после первого входа!
Настройка для production¶
Для production-развёртывания рекомендуется изменить следующие параметры:
| Параметр | Где | Значение по умолч. | Рекомендация |
|---|---|---|---|
KEYCLOAK_ADMIN_PASSWORD |
docker-compose | admin |
Сложный пароль (16+ символов) |
ADMIN_USER_PASSWORD |
docker-compose | AdminPassword123! |
Сложный пароль |
ADMIN_USER_EMAIL |
docker-compose | admin@llm-firewall.local |
Реальный email |
| SSL Required | Keycloak Admin Console | none |
all (принудительный HTTPS) |
| Redirect URIs | Keycloak Admin Console | http://localhost:4180/* |
Реальный домен: https://admin.company.com/* |
Дополнительные политики паролей¶
Базовые требования к паролям (минимум 8 символов) можно ужесточить через Keycloak Admin Console:
- Откройте
http://localhost:8080→ Realmllm-firewall→ Authentication → Password Policy. - Добавьте правила:
| Правило | Описание | Рекомендация |
|---|---|---|
| Minimum Length | Минимальная длина | 12+ символов |
| Uppercase Characters | Обязательная заглавная буква | 1+ |
| Lowercase Characters | Обязательная строчная буква | 1+ |
| Digits | Обязательная цифра | 1+ |
| Special Characters | Обязательный спецсимвол | 1+ |
| Not Username | Пароль ≠ username | Включить |
| Password History | Запрет повторных паролей | 5 последних |
| Hashing Algorithm | Алгоритм хеширования | pbkdf2-sha256 (по умолч.) |
Аудит действий пользователей¶
Все изменения, выполняемые пользователями, записываются в журнал аудита (подробнее см. Аудит и журнал действий). Для каждого действия фиксируется:
| Поле | Описание | Пример |
|---|---|---|
user_id |
Имя пользователя | john.doe |
user_email |
john@company.com |
|
user_role |
Роль на момент действия | admin |
action |
HTTP-метод | POST, PUT, DELETE |
resource_type |
Тип ресурса | providers, profiles, users |
resource_id |
ID ресурса | a1b2c3d4-... |
request_body |
Тело запроса (с редакцией) | {"username": "new.user", "password": "***REDACTED***"} |
response_status |
HTTP-статус ответа | 201, 403 |
timestamp |
Время действия | 2026-03-13T14:30:00Z |
Редакция чувствительных данных: Поля password, secret, token, api_key в теле запроса автоматически заменяются на ***REDACTED*** перед записью в аудит.
Типичные конфигурации¶
Сценарий 1: Небольшая команда (5–10 человек)¶
1 admin — DevSecOps lead (управление системой, пользователями)
2 operator — SOC-аналитики (настройка профилей, реагирование)
2 viewer — Руководители (просмотр Dashboard, скачивание отчётов)
Один набор провайдеров и профилей на инсталляцию.
Сценарий 2: Аудит / compliance-проверка¶
Создать временного пользователя с ролью viewer:
username: auditor-2026-q1
Аудитор получает read-only доступ к:
- Dashboard (метрики)
- Security Events (инциденты)
- Reports (скачивание)
После проверки — заблокировать или удалить аккаунт.
Типичные проблемы и решения¶
Проблема: HTTP 403 при попытке операции¶
Симптом: Пользователь авторизован, но получает 403 при попытке создать/удалить ресурс.
Причины:
| # | Причина | Диагностика | Решение |
|---|---|---|---|
| 1 | Недостаточные права роли | viewer не может создавать ресурсы |
Назначьте роль operator или admin |
| 2 | Нет назначенных ролей | Откройте модальное окно Управление ролями пользователя в строке пользователя и проверьте текущие роли | Назначьте роль (см. Управление ролями) |
Проблема: начальный пароль не подходит¶
Симптом: Не удаётся войти под admin@llm-firewall.local с паролем по умолчанию.
Решение:
-
Проверьте, что
keycloak-initконтейнер выполнился успешно: -
Если realm не создался (Keycloak не был готов) — перезапустите:
-
Для ручного сброса — через Keycloak Admin Console:
Проблема: OAuth2 Proxy redirect loop¶
Симптом: Браузер зацикливается на странице логина Keycloak.
Причины:
| # | Причина | Решение |
|---|---|---|
| 1 | Redirect URI не совпадает | В Keycloak: Clients → admin-api → Valid Redirect URIs → добавьте ваш домен |
| 2 | Cookies не передаются (SameSite) | Настройте HTTPS или --cookie-samesite=lax в OAuth2 Proxy |
| 3 | Keycloak не доступен | Проверьте docker-compose ps keycloak, логи |