Документация / Устранение неполадок
Типовые ошибки
Таблицы собраны по разделам: симптом, причина, что сделать. Если симптома нет в таблицах, соберите сведения из раздела "Диагностика" и передайте их команде 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 |