Docker Analyzer — локальный дашборд для структурного анализа безопасности Docker-образов. Он не просто показывает сырой вывод сканера, а связывает выбранный policy template, отправленные Docker-образы, raw scan, CWE enrichment, vulnerability cache и итоговый отчёт одним стабильным идентификатором: request_id.
Какие проблемы решает проект:
- сырой Trivy output сложно передавать без контекста;
- несколько образов могут относиться к одному анализу и должны попадать в один отчёт;
- policy matching требует связи между CWE из шаблона и найденными уязвимостями;
- CWE enrichment должен кэшироваться и быть просматриваемым, а не выполняться вслепую каждый раз;
- failed/canceled/incomplete запуски должны иметь понятный статус и действия retry/edit/reset.
Реализованный workflow фиксированный и детерминированный:
- Пользователь открывает Запуск анализа.
- Пользователь выбирает policy template или создаёт custom template.
- Пользователь указывает Docker image digests в формате
image@sha256:.... - При необходимости пользователь включает secret scanning для отдельных образов.
- UI отправляет анализ в UI API.
- Orchestrator создаёт job и запускает backend pipeline.
- Service A сохраняет summary выбранного шаблона.
- Service C выполняет readiness checks.
- Service D запускает raw Trivy scan и пишет JSON-артефакты.
- Service E мапит уязвимости на CWE и обновляет cache.
- Service F читает артефакты и формирует финальные представления отчёта.
- UI показывает overview, findings, policy matches, incomplete items и vulnerabilities without CWE.
Стартовая страница даёт быстрый доступ к основному workflow, recent analyses, templates и cache. Это точка входа оператора.
Форма анализа содержит:
- редактируемый
request_id; - выбор policy template;
- создание custom template внутри flow;
- список Docker image digests;
- переключатель secret scan для каждого образа;
- валидацию перед запуском;
- live run status после запуска;
- cancel, retry, edit и clean-reset actions для failed/canceled запусков.
Страница деталей читает final report data по request_id и показывает:
- контекст пользовательского ввода;
- per-image overview по уязвимостям;
- все findings выше выбранного severity threshold;
- policy-relevant findings;
- findings с отсутствующими обязательными полями отчёта;
- findings без CWE mapping.
Раздел templates работает с двумя источниками шаблонов:
- system templates из
services/ServiceA-Templates/templates/templates.system.json; - user templates из
services/ServiceA-Templates/templates/templates.users.json.
Поддерживаемые действия:
- список шаблонов по perimeter:
INTERNAL,EXTERNAL,BOTH,ALL; - чтение полного шаблона;
- создание user template;
- удаление user template;
- обновление локального CWE catalog.
Создание шаблона использует три уровня. Backend валидирует веса, количество CWE на уровень и наличие CWE ID в локальном каталоге.
Страница cache показывает нормализованные cache entries из Service E. Уязвимости группируются по состоянию мапинга:
- mapped directly;
- mapped through alias;
- no CWE available;
- not found;
- incomplete.
Это помогает понять, какие мапинги надёжные, а какие требуют внимания.
Страница history использует browser-side state для recent analyses. Это не database-backed audit log, а удобный список для повторного открытия недавних request_id из того же браузера.
Frontend поддерживает переключение RU/EN. UI работает в тёмном визуальном стиле и использует React components, TanStack Query и browser local storage для лёгкого UI state: recent analyses, last selected perimeter и draft анализа.
Docker Analyzer рассчитан на локальное рабочее пространство анализа. В текущей реализации нет authentication layer, multi-user access model и внешней базы данных. Runtime state в основном хранится как JSON-артефакты в services/DockerHub и как lightweight browser state в local storage.