Короткий ответ
Сканирование образа — проверка слоёв Docker-образа (ОС-пакетов, библиотек, бинарников) на известные уязвимости (CVE) с помощью специализированных инструментов (Trivy, Grype, Clair); его запускают при сборке образа в CI и/или перед деплоем, а не только вручную время от времени.
Как это работает подробнее
сканер сопоставляет версии установленных пакетов в образе с базами известных уязвимостей (NVD и другими) и выводит список найденных CVE с уровнем серьёзности (Critical/High/Medium/Low) и, если есть, версией с исправлением.
Пример кода
security-example-444.sh
trivy image myapp:1.4.0
myapp:1.4.0 (alpine 3.18.4)
=============================
Total: 3 (CRITICAL: 1, HIGH: 2)
┌─────────┬────────────────┬──────────┬───────────────┐
│ Library │ Vulnerability │ Severity │ Fixed Version │
├─────────┼────────────────┼──────────┼───────────────┤
│ openssl │ CVE-2024-XXXXX │ CRITICAL │ 3.1.4-r2 │
└─────────┴────────────────┴──────────┴───────────────┘Что использовать на практике
- Практика. сканирование включают шагом в CI-пайплайн сразу после сборки образа, чтобы уязвимый образ не попал в registry или хотя бы не ушёл в прод; для базовых образов выбирают минимальные дистрибутивы (alpine, distroless), которые уменьшают поверхность уязвимостей.
- Проверка. Ожидаемое поведение: вывод показывает конкретную уязвимую библиотеку и версию с исправлением; шаг CI с trivy image --exit-code 1 --severity CRITICAL должен завершиться с ошибкой и остановить пайплайн, пока образ не обновят.
Подводные камни
- Ошибка. сканировать образ один раз при создании Dockerfile и не повторять сканирование регулярно (новые CVE находят и в уже собранных образах); игнорировать уязвимости в базовом образе, фокусируясь только на зависимостях приложения; не обновлять образ при выходе патча.