Skip to main content
Version: 1.5

Запуск CLI-инструментов в Kubernetes

TRON ASOC позволяет запускать CLI-инструменты безопасности в виде временных подов Kubernetes. Под разворачивается на время сканирования, получает данные из репозитория, формирует отчет и передаёт его в ASOC как нативная интеграция. После завершения сканирования под останавливается автоматически.

На текущий момент поддерживается запуск следующих инструментов:

  • Semgrep;
  • PVS;
  • Trivy;
  • Grype;
  • KICS;
  • Manual — сторонний инструмент, из которого можно загрузить результаты сканирований в систему, которые будут учитываться при дальнейшей обработке данных. Результаты загружаются в формате JSON с теми же требованиями, которые представлены в разделе выше Загрузка внешнего отчета.
warning

Очень важно запускать CLI-инструменты в том же пространстве (namespace), в котором запущен и TRON ASOC. Любые попытки запуска инструментов в другом пространстве будут неуспешными.

Для создания и запуска инструмента необходимо выполнить следующие шаги:

  1. Перейти в раздел Интеграции → Инструменты безопасности.
  2. Нажать кнопку Добавить инструмент безопасности.
  3. Выбрать инструмент, поддерживающий запуск в Kubernetes (см. список выше).
  4. В открывшемся окне заполнить информацию об инструменте безопасности.
  5. Активировать переключатель Выполнять в Kubernetes

Добавление нового инструмента безопасности

  1. Заполнить YAML-шаблон запуска инструмента в Kubernetes.

YAML-шаблон инструмента безопасности

info

YAML-шаблон должен содержать следующие обязательные элементы:

  • переменную RESULT_PATH — путь внутри контейнера, по которому инструмент сохраняет отчет о сканировании и который передается в систему. Значение переменной заполняется в рамках плейсхолдера {{result_path}};
  • маркер завершения — строка, выводимая в лог контейнера строка, которая передает в TRON ASOC уведомление о состоянии задания.

Маркеры завершения представлены ниже:

  • Semaphore finished — этот маркер означает, что сканирование завершено успешно и отчет доступен по пути, указанном в переменной RESULT_PATH;
  • Semaphore error: — этот маркер означает, что сканирование завершено с ошибкой.
  1. После заполнения нажать кнопку Создать.

Далее необходимо создать проверку и запустить сканирование.

Особенности запуска CLI-инструментов

При создании и запуске необходимо учитывать следующие особенности:

  1. Задачи отправляются в кластер Kubernetes без очереди — каждая задача запускается немедленно при получении. Параллельный запуск обеспечивается внутренним воркером k8worker; по умолчанию доступно 10 воркеров, что позволяет одновременно выполнять до 10 задач.
info

Количество воркеров можно изменить в конфигурационном файле. Пример заполнения представлен ниже:

k8s:
k8s-workers-count: ${K8S_WORKERS_COUNT|10}
k8s-tasks-channel-size: ${K8S_TASKS_CHANNEL_SIZE|100} #
k8s-tasks-timeout-minutes: ${K8S_TASKS_TIMEOUT_MINUTES|60}
k8s-client-outside-mode: ${K8S_OUTSIDE|false}
k8s-namespace: ${K8S_NAMESPACE|default}
  1. Ресурсные ограничения для задач задаются двумя способами:
    • параметрами YAML-шаблона (поля resources.requests и resources.limits);
    • ограничениями на стороне кластера Kubernetes, настроенными администратором.

Плейсхолдеры YAML-шаблонов

Плейсхолдеры предназначены для автоматической подстановки данных из источника сканирования: при формировании проверки система подставляет актуальные значения в соответствующие поля YAML-шаблона. Плейсхолдеры и их обозначение представлены в таблице ниже.

ПлейсхолдерОбозначение плейсхолдера
{{type}}Тип репозитория или реестра
{{vcs_url}}URL системы контроля версий репозитория
{{source_url}}URL репозитория
{{file_path}}Путь к файлу в репозитории
{{file_path_route}}Часть пути к файлу в репозитории, оканчивающаяся на '/', без имени файла
{{source_url_token}}Токен URL репозитория
{{auth_method}}Метод аутентификации репозитория
{{api_token}}API-токен репозитория
{{login}}Логин репозитория или реестра
{{password}}Пароль репозитория или реестра
{{branch_name}}Название ветки репозитория
{{ssh_key}}SSH-ключ репозитория
{{ssh_user}}SSH-пользователь репозитория
{{ssh_passphrase}}Парольная фраза (passphrase) SSH-ключа
{{http_url}}HTTP(S) URL репозитория
{{api_url}}URL API реестра
{{registry_url}}URL реестра
{{image_name}}Имя образа в реестре
{{path_method}}Метод формирования пути в реестре
{{result_path}}Путь к файлу результата для парсинга найденных проблем
{{image}}Docker-образ инструмента
{{source_command}}Команда клонирования исходного кода
{{tool_command}}Команда запуска инструмента