Перейти к основному содержанию

Безопасность

Около 5 мин

Информационная безопасность

StormBPMN Enterprise обеспечивает высокий уровень информационной безопасности через многоуровневую систему защиты, включающую регулярное обновление зависимостей, сканирование уязвимостей и гибкие настройки доступа.

Принципы безопасности

  • Минимальные привилегии - только необходимые права
  • Глубокая защита - многоуровневая система безопасности
  • Аудит всех действий - полное логирование операций
  • Шифрование данных - защита паролей и конфиденциальной информации

Переменные окружения безопасности

Базовые настройки безопасности задаются через ENV переменные:

ПеременнаяОписаниеПример значенияПо умолчанию
STORM_ALLOWED_ORIGINSРазрешенные источники запросов (CORS)https://stormbpmn.company.com*
STORM_DISABLE_SIMPLE_AUTHОтключить встроенную авторизациюtruefalse
STORM_DISABLE_ENV_IN_UIСкрыть ENV переменные в админкеtruefalse
STORM_DISABLE_ANON_SHARINGЗапретить анонимный доступ к диаграммамtruefalse
JWTSECRETСоль для шифрования паролейМинимум 15 случайных символов-
SESSION_EXPIRATIONСрок жизни сессии8640000086400000

Рекомендации по безопасности

  • STORM_ALLOWED_ORIGINS: Обязательно укажите конкретные домены вместо * в production
  • JWTSECRET: Используйте криптографически стойкую случайную строку
  • STORM_DISABLE_ENV_IN_UI: Включите в production для скрытия конфиденциальных данных

Настройки в административной панели

Управление пользователями

ПараметрОписаниеРекомендация для production
showRegistrationПоказать форму регистрации❌ Отключить
showBasicLoginПоказать поля логин/пароль❌ При использовании OAuth2
showCustomLoginButtonNameКастомный текст кнопки входаПо требованию
customLoginButtonNameТекст на кнопке входа"Войти через корпоративный аккаунт"

Публичный доступ

ПараметрОписаниеРекомендация для production
enableAnonSearchPageПоиск для неавторизованных❌ Отключить
allDiagramsAnonAccessАнонимный доступ ко всем диаграммам❌ Отключить

Корпоративные настройки

ПараметрОписаниеРекомендация
enableCommonAssetsОбщие элементы архитектуры для всех команд✅ Включить для больших компаний
enableCommonRolesОбщие роли для всех команд✅ Включить для унификации
enableCommonUsersОбщая оргструктура для всех команд✅ Включить для централизации

SIEM-логирование

StormBPMN поддерживает полное аудит-логирование всех действий пользователей с отправкой в системы SIEM.

Возможности

  • Полное логирование всех авторизованных операций
  • Маскирование паролей и авторизационных заголовков
  • Фильтрация больших данных (содержимое диаграмм не логируется)
  • Поддержка Syslog по протоколу TCP (RFC 3164 / RFC 5424)
  • Уникальные ID сессий для трассировки действий

Настройка Syslog

ПеременнаяОписаниеПример значенияОбязательно
AUDIT_ENABLEDВключение аудита запросовtrue
AUDIT_CHANNELКанал аудит-логовsyslog
SYSLOG_SERVERSСписок syslog серверовlocalhost:514,192.168.78.53:601
SYSLOG_SOURCEНазвание приложения в логахstormbpmn🔧
SYSLOG_MESSAGE_FORMATФормат логовRFC_5424 / RFC_3164🔧

Оригинальный IP-адрес пользователя

Для отображения оригинального IP-адреса нужно передать в контейнер заголовок X-Forwarded-For от вышестоящего прокси.

Структура лог-записи

{
  "timestamp": "2007-12-03T10:15:30:55.000000",
  "sessionId": "ergjieor-ergjniuo-qjwer",
  "source": "stormbpmn",
  "subject": "kotov@bpmn2.ru",
  "subjectIP": "192.168.0.1",
  "object": "uaerhgae-aerj3234-egerg",
  "resource": "diagram",
  "action": "CHANGE",
  "payload": {
    "method": "POST",
    "url": "/api/v1/diagram",
    "request": { "..." },
    "response": { "..." }
  },
  "result": "SUCCESSFUL"
}

Типы событий

ДействиеОписание
GETПросмотр объекта
CREATEСоздание объекта
CHANGEИзменение объекта
DELETEУдаление объекта
РезультатОписание
SUCCESSFULУспешная операция
CLIENT_ERRORОшибка клиента
SERVER_ERRORОшибка сервера

Включение / исключение методов из аудита

Дополнительная настройка фильтрации URL для аудит-логирования:

ПеременнаяОписаниеПример значения
AUDIT_INCLUDE_UNAUTH_PATHRegExp через запятую - URL методов для включения в аудит.*/auth/signin$
AUDIT_EXCLUDE_AUTH_PATHRegExp через запятую - URL методов для исключения из аудита.*/heartbeat$,.*/diagram/.*/autosave$

Примеры использования

  • Включить неавторизованные запросы: AUDIT_INCLUDE_UNAUTH_PATH=.*/auth/signin$
  • Исключить служебные запросы: AUDIT_EXCLUDE_AUTH_PATH=.*/heartbeat$,.*/health$,.*/diagram/.*/autosave$

Система авторизации

OAuth2 (рекомендуется)

Корпоративная авторизация через внешние провайдеры (Keycloak, Azure AD, и др.)

ПараметрОписаниеПример значения
OAuthIsEnabledВключение OAuth2true
OAuthClientIdID клиента в провайдереstormbpmn-client
OAuthClientSecretСекрет клиентаyour-client-secret
OAuthAuthorizeUriURL авторизацииhttps://keycloak.company.com/auth/realms/master/protocol/openid-connect/auth
OAuthUserInfoUriURL получения информации о пользователеhttps://keycloak.company.com/auth/realms/master/protocol/openid-connect/userinfo
OAuthTokenUriURL получения токенаhttps://keycloak.company.com/auth/realms/master/protocol/openid-connect/token
OAuthButtonLabelТекст на кнопке входа"Войти через корпоративный аккаунт"
OAuthRedirectUriURL возврата после авторизацииhttps://stormbpmn.company.com/app/signin

Настройка Keycloak

Пошаговая инструкция для Keycloak 26.0.7:

  1. Создать клиента в нужном realm
  2. Client ID: stormbpmn-client
  3. Valid redirect URIs: https://stormbpmn.company.com/app/signin
  4. Web origins: https://stormbpmn.company.com
  5. Client authentication: ON
  6. Standard flow: ON, Implicit flow: ON
  7. Client Scopes: email и profile должны быть default
  8. Получить Client Secret на вкладке Credentials

Microsoft ADFS

Особенности Microsoft ADFS

Компания Microsoft имеет специфический (альтернативно-одарённый) подход к стандартам OAuth2/OpenID Connect. В частности, ADFS не возвращает информацию о пользователе через стандартную ручку /userinfo, что усложняет интеграцию. Также интерфейсы ADFS (особенно в русской локализации) могут показаться запутанными.

Настройка авторизации через ADFS требует больше времени и внимания по сравнению с другими провайдерами.

Шаг 1: Настройка ADFS

Создание группы приложений
  1. В оснастке ADFS Management создайте группу приложений:
    Создание группы приложений

  2. В группе создайте 2 приложения:
    Серверное приложение

Настройка серверного приложения
  1. Первое приложение - Server application (серверное приложение):
    Настройка серверного приложения

  2. В настройках укажите:

    • Правильный Redirect URI перенаправления
    • Запомните Client ID и Client SecretВеб-API приложение
Настройка веб-API
  1. Второе приложение - Web API (веб-интерфейс API):

  2. Создайте Relying party identifier (идентификатор проверяющей стороны) и запомните его
    Политика доступа

Настройка политик доступа
  1. Выберите подходящую Access Control Policy (политику контроля доступа):
    Правила преобразования
Настройка маппинга атрибутов
  1. В разделе Issuance Transform Rules (Правила преобразования выдачи) настройте маппинг атрибутов:

    Маппинг атрибутовРазрешения клиента

Важно: маппинг claims

StormBPMN ожидает следующие claims в токене:

Поле StormBPMNОжидаемый claimТип
emailemailСтандартный
firstNamegiven_nameСтандартный
lastNamefamily_nameСтандартный
fullNamefull_nameКастомный
positionpositionКастомный

Кастомные claims (Полное Имя, Должность) должны быть созданы и опубликованы в описании утверждений (Claims Description).
Настройки в админке

Настройка разрешений
  1. Установите разрешения клиента:

Завершенная настройка

Если все шаги выполнены внимательно, настройка ADFS на стороне сервера завершена.

Шаг 2: Настройка StormBPMN

Параметры для настройки

Вам потребуются сохраненные значения:

  • Client ID (из серверного приложения)
  • Client Secret (из серверного приложения)
  • Resource identifier (идентификатор ресурса из Web API)
Настройка в административной панели
  1. Перейдите в административную панель: /app/admin → вкладка Безопасность

  2. Укажите следующие параметры:

ПараметрЗначениеПримечание
OAuthClientIdВаш Client IDИз серверного приложения ADFS
OAuthClientSecretВаш Client SecretИз серверного приложения ADFS
OAuthAuthorizeUri/adfs/oauth2/authorizeСтандартный путь ADFS
OAuthUserInfoUri/adfs/userinfoДля обратной совместимости (ADFS не использует эту ручку)
OAuthTokenUri/adfs/oauth2/tokenСтандартный путь ADFS
OAuthButtonLabel"Войти через ADFS"Текст на кнопке входа
OAuthIsEnabledtrueВключение OAuth2
OAuthRedirectUrihttps://your-storm-url/app/signinURL вашего StormBPMN
OAuthResponseTypecodeТип ответа
OAuthScopeopenid profile emailОбласти доступа
OAuthCodeChallengeMethodS256Метод challenge
OAuthFlowModePKCEРежим потока
OAuthResourceВаш Resource identifierИз Web API приложения

Завершенная настройкаЗавершенная настройка

Дополнительные требования

Сертификаты

На самоподписанных сертификатах интеграция работать не будет. Требуется добавить доверенные сертификаты по инструкции в этом разделе.

Тестирование

Настройка протестирована и гарантированно работает с:

  • Windows Server 2022
  • ADFS 4.0

Если интеграция не работает, проверьте:

  • Корректность всех параметров
  • Правильность маппинга claims
  • Наличие всех необходимых разрешений в ADFS
  • Доверенные сертификаты (если используются)

Проверка Claims

Дополнительная проверка прав в токене OAuth2:

ПараметрОписаниеПример значения
OAuthCheckClaimВключить проверкуtrue
OAuthClaimNameНазвание claimgroups
OAuthClaimValueТребуемое значениеstormbpmn-users

Встроенная авторизация

Только для тестирования

Встроенная авторизация подходит только для тестовых сред. В production используйте OAuth2.

Аварийный вход: Добавьте ?showBasicLogin=true к URL входа для доступа к базовой форме, даже если OAuth2 включен.


Добавление собственных SSL-сертификатов

Проблема

Если вы используете свой MinIO, S3 или другой HTTPS-сервис с самоподписанным сертификатом, Java внутри контейнера может не доверять ему. Это приведёт к ошибке:

javax.net.ssl.SSLHandshakeException: PKIX path building failed

Решение

Необходимо смонтировать свой truststore.jks, заменив стандартный truststore Java.

Шаг 1. Создание truststore.jks

Если у вас есть файл сертификата (например, minio-ca.crt), выполните:

keytool -importcert \
  -file minio-ca.crt \
  -alias my-root-ca \
  -keystore truststore.jks \
  -storepass changeit \
  -noprompt

Пароль truststore

Пароль changeit — стандартный для Java truststore. Можно использовать другой, но он должен совпадать в команде и при запуске.

Шаг 2. Путь к truststore в контейнере

Контейнер StormBPMN использует образ eclipse-temurin:11-jre-alpine. Путь к стандартному truststore:

/opt/java/openjdk/lib/security/cacerts

Проверка пути

Если монтирование не работает, проверьте актуальный путь командой:

docker run --rm eclipse-temurin:11-jre-alpine find /opt -name "cacerts" 2>/dev/null

Шаг 3. Запуск с заменой truststore

В docker-compose.yml:

services:
    stormbpmn:
        image: _ваш_образ_
        volumes:
            - ./truststore.jks:/opt/java/openjdk/lib/security/cacerts:ro

Или в командной строке:

docker run \
  -v $(pwd)/truststore.jks:/opt/java/openjdk/lib/security/cacerts:ro \
  _ваш_образ_

Результат

Java в контейнере будет использовать ваш truststore и доверять указанным сертификатам. Никаких изменений в переменных окружения не требуется.

Чек-лист безопасности

Обязательные настройки

Дополнительные меры


Связанная документация

Нужна помощь?

По вопросам безопасности обращайтесь к help@stormbpmn.com или вашему менеджеру.