Документация / Руководство администратора / Настройки платформы
Настройки Radar
Настройки Radar живут в двух местах:
- в интерфейсе Radar, меню "Настройки": "Очистка", "Уч. Данные Docker", "Воркеры", "Персонализация", "DNS", "Таймаут Пайплайнов";
- в Core, "Radar" → "Настройки": подключение к Radar, SSH-ключ для репозиториев, учётные данные реестра для сканеров.
Как Radar выполняет пайплайны: Как работает Radar. Джобы и последовательности: Джобы и последовательности.
Токен доступа
У Radar нет пользователей и ролей. Доступ к интерфейсу и API даёт один общий токен доступа:
- администратор входит в интерфейс Radar по нему: поле "Токен Авторизации", кнопка "Войти с Токеном";
- воркеры Radar передают его в API Radar из параметра
ACCESS_TOKEN; - Core передаёт его в API Radar из поля "Токен доступа".
Токен передаётся в заголовке Authorization: Bearer <токен>. Radar хранит только хеш bcrypt и сам токен показать не может. Храните токен в хранилище секретов и передавайте администраторам защищённым каналом.
Выпуск при установке
Токен выпускает команда SecurityFlow при установке:
- Генерирует случайный токен.
- Задаёт его в параметре
ACCESS_TOKENдля API и воркеров Radar. - При первом запуске API записывает хеш токена в свою базу, если токена там ещё нет.
- Тот же токен вносится в Core: "Radar" → "Настройки" → "Токен доступа".
ACCESS_TOKEN в окружении API включает ещё и фоновые задачи Radar: проверку таймаутов раз в 10 секунд и сбор статистики времени джоб раз в час. Без него таймауты не срабатывают. Значение ACCESS_TOKEN должно совпадать с токеном, созданным в Radar.
Смена токена
Меняйте токен при компрометации, смене администраторов и по регламенту ротации секретов. Смену выполняет команда SecurityFlow по заявке.
- Команда SecurityFlow записывает хеш нового токена в базу Radar на место старого и задаёт новое значение
ACCESS_TOKENдля API и воркеров. - API и воркеры Radar перезапускаются. Старый токен перестаёт приниматься после перезапуска API.
- Администратор вносит новый токен в Core: "Radar" → "Настройки" → "Токен доступа" - и проверяет "Статус подключения".
- Администраторы входят в интерфейс Radar с новым токеном.
Перезапуск останавливает сканы
При старте API Radar останавливает все пайплайны в статусах "В ожидании" и "Выполняется". Планируйте смену токена на время без сканирования.
Не удаляйте токен из базы Radar
Если в базе нет токена, API при старте удаляет все джобы и создаёт их заново из поставки. Свои джобы и изменённые настройки джоб, в том числе пути образов, пропадут. Новый токен записывают на место старого.
Сменить токен только в параметре ACCESS_TOKEN нельзя: API запишет новое значение, лишь когда токена в базе нет, а воркеры с новым значением получат отказ и не возьмут пайплайны в работу.
Ограничьте сетевой доступ к интерфейсу и API Radar: к ним должны обращаться только Core, воркеры Radar и администраторы. Сетевые потоки: Сетевое взаимодействие.
Подключение Core к Radar
Раздел Core: "Radar" → "Настройки". Нужна роль с правом "Radar": "Изменение" и лицензия, которая открывает Radar: корпоративная или Radar.
Аутентификация
Шаг 1 "Аутентификация":
| Поле | Что задаёт | По умолчанию |
|---|---|---|
| "Radar URL" | базовый адрес Radar, например https://radar.example.ru/; косую черту в конце Core добавит сам |
- |
| "Токен доступа" | токен доступа Radar; хранится зашифрованным | - |
| "Проверять SSL" | проверка TLS-сертификата Radar | включено |
Блок "Статус подключения" показывает два признака. Кнопка "Проверить подключение" обновляет их.
| Признак | Норма | Ошибка и что проверить |
|---|---|---|
| доступность | "Подключено" | "Недоступно: проверьте ваш Radar URL" - адрес, сеть, сертификат |
| токен | "Аутентифицировано" | "Не аутентифицировано: проверьте ваш токен доступа" - токен |
Через API: GET /api/v1/ci/health-check/ возвращает {"is_healthy": true, "is_authenticated": true}.
Отчёты Radar отправляет обратно в Core на "Внутренний URL приложения" из "Глобальные настройки" → "Рабочий процесс": <внутренний URL>api/v1/scan/import/. Этот адрес должен открываться из сети воркеров Radar.
Окружение пайплайнов
Шаг 2 "Настройки окружения пайплайнов". Значения Core передаёт в каждый пайплайн переменными:
| Поле | Переменная | Скрытая | Назначение |
|---|---|---|---|
| "Приватный SSH ключ" | PRIVATE_SSH_KEY |
да | клонирование репозиториев джобой Code Downloader; один ключ на все репозитории |
| "Пользователь Docker-репозитория" | DOCKER_REGISTRY_USER |
нет | доступ сканеров образов к реестру |
| "Пароль Docker-репозитория" | DOCKER_REGISTRY_PASSWORD |
да | то же |
| "Адрес Docker-репозитория" | DOCKER_REGISTRY_ADDRESS |
нет | то же |
Значения хранятся в Core зашифрованными. Для реестров с интеграцией в Core учётные данные подставляются автоматически.
Публичную часть SSH-ключа добавьте в системы контроля версий как ключ только для чтения.
Скрытые переменные видны сканерам
Скрытые переменные маскируются только в логах джоб. В окружении контейнера каждой джобы пайплайна они доступны. Используйте только доверенные образы сканеров.
Учётные данные реестра
Radar скачивает образ джобы перед каждым запуском. Если образ лежит в закрытом реестре, нужны учётные данные. Их два вида:
| Где | Для чего | Как попадают к джобе |
|---|---|---|
| Radar: "Настройки" → "Уч. Данные Docker" | скачать образ самой джобы | привязываются к джобе полем "Учетные данные"; перед скачиванием Radar выполняет вход в реестр |
| Core: "Radar" → "Настройки", шаг 2 | сканировать образы из закрытого реестра | переменные DOCKER_REGISTRY_* в окружении джобы |
Экран "Уч. Данные Docker" в Radar:
| Поле | Что задаёт |
|---|---|
| "Docker-реджистри" | адрес реестра, например registry.example.ru |
| "Имя пользователя" | учётная запись реестра |
| "Пароль" | пароль или токен; API возвращает только признак, что пароль задан |
Тот же список доступен в Core: "Radar" → "Настройки", блок "Учетные данные Docker для получения образов джоб". Он работает, когда подключение к Radar настроено.
Пароли Radar шифрует ключом из параметра установки DOCKER_ENCRYPTION_TOKEN длиной 16 или 32 байта. После смены ключа сохранённые пароли не расшифровываются: удалите и создайте учётные данные заново.
Воркеры
Экран "Воркеры" только показывает состояние, настроек на нём нет.
| Блок | Что показывает |
|---|---|
| "Пайплайн" | воркеры, которые выполняют пайплайны |
| "Утилиты" | воркеры технических задач: остановка джоб, очистка образов и томов |
| "Воркеры:", "Потоки:", "Всего:", "Используется:" | число воркеров, процессов и занятых процессов |
Нет ни одного воркера - экран показывает "Нет Доступных Воркеров", пайплайны не выполняются.
- Один процесс воркера выполняет один пайплайн. Джобы внутри пайплайна идут по очереди.
- Одновременно выполняется столько пайплайнов, сколько процессов у всех воркеров пайплайнов. Процессов на воркер - не больше значения параметра установки
MAX_SCALEWORKERS_COUNT, по умолчанию 2. - Лимитов CPU и памяти на контейнеры сканеров Radar не ставит. Ресурсы закладывайте на уровне узлов воркеров: Расчёт ресурсов.
Изменить число воркеров и процессов - задача команды SecurityFlow: Запуск, остановка и масштабирование.
API: GET /api/v1/workers/total/ и GET /api/v1/workers/active/.
DNS
Экран "DNS" задаёт DNS-серверы для контейнеров джоб. Подсказка экрана: "Значения DNS используются в джобах для работы с вашими доменами".
| Элемент | Назначение |
|---|---|
| "Адрес сервера" | IP-адрес DNS-сервера |
| "Комментарий" | пояснение |
| "Добавить Адрес Сервера" | ещё один сервер |
| "Сохранить DNS" | сохранить список |
- Список пуст - контейнеры джоб используют DNS демона Docker.
- Записи без адреса пропускаются.
- Используйте, когда сканеры должны разрешать внутренние домены, которых не знает DNS по умолчанию на узлах воркеров.
После изменения запустите тестовый пайплайн с джобой по домену и проверьте в логе, что домен разрешается.
API: GET, POST /api/v1/dns/.
Таймауты
| Таймаут | Где задаётся | Единица | 0 | Что происходит |
|---|---|---|---|---|
| джобы | поле джобы "Таймаут джобы (в минутах)" | минуты | без таймаута | контейнер джобы останавливается, джоба получает "Джоба прервана по тайм-ауту" |
| пайплайна | "Настройки" → "Таймаут Пайплайнов" → "Глобальный таймаут пайплайнов (в минутах)" | минуты | без таймаута | пайплайн, который выполняется дольше, останавливается со статусом "Тайм-аут" |
- По умолчанию глобальный таймаут - 0.
- Таймауты проверяются раз в 10 секунд, если у API задан
ACCESS_TOKEN. - Джоба, прерванная по таймауту, останавливает пайплайн, если у неё выключено "Разрешить падение".
Задайте глобальный таймаут: зависший пайплайн занимает процесс воркера, пока его не остановят.
Фиксированные таймауты, которые не настраиваются:
| Запрос | Таймаут |
|---|---|
| отправка отчёта в Core | 20 секунд; не уложились - джоба завершается с ошибкой |
| Core → Radar, чтение и изменение | 10 секунд |
| Core → Radar, запуск пайплайнов | 60 секунд |
API: GET, POST /api/v1/timeout/ с полем pipelines_timeout.
Очистка
Экран "Очистка" задаёт срок хранения томов и записей пайплайнов.
| Поле | Что удаляется | По умолчанию | Ограничения |
|---|---|---|---|
| "Дней хранить артефакты до очистки" | тома Docker старше N дней по дате создания: код из репозиториев, отчёты, артефакты джоб | 1 | 0 и больше |
| "Дней хранить пайплайны до очистки" | записи завершённых пайплайнов старше N дней вместе с джобами и логами | 1 | не меньше срока артефактов |
- Очистка запускается раз в сутки в 00:00 UTC: часовой пояс планировщика Radar не настраивается.
- После очистки артефакты и логи удалённых пайплайнов не скачать.
- Значение 0 удаляет все неиспользуемые тома при каждом запуске, в том числе общий том пайплайна, который в полночь ждёт следующую джобу. Оставляйте не меньше 1.
Кнопка "Удалить Образы Джоб" удаляет с демона Docker все образы, указанные в настройках джоб. Образ одной джобы удаляет "Удалить Образ" в её карточке. Следующий запуск скачает образ заново.
API: GET, POST /api/v1/cleaner-config/.
Очистка затрагивает все тома демона Docker
Очистка удаляет все неиспользуемые тома демона Docker, на котором Radar запускает сканеры, а не только тома Radar. Запускайте Radar на выделенном демоне Docker и не размещайте на нём другие контейнеры и тома.
Персонализация
Экран "Персонализация" меняет "Тему" и язык интерфейса Radar: русский, английский или узбекский. На работу пайплайнов не влияет.
Проверка
- В Core "Статус подключения" показывает "Подключено" и "Аутентифицировано".
- В Radar на экране "Воркеры" есть воркеры пайплайнов и утилит.
- Запустите аудит тестового продукта из Core: пайплайн появился в Radar и дошёл до статуса "Завершен", в Core появился аудит с уязвимостями.
- Без входа API Radar отвечает на
GET /api/v1/health-check/телом{"is_healthy": true}.