Руководство по безопасной настройке

Аутентификация, авторизация, сессии, шифрование, сетевой периметр, контейнеры, секреты
ООО «Рапид.Исследовательские системы»
Версия: 1.1.2
Дата: март 2026

1. Назначение и область применения

Элементы конфигурации 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/tcpHTTPS (TLS 1.2/1.3)Веб-интерфейс, API, SSOПользователи
80/tcpHTTPПеренаправление на HTTPSПользователи

5.2. Служебные порты

Следующие порты используются для внутренних коммуникаций и мониторинга. В production-среде рекомендуется ограничить доступ средствами firewall:

ПортПротоколНазначениеРекомендация
50100/tcpgRPCАналитическое ядро (master)Только внутренняя сеть
50111–50113/tcpgRPCАналитическое ядро (вычислительные узлы)Только внутренняя сеть
50150/tcpgRPCСервис импортаТолько внутренняя сеть
9428/tcpHTTPЖурналы (VictoriaLogs)Только localhost
8428/tcpHTTPМетрики (VictoriaMetrics)Только localhost
4317/tcpgRPCТрассировка (OpenTelemetry)Только внутренняя сеть
4318/tcpHTTPТрассировка (OpenTelemetry)Только внутренняя сеть

5.3. Внутренние протоколы

ВзаимодействиеПротоколПорт
Frontend → APIHTTPS (через Nginx)443
API → Аналитическое ядроgRPC50100
API → PostgreSQLPostgreSQL (SCRAM-SHA-256)5432
API → KeycloakHTTP (внутренняя сеть)8080
Импорт → Аналитическое ядроgRPC50100
Импорт ↔ ОчередьAMQP5672
Все → ЖурналыDocker logs → Vector → HTTP9428
Vector → SIEMTCP (JSON)Настраиваемый

5.4. Подключение к внешним сетям

Платформа не требует подключения к сети Интернет для функционирования. Все внешние вызовы (обновления, аналитика, gravatar) отключены. При необходимости подключения к внешним источникам данных (ClickHouse, ODBC) — настраивается через firewall по принципу «белого списка».

6. Шифрование и сертификаты

6.1. TLS-конфигурация (Nginx)

ПараметрЗначение
Поддерживаемые протоколыTLSv1.2, TLSv1.3
Набор шифровHIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4
Предпочтение серверных шифроввключено
HSTSmax-age=31536000; includeSubDomains
Перенаправление HTTP → HTTPSвключено (302)

6.2. Заголовки безопасности

ЗаголовокЗначение
X-Content-Type-Optionsnosniff
X-Frame-OptionsSAMEORIGIN
X-XSS-Protection1; mode=block
Referrer-Policystrict-origin-when-cross-origin
Permissions-Policycamera=(), microphone=(), geolocation=()
Content-Security-Policydefault-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; ...

6.3. Сертификаты

В дистрибутиве поставляется 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)rapeed1100:1100
Сервис импортаrapeed1100:1100
API платформыrapeedдинамический
Загрузка файловnode1000: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_syncookies1Защита от SYN-flood атак
tcp_fin_timeout15Ускорение освобождения соединений
tcp_keepalive_time300Обнаружение разорванных соединений
somaxconn65535Максимум ожидающих соединений
nf_conntrack_max1048576Таблица отслеживания соединений

9.2. Ядро

ПараметрЗначениеНазначение
vm.swappiness10Минимальное использование swap
kernel.panic10Автоматическая перезагрузка при panic
kernel.panic_on_oops1Panic при 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