SecurityFlow Кабинет лицензий , откроется в новой вкладке

Документация / Устранение неполадок

Типовые ошибки

Обновлено 20 октября 2026

Таблицы собраны по разделам: симптом, причина, что сделать. Если симптома нет в таблицах, соберите сведения из раздела "Диагностика" и передайте их команде SecurityFlow.

Диагностика

Что проверить Как
Core жив GET /healthcheck/ на порту 8000 процесса API - ответ 200 с пустым телом
Связь Core с Radar "Radar" → "Настройки" → "Статус подключения" или GET /api/v1/ci/health-check/: ожидается {"is_healthy": true, "is_authenticated": true}
Фоновые задачи Core "Глобальные настройки" → "Активные задачи"
Radar жив GET /api/v1/health-check/ - {"is_healthy": true}; с токеном доступа GET /api/v1/auth-health-check/ - 200
Воркеры Radar "Настройки" → "Воркеры" в интерфейсе Radar
Ход джобы "Пайплайны" → пайплайн → "Логи" в интерфейсе Radar. Пайплайны аудита ищутся фильтром "Аудит"
Сервер лицензий из сети Core curl -sS -o /dev/null -w '%{http_code}\n' https://securityflow.ru/api/public-key - ожидается 200
Журналы Все процессы пишут в stdout и stderr контейнера: kubectl logs <под>

Подробнее - в разделе Мониторинг и журналы.

Установка и запуск

Симптом Причина Что сделать
Веб-интерфейс Core не запускается, в журнале host not found in upstream; или интерфейс открывается, а запросы к API отвечают 502 Имя сервиса API или приёма отчётов не разрешается при старте nginx, или процессы на портах 8000 и 8001 недоступны Проверьте сервисы бэкендов Core и их endpoints: kubectl -n securityflow-core get svc,endpoints. См. Маршрутизация запросов
Веб-интерфейс Radar не запускается, в журнале host not found in upstream; или интерфейс открывается, а запросы к API отвечают 502 Имя сервиса Radar back не разрешается при старте nginx, или API Radar на порту 8090 недоступен Проверьте сервис Radar back и его endpoints: kubectl -n securityflow-radar get svc,endpoints. Исполнителю задайте адрес API в AUDITOR_HOST
Страница /admin/ без стилей, /static/ отвечает 404 Веб-интерфейс Core отдаёт /static/ из каталога /var/www/static, а том со статикой Django, которую собирает подготовка (MODE=init), к нему не подключён Подключите к /var/www/static веб-интерфейса том со статикой, которую собрала подготовка. См. Установка в Kubernetes
Неизвестен пароль первого администратора ADMIN_PASSWORD был пустым: пароль сгенерирован и выведен в журнал подготовки один раз Найдите в журнале запуска с MODE=init или all строку [admin] Пароль сгенерирован автоматически. Если пользователь уже существовал, подготовка пароль не меняет: задайте новый командой python manage.py changepassword <ADMIN_USER> в контейнере sf-core-back
Периодические задачи выполняются дважды: двойные уведомления по расписанию, двойные запуски аудитов Запущено больше одного планировщика MODE=beat Оставьте одну реплику планировщика
После замены JWT_PRIVATE_KEY и JWT_PUBLIC_KEY Core не может подключиться к Radar, SSO и адресам уведомлений Токены интеграций в БД Core зашифрованы прежней парой ключей Верните прежнюю пару из резервной копии. Храните пару вместе с копией БД. См. Резервное копирование
Задачи автоматики стоят в очереди и не выполняются AUTOMATION_WORKER_CONCURRENCY у sf-core-db-helper слишком мал: три постоянных цикла (валидатор, дедупликатор, CVSS) занимают по слоту Задайте AUTOMATION_WORKER_CONCURRENCY=6
В "Активных задачах" всегда три задачи в работе Это постоянные циклы валидатора, дедупликатора и правил CVSS Ничего: так и должно быть
После перезапуска sf-radar-back все пайплайны в статусе "Остановлен" При старте API Radar останавливает все ожидающие и выполняющиеся пайплайны Перезапустите аудиты. Обновляйте и перезапускайте Radar вне окна сканирования
Свои джобы Radar пропали после перезапуска sf-radar-back При старте без токена доступа в БД Radar пересоздаёт каталог джоб из поставки Задайте токен доступа (ACCESS_TOKEN) до того, как добавлять свои джобы
Таймауты джоб не срабатывают, оценка длительности пайплайнов пустая У sf-radar-back не задан ACCESS_TOKEN: без него не работают проверка таймаутов и сбор статистики Задайте ACCESS_TOKEN и перезапустите sf-radar-back
Сохранение учётных данных в "Уч. Данные Docker" завершается ошибкой 500 DOCKER_ENCRYPTION_TOKEN не 16 и не 32 байта Задайте ключ длиной ровно 16 или 32 символа ASCII. См. Параметры конфигурации
На узле сканирования кончается место, джобы падают с "No space left on device" Тома пайплайнов и образы сканеров копятся в Docker-демоне исполнителя Уменьшите "Дней хранить артефакты до очистки" в "Очистка", удалите образы кнопкой "Удалить Образы Джоб", увеличьте диск. См. Настройки Radar

Лицензия

Симптом Причина Что сделать
Любой запрос к API отвечает 419 NO_LICENSE, интерфейс показывает "Активация лицензии" В Core нет действующей лицензии Активируйте ключ. См. Активация лицензии в Core
"Активация не удалась" с причиной "Лицензия не найдена" Ключ вставлен не целиком или выпущен для другого сервера лицензий Вставьте ключ целиком из PDF или кабинета. Пробелы и переносы строк Core уберёт сам
Причина "Лицензия отозвана" или "Срок лицензии истёк" Ключ отозван поставщиком или срок истёк Запросите новый ключ
Активация долго не отвечает или завершается ошибкой Нет связи с сервером лицензий: нет исходящего доступа к securityflow.ru:443, не разрешается имя, внешний адрес Core не согласован с поставщиком, LICENSE_SERVER указывает на прежний адрес Проверьте доступ командой из раздела "Диагностика". При ответе 403 сообщите поставщику внешний адрес Core. Для бэкенда старше 0.1.14 задайте LICENSE_SERVER=https://securityflow.ru
Активация проходит, но интерфейс снова показывает экран активации; в журнале sf-core-back "Signature verification failed." LICENSE_SERVER_PUBLIC_KEY не совпадает с ключом сервера лицензий или записан с ошибкой Задайте открытый ключ сервера лицензий целиком, переводы строк - как \n. Ключ отдаёт GET https://securityflow.ru/api/public-key. Перезапустите процессы Core
В журнале "Unable to decode the license." Ключ повреждён при копировании Скопируйте ключ заново и активируйте
Повторная активация отвечает 420 "License already activated" Лицензия в Core уже есть Замените ключ: "Глобальные настройки" → "Лицензия" → "Изменить лицензию"
Замена ключа отвечает 400 "Signature verification failed." или "License has expired." Новый ключ выпущен для другого сервера лицензий или его срок истёк Запросите действующий ключ. Текущая лицензия остаётся
Экран активации появился во время работы; в журнале процесса фоновых задач (MODE=worker) "Лицензия снята: ...", в журнале API "License has expired." Лицензия отозвана, удалена на сервере или истёк срок Получите новый ключ и активируйте. Данные и настройки сохранены. См. Лицензирование
В журнале "Лицензия: сервер недоступен ..., решение не меняем" или "сервер ответил ..., вердикта нет" Нет связи с сервером лицензий Лицензия действует до срока exp. Восстановите исходящий доступ к securityflow.ru:443
Функция показывает "Платная функция", API отвечает 403 "Paid feature only." Тариф не корпоративный Проверьте "Тариф" в карточке лицензии. Запросите корпоративную лицензию
"Radar не включен в ваш текущий план" Тариф "Демо" Запросите лицензию "Radar" или корпоративную

Вход

Симптом Причина Что сделать
"Invalid username/password." Неверный логин или пароль, или учётная запись отключена Проверьте раскладку и регистр. Пароль сбрасывает администратор. Отключённую учётную запись включает администратор в администрировании Django /admin/, флажок "Активный". См. Пользователи
"You can't login with password" У пользователя метод входа SSO Войдите кнопкой "Войти через SSO" или попросите администратора переключить "Метод авторизации" на "Пароль". См. Пользователи
После входа снова открывается экран входа DOMAIN начинается с https, а Core открыт по HTTP: браузер не сохраняет cookie с флагом Secure Открывайте Core по HTTPS-адресу из DOMAIN
Вход в /admin/ отклоняется ошибкой CSRF DOMAIN не совпадает с адресом, по которому открыт Core Задайте в DOMAIN внешний адрес со схемой, без слеша в конце
После перерыва в работе больше суток Core снова просит войти Токен обновления входа живёт 1 день и продлевается, пока вы работаете Войдите заново
API отвечает 401 "No credentials provided" Токен не передан или передан в заголовке Authorization: Bearer Передавайте Authorization: Token <токен>. См. API Core
API отвечает 403 с токеном пользователя У ролей пользователя нет нужного права или уровня Проверьте права ролей. См. Роли и права
Пользователь не видит часть продуктов Ограничение доступа ролей по продуктам и типам продуктов Проверьте поля роли "Может управлять всеми продуктами", "Имеет доступ к продуктам с типами", "Имеет доступ к продуктам"
"Изменение пароля не доступно для SSO пользователей" Пароль пользователя SSO хранит провайдер Меняйте пароль у провайдера SSO

Вход через SSO

Симптом Причина Что сделать
На экране входа нет кнопки SSO или "Пока нет никаких SSO интеграций" Интеграция SSO не создана или лицензия не корпоративная Создайте интеграцию в "Аккаунты и роли" → "Интеграции SSO". См. Вход через SSO
"An error occured while authorizing access token" Провайдер не выдал токен: адрес возврата в приложении провайдера не совпадает с "URL обратного вызова", неверные "ID клиента" или "Секрет клиента", сертификат провайдера не доверен Укажите у провайдера адрес https://<адрес Core>/oauth2/callback из "URL обратного вызова". Проверьте ID и секрет. Для самоподписанного сертификата провайдера есть флажок "Использовать самоподписанный сертификат": он отключает проверку TLS, включайте его только в изолированной сети
"The provided scope is invalid, unknown, or malformed" Провайдер не вернул email: в "Скопы" нет openid и email Для типа "Универсальный" впишите в "Скопы" openid profile email, сохраните и проверьте поле после сохранения
"SSO is not available for this email" Домен email не входит в "Разрешенные email домены" или пользователь с этим email входит по паролю Добавьте домен в список или переключите метод входа пользователя на "SSO"
"User <имя> already exists" Логин нового пользователя SSO - часть email до @, такой логин уже занят другим пользователем Измените логин существующего пользователя
"No OAuth app found" Сессия входа потеряна: возврат от провайдера пришёл на другой адрес Core или браузер не сохранил cookie Открывайте Core по тому же адресу, что указан в "URL обратного вызова"
После возврата от провайдера снова открывается экран входа Запрос на адрес обратного вызова /oauth2/callback не дошёл до API Core Направьте путь /oauth2/callback на входном прокси в API Core, порт 8000. См. Вход через SSO
Пользователь вошёл, но не видит разделов и продуктов Группам провайдера не назначены роли. Неизвестные группы добавляются в "Сопоставление внешних групп" без ролей Назначьте роли группам в "Сопоставление внешних групп" или задайте "Роли" интеграции. Проверьте "Ключ JSON в JWT токене со списком внешних групп"
Пользователя исключили из группы у провайдера, а права в Core остались Роли пользователя SSO при входе только добавляются, отзыв группы их не снимает При отзыве доступа снимите роли пользователя в Core вручную: "Аккаунты и роли" → "Пользователи"

Radar и сканирование

Симптом Причина Что сделать
"Статус подключения": "Недоступно: проверьте ваш Radar URL" Core не достаёт до API Radar: неверный "Radar URL", нет сетевого доступа, ошибка TLS Проверьте адрес и доступ из сети Core. Для собственного сертификата Radar проверьте доверие или настройку "Проверять SSL". См. Первичная настройка
"Не аутентифицировано: проверьте ваш токен доступа" "Токен доступа" в Core не совпадает с токеном Radar Укажите действующий токен доступа Radar в "Radar" → "Настройки"
Аудит создан, уязвимостей нет, в Radar нет пайплайна с этим аудитом Core не смог отправить запуск в Radar. Причина - в журнале фоновых задач Core Проверьте "Статус подключения" и журнал sf-core-back с MODE=worker, запустите аудит снова
Пайплайн долго в статусе "В ожидании" Все процессы исполнителя заняты, исполнитель не запущен ("Нет Доступных Воркеров") или токен исполнителя не принят: в журнале исполнителя "Aborting the pipeline" Дождитесь освобождения или увеличьте MAX_SCALEWORKERS_COUNT и число исполнителей. Проверьте ACCESS_TOKEN исполнителя. См. Как работает Radar
Джоба в статусе "Джоба остановлена", в логе "Failed to access scanning results: docker.NotFound" Отчёта нет по пути /data/$REPORT_FILE_NAME Исправьте команду запуска: отчёт - в /data, имя файла без подкаталогов. См. Джобы и последовательности
Сканер отработал, джоба остановлена на отправке отчёта Core не принял отчёт: SCAN_TYPE не совпадает с именем сканера в Core, AUDIT_ID не существует, Core недоступен по "Внутренний URL приложения", ошибка TLS Сверьте SCAN_TYPE с именем в "Глобальные настройки" → "Сканеры". Проверьте "Глобальные настройки" → "Рабочий процесс" → "Внутренний URL приложения": адрес должен открываться из сети Radar
Джоба в статусе "Джоба завершена", отчёт в Core не пришёл У пайплайна нет PORTAL_IMPORT_URL или PORTAL_TOKEN: пайплайн запущен напрямую в Radar без них Запускайте аудит из Core или задайте обе переменные при запуске в Radar
Джоба падает с "Missing required variables: [...]" Обязательная переменная джобы пуста Задайте значение в джобе или при запуске
Аудит без уязвимостей; в логе Code Downloader "/code folder is empty" или ошибка клонирования Code Downloader не скачал код. В каталоге у него включено "Разрешить падение", поэтому сканеры отработали по пустому каталогу Проверьте "Приватный SSH ключ" в "Radar" → "Настройки", доступ ключа к репозиторию и SSH URL ассета, сетевой доступ узлов сканирования к системе контроля версий. Выключите у Code Downloader "Разрешить падение": ошибка клонирования остановит пайплайн, а пустые отчёты не закроют найденные уязвимости автозакрытием. См. Джобы и последовательности
Ошибка скачивания образа сканера: нет доступа или нет образа Реестр приватный или недоступен из сети узлов сканирования. Образ скачивается при каждом запуске Добавьте учётные данные в "Уч. Данные Docker" и выберите их в поле "Учетные данные" джобы. Проверьте доступ к реестру
Джоба-сканер останавливается на чтении отчёта, в логе ошибка скачивания образа alpine Служебный образ UTILITY_IMAGE по умолчанию берётся из Docker Hub, а он недоступен Задайте UTILITY_IMAGE образом из вашего реестра
Джоба в статусе "Джоба прервана по тайм-ауту" Превышен "Таймаут джобы (в минутах)" или "Глобальный таймаут пайплайнов (в минутах)" Увеличьте таймаут. Значение 0 снимает ограничение
Пайплайн остановился на первой упавшей джобе У джобы выключено "Разрешить падение" Включите, если остальные джобы должны выполняться дальше
После включения автозакрытия решены уязвимости, которые не исчезали Один импортёр используется в нескольких джобах последовательности: отчёт одной джобы закрывает находки другой Оставьте импортёр в последовательности один раз или выключите автозакрытие для этого сканера. См. Настройки сканеров в Core
Расписание срабатывает не в те дни Поля cron в расписаниях Core идут в порядке минута час день_недели день_месяца месяц Переставьте третье и четвёртое поля
Расписание не запускает аудиты У расписания не задана область действия Укажите продукты или ассеты в области действия
Логи прошлых пайплайнов пропали Записи пайплайнов удаляются очисткой: "Дней хранить пайплайны до очистки", по умолчанию 1 Увеличьте срок хранения в "Очистка"

Импорт отчётов

Симптом Причина Что сделать
400 "<имя>" is not a valid choice. в поле scanner_name Сканера с таким именем нет в справочнике Core Укажите точное имя из "Глобальные настройки" → "Сканеры". См. Справочник сканеров
400 "At least one of the 'file' or 'report' fields is required." Нет ни файла, ни текста отчёта Передайте file или report
400 "Specify product name and product type or set default product" Продукт не определён: product_name и product_type не переданы вместе и не передан ни один ассет; или передан новый ассет, а продукт по умолчанию не назначен Передайте оба поля продукта или один ассет. Для отчётов по новым ассетам без продукта назначьте продукт по умолчанию. См. Продукты и ассеты
400 "Either specify product and product type or a single asset" Без продукта передано несколько ассетов Передайте продукт или один ассет
400 "Only one specified asset should exist" Ассет с таким значением есть в нескольких продуктах Передайте продукт явно или включите уникальные ассеты
400 "Audit with id N does not exist" Неверный audit_id Не передавайте audit_id: Core создаст аудит сам
401 или 403 Нет токена или у пользователя нет права "Уязвимости" с уровнем "Изменение" Проверьте заголовок Authorization: Token <токен> и права ролей
413 Отчёт больше лимита тела запроса на входном прокси площадки Согласуйте лимит с командой SecurityFlow. Отчёт целиком проходит через брокер, поэтому лимит должен быть меньше максимального размера сообщения брокера
500 при загрузке Файл не в кодировке UTF-8 Сохраните отчёт в UTF-8
Ответ 202, уязвимости не появились Не запущены sf-core-importer или sf-core-db-helper; все находки - дубликаты уже известных; отчёт не того формата, что ждёт импортёр сканера Проверьте процессы и их журналы. Откройте аудит: счётчики по сканеру покажут новые, известные и дубликаты. См. Импорт отчётов
Импорт без аудита: "Аудит недоступен" В импорте не указан ни один ассет Передайте ассет: repository, docker_image, domain, host или cloud_account
Продукт из запроса проигнорирован Включены уникальные ассеты: продукт определяется по ассету Перенесите ассет в нужный продукт или выключите уникальные ассеты

Jira

Симптом Причина Что сделать
Ошибка при сохранении шага "Аутентификация" Core проверяет учётные данные запросом к Jira: данные неверны или Jira недоступна из сети Core Проверьте метод аутентификации, данные и сетевой доступ. См. Jira
400 "Worker timeout" при работе с Jira sf-core-jira-helper не ответил за 15 с: процесс не запущен или Jira отвечает медленно Проверьте процесс sf-core-jira-helper и его журнал
Задачи не создаются при верификации Выключено "Создавать задачу в Jira автоматически при верификации уязвимости" в глобальных настройках или в настройках продукта; не задано пространство или тип задачи Включите настройку, задайте "Пространство команды" и "Тип задачи"
Задача для уязвимости не создаётся, ответ 409 "None of assigned groups allow task creation" Уязвимость состоит в группах, и ни у одной не включено "Создать задачи в Jira для уязвимостей" Включите настройку хотя бы у одной группы или уберите уязвимость из групп. См. Группы уязвимостей
Эпик группы не создаётся, ответ 409 "JIRA prod epic is already created" Эпик в этом пространстве у группы уже есть Ничего: задачи группы связываются с существующим эпиком
Изменения задачи в Jira не меняют статус уязвимости Выключено "Включить интеграцию вебхука" (Core отвечает 204 и игнорирует событие); неверный URL или токен вебхука; Jira не достаёт до Core; не выбраны события jira:issue_updated, jira:issue_deleted, issuelink_created, issuelink_deleted; статус Jira не сопоставлен Включите интеграцию на шаге "Настройка вебхука", скопируйте URL с токеном, проверьте доступ и события. Добавьте статус в "Сопоставление статусов задач"
Смена статуса в Core не переводит задачу Jira У статуса уязвимости нет сопоставления с включённым двусторонним обновлением Включите двустороннее обновление у одной записи на статус
Нельзя сопоставить статус "Назначено" Статус "Назначено" ставится по назначению исполнителя задачи в Jira Сопоставляйте остальные статусы
Задачи Jira удаляются при отклонении уязвимостей Включено "Удалять задачи для отклоненных уязвимостей" (по умолчанию включено) Выключите, если задачи нужно сохранять
Приоритет задачи не выставляется Выключено "Включить сопоставление приоритета" или нет записи для этой критичности Включите и заполните "Сопоставление приоритета задач"

Security checker

Симптом Причина Что сделать
Код 2, "set ASOC_DSN=https://host (or ASOC_URL)" Не задан адрес Core Задайте ASOC_DSN=https://<токен>@<адрес Core> или ASOC_URL и ASOC_TOKEN. См. Security checker
Код 2, "ASOC_DSN must look like https://host[:port] (token optional)" Неверный формат ASOC_DSN Используйте вид https://<токен>@host[:port]
Код 2, сообщение об отсутствии токена Токена нет ни в ASOC_DSN, ни в ASOC_TOKEN Передайте токен через защищённую переменную CI
Код 2, "ASOC_FAIL_ON: unknown severity" или "ASOC_GATE_MODE: допустимо open или new" Неверное значение переменной Уровни: info, low, medium, high, critical или none. Режим: open или new
Код 2, "cannot detect repository" или "cannot detect branch" Нет переменных CI и каталога .git или вне CI ветка не определилась, например при detached HEAD Задайте ASOC_REPO=group/project и ASOC_BRANCH
Код 2, в сообщении is not registered Репозиторий не заведён ассетом продукта в Core. Сравнивается путь group/project без учёта регистра Добавьте репозиторий ассетом продукта. Если в сообщении есть похожие ассеты, проверьте их SSH URL
Код 2, /ci/pipelines/run/ -> HTTP 403 У пользователя токена нет права "Radar" с уровнем "Изменение" или лицензия не открывает Radar Выдайте роль с правами "Radar" - "Изменение", "Уязвимости" - "Изменение", "Продукты" - "Просмотр": Radar отправляет отчёты токеном этого пользователя. Проверьте тариф
Код 2, "ended with status KILLED" или "ended with status TIMED_OUT" Пайплайн Radar упал или превысил таймаут Найдите пайплайн в Radar фильтром "Аудит" и разберите логи по разделу "Radar и сканирование"
Код 2, сообщение начинается с "timeout:" Проверка не уложилась в ASOC_TIMEOUT (по умолчанию 30 минут) Увеличьте ASOC_TIMEOUT. Проверьте, нет ли очереди пайплайнов в Radar
Код 2, "produced no results at all" Ни один отчёт не дал ни новых, ни известных уязвимостей, ни дубликатов: обычно Code Downloader не скачал код Проверьте лог Code Downloader. Для действительно пустого репозитория задайте ASOC_ALLOW_EMPTY=1
Код 2, "added N findings but only M are visible for branch" Core насчитал больше новых уязвимостей, чем видно по ветке. Например, две проверки одной ветки шли одновременно Не запускайте две проверки одной ветки одновременно. Перезапустите джобу
Код 1 из-за старых уязвимостей, хотя в коммите их нет Режим open учитывает все неразобранные уязвимости ветки: "Не обработано", "В работе", "Назначено" Разберите уязвимости в Core или задайте ASOC_GATE_MODE=new. В отчёте JUnit только новые уязвимости, полный список блокирующих - в логе джобы
Код 0 в режиме open, хотя скан добавил уязвимости блокирующих уровней Включён пин коммита (ASOC_PIN_COMMIT=1, по умолчанию). Режим open сочетайте с ASOC_PIN_COMMIT=0, проверку коммита - с режимом new Задайте ASOC_GATE_MODE=new или выключите пин: ASOC_PIN_COMMIT=0. См. Security checker
Проверка упала, а слияние всё равно доступно В проекте GitLab не включено слияние только после успешного пайплайна Включите это правило для защищённых веток
Ошибка TLS при обращении к Core, например x509: certificate signed by unknown authority Сертификат Core выпущен своим удостоверяющим центром Передайте файл с цепочкой сертификатов в переменной SSL_CERT_FILE. ASOC_INSECURE=1 отключает проверку - используйте только для отладки
Ссылки в выводе ведут на недоступный адрес В "Внешний URL приложения" указан внутренний адрес Исправьте "Внешний URL приложения" в "Глобальные настройки" → "Рабочий процесс" или задайте ASOC_WEB_URL