Элементы конфигурации Rapeed BI, связанные с безопасностью. Для администраторов.
Компоненты работают в Docker Compose. Идентификация и доступ через Keycloak (OIDC). Журналы собирает Vector, хранит VictoriaLogs.
Все параметры, указанные ниже, являются рекомендуемыми значениями для production-развёртывания. Значения по умолчанию в дистрибутиве соответствуют данным рекомендациям, если не указано иное.
2. Аутентификация и парольная политика
Аутентификация пользователей через Keycloak (OpenID Connect). Локальной формы входа нет, только SSO.
2.1. Парольная политика
Параметр
Значение
Минимальная длина пароля
12 символов
Строчные буквы
минимум 1
Заглавные буквы
минимум 1
Цифры
минимум 1
Специальные символы
минимум 1
Совпадение с именем пользователя
запрещено
Совпадение с email
запрещено
Глубина истории паролей
5 последних паролей
2.2. Защита от подбора пароля
Параметр
Значение
Защита включена
да
Количество попыток до блокировки
5
Максимальное время блокировки
10 минут
Сброс счётчика неудачных попыток
через 12 часов
Перманентная блокировка
отключена
2.3. Многофакторная аутентификация (OTP)
Параметр
Значение
Тип
TOTP (Time-based One-Time Password)
Алгоритм
HMAC-SHA256
Длина кода
6 цифр
Период обновления
30 секунд
Повторное использование кода
запрещено
Обязательность для новых пользователей
да (defaultAction)
Поддерживаемые приложения
FreeOTP, Google Authenticator, Microsoft Authenticator
2.4. Обязательные действия при первом входе
Смена пароля: обязательна для всех новых пользователей
Настройка OTP: обязательна для всех новых пользователей
2.5. Самостоятельная регистрация
Самостоятельная регистрация пользователей отключена. Создание учётных записей возможно только администратором через консоль Keycloak.
3. Авторизация и управление доступом
3.1. Ролевая модель
Управление доступом реализовано через атрибуты пользователей, передаваемые в токене доступа:
Атрибут
Описание
Доступ
is_superuser
Администратор системы
Полный доступ: данные, настройки, журналы, мониторинг, администрирование
is_auditor
Аудитор ИБ
Доступ к журналам событий безопасности
read_only
Пользователь «только чтение»
Просмотр данных без возможности изменения
—
Обычный пользователь
Работа с данными в рамках назначенных прав рабочего пространства
3.2. Ограничение доступа к интерфейсам
Интерфейс
Метод защиты
Кто имеет доступ
Рабочий интерфейс
Keycloak SSO (OIDC)
Все аутентифицированные пользователи
Панель администрирования
Keycloak SSO + проверка is_superuser
Только администраторы
Журналы событий
OAuth2 Proxy + проверка is_superuser / is_auditor
Администраторы и аудиторы
Мониторинг (Grafana)
OAuth2 Proxy + Keycloak SSO
Администраторы: полный доступ; остальные: просмотр
Очередь сообщений
OAuth2 Proxy
Аутентифицированные пользователи
Консоль Keycloak
Встроенная аутентификация
Только администраторы Keycloak
API платформы
Bearer-токен (access token)
По ролям и правам рабочего пространства
3.3. Права на данные
Гранулярные права настраиваются на уровне:
Рабочее пространство: доступ к набору источников
Источник данных: чтение / запись
Поле: видимость отдельных полей
Элемент: фильтрация по значениям
Экспорт: проверка прав при выгрузке данных
4. Управление сессиями и токенами
Параметр
Значение
Описание
Время жизни токена доступа
15 минут
После истечения требуется обновление через refresh token
Таймаут бездействия сессии
30 минут
При отсутствии активности пользователь перенаправляется на повторную аутентификацию
Максимальное время сессии
10 часов
Абсолютный лимит, после которого требуется повторный вход
Время жизни кода авторизации
60 секунд
Одноразовый код OIDC
Время жизни ссылки на действие (от администратора)
12 часов
Ссылка на сброс пароля и т.п.
Время жизни ссылки на действие (от пользователя)
5 минут
PKCE для публичных клиентов
S256
Защита от перехвата кода авторизации
Все публичные клиенты (frontend-приложения) используют PKCE с методом S256 для защиты потока авторизации.
5. Сетевой периметр и протоколы
5.1. Внешние порты
По умолчанию платформа обслуживает пользователей через reverse proxy (Nginx):
Порт
Протокол
Назначение
Доступ
443/tcp
HTTPS (TLS 1.2/1.3)
Веб-интерфейс, API, SSO
Пользователи
80/tcp
HTTP
Перенаправление на HTTPS
Пользователи
5.2. Служебные порты
Следующие порты используются для внутренних коммуникаций и мониторинга. В production-среде рекомендуется ограничить доступ средствами firewall:
Порт
Протокол
Назначение
Рекомендация
50100/tcp
gRPC
Аналитическое ядро (master)
Только внутренняя сеть
50111–50113/tcp
gRPC
Аналитическое ядро (вычислительные узлы)
Только внутренняя сеть
50150/tcp
gRPC
Сервис импорта
Только внутренняя сеть
9428/tcp
HTTP
Журналы (VictoriaLogs)
Только localhost
8428/tcp
HTTP
Метрики (VictoriaMetrics)
Только localhost
4317/tcp
gRPC
Трассировка (OpenTelemetry)
Только внутренняя сеть
4318/tcp
HTTP
Трассировка (OpenTelemetry)
Только внутренняя сеть
5.3. Внутренние протоколы
Взаимодействие
Протокол
Порт
Frontend → API
HTTPS (через Nginx)
443
API → Аналитическое ядро
gRPC
50100
API → PostgreSQL
PostgreSQL (SCRAM-SHA-256)
5432
API → Keycloak
HTTP (внутренняя сеть)
8080
Импорт → Аналитическое ядро
gRPC
50100
Импорт ↔ Очередь
AMQP
5672
Все → Журналы
Docker logs → Vector → HTTP
9428
Vector → SIEM
TCP (JSON)
Настраиваемый
5.4. Подключение к внешним сетям
Платформа не требует подключения к сети Интернет для функционирования. Все внешние вызовы (обновления, аналитика, gravatar) отключены. При необходимости подключения к внешним источникам данных (ClickHouse, ODBC) — настраивается через firewall по принципу «белого списка».
В дистрибутиве поставляется self-signed сертификат. При развёртывании необходимо заменить на сертификат, выпущенный корпоративным удостоверяющим центром (CA):
Файл сертификата: /etc/nginx/certs/rapeed.crt
Файл ключа: /etc/nginx/certs/rapeed.key
6.4. Хеширование паролей
Компонент
Алгоритм
Keycloak (пользователи)
PBKDF2-SHA512 (27500 итераций)
PostgreSQL (подключение)
SCRAM-SHA-256
6.5. Шифрование конфигурации
Секреты (пароли БД, client secrets, ключи шифрования) хранятся в зашифрованном файле .env.enc. Шифрование: SOPS с бэкендом AGE (X25519). Расшифровка только при наличии ключа SOPS_AGE_KEY, передаваемого отдельно от дистрибутива.
7. Журналирование и мониторинг
7.1. Архитектура
Все контейнеры пишут журналы в stdout/stderr. Vector собирает их через Docker API, обогащает атрибутами ИБ и направляет в хранилище и SIEM:
Сбор: Vector (docker_logs source)
Хранение: VictoriaLogs (retention: 90 дней, лимит: 10 ГБ)
Визуализация: Grafana (доступ через OAuth2 Proxy)
SIEM: TCP-сокет (настраиваемый адрес)
7.2. Атрибуты событий безопасности
Атрибут
Описание
Пример
timestamp
Дата и время события
2026-03-24T10:15:30Z
vendor
Наименование вендора
Rapeed
product
Наименование продукта
Rapeed Platform
product_version
Версия
1.1.2
host
Имя хоста
rapeed-prod-01
event_id
Уникальный идентификатор события
UUID v4
event_type_id
Тип события
SEC-001
ib_severity
Уровень важности
HIGH / MEDIUM / INFO
result
Результат операции
SUCCESS / FAILURE
container_name
Источник события
widgets, keycloak
7.3. Классифицированные типы событий
Код
Тип события
Источник
SEC-001
Вход в систему
Keycloak
SEC-002
Выход из системы
Keycloak
SEC-005
Создание пользователя
Keycloak
SEC-006
Изменение параметров пользователя
Keycloak
SEC-007
Удаление пользователя
Keycloak
SEC-008
Изменение ролей пользователя
Keycloak
SEC-009
Изменение групп
Keycloak
SEC-024
Действия администратора
API платформы
SEC-025
Экспорт данных
API платформы
7.4. Интеграция с SIEM
Для подключения к корпоративной SIEM задайте переменную окружения:
SIEM_ADDRESS — адрес и порт SIEM-коллектора (например, siem.corp.local:10520)
Протокол: TCP, формат: JSON. При отсутствии переменной отправка в SIEM отключена.
7.5. Обезличивание
Имена пользователей в журналах обезличиваются функцией маскирования. В журнал записываются первые 2 символа и хеш, а не полное имя.
8. Контейнеры и среда исполнения
8.1. Пользователи контейнеров
Все собственные компоненты запускаются от непривилегированного пользователя:
Компонент
Пользователь
UID:GID
Аналитическое ядро (IDS)
rapeed
1100:1100
Сервис импорта
rapeed
1100:1100
API платформы
rapeed
динамический
Загрузка файлов
node
1000:1000
Микросервисы
rapeed
динамический
Инициализация прав на тома выполняется одноразовым контейнером init-permissions при первом запуске.
8.2. Проверка работоспособности (Healthcheck)
Все компоненты платформы имеют настроенные healthcheck-и с интервалом 10–30 секунд. При неуспешной проверке Docker автоматически перезапускает контейнер.
8.3. Журналирование контейнеров
Параметр
Значение
Драйвер журналирования
json-file
Максимальный размер файла
50 МБ
Максимальное количество файлов
5
9. Операционная система
Скрипт check-tune-os.sh, входящий в дистрибутив, проверяет и настраивает параметры ОС хоста:
9.1. Сетевая защита
Параметр
Значение
Назначение
tcp_syncookies
1
Защита от SYN-flood атак
tcp_fin_timeout
15
Ускорение освобождения соединений
tcp_keepalive_time
300
Обнаружение разорванных соединений
somaxconn
65535
Максимум ожидающих соединений
nf_conntrack_max
1048576
Таблица отслеживания соединений
9.2. Ядро
Параметр
Значение
Назначение
vm.swappiness
10
Минимальное использование swap
kernel.panic
10
Автоматическая перезагрузка при panic
kernel.panic_on_oops
1
Panic при kernel oops
Рекомендуется отключить swap на хосте для предсказуемой производительности аналитического ядра.
10. Хранение секретов
10.1. Механизм
Все секреты (пароли БД, client secrets Keycloak, ключи шифрования) хранятся в зашифрованном файле .env.enc:
Параметр
Значение
Инструмент шифрования
Mozilla SOPS
Бэкенд шифрования
AGE (X25519 / ChaCha20-Poly1305)
Расположение зашифрованного файла
.env.enc (в дистрибутиве)
Ключ расшифровки
SOPS_AGE_KEY (передаётся отдельно от дистрибутива)
10.2. Перечень секретов
Секрет
Назначение
POSTGRES_PASSWORD
Пароль базы данных
KC_ADMIN_PASSWORD
Пароль администратора Keycloak
RABBITMQ_PASS
Пароль очереди сообщений
PIVOT_MS_ENCRYPTION_KEY
Ключ шифрования данных сводных таблиц
KEYCLOAK_CLIENT_SECRET_*
Секреты сервисных клиентов (по одному на клиент)
10.3. Рекомендации при развёртывании
Каждый экземпляр платформы должен использовать уникальные пароли для всех сервисов
Ключ SOPS_AGE_KEY не должен храниться на том же носителе, что и дистрибутив
При повторном развёртывании рекомендуется ротация client secrets в Keycloak