- внешний сканер уязвимостей в публичном образе должен показывать что у вас ВСЕ ЧИКИ ПУКИ
перед docker publish
делаем docker scan
см.
https://docs.docker.com/engine/scan/или
https://github.com/aquasecurity/trivyдля которого даже github actions есть
https://github.com/aquasecurity/trivy-actionили
https://github.com/anchore/grypehttps://github.com/marketplace/actions/anchore-container-scanа лучше все вместе это в паралели запускать
и делать FAIL если что-то не так
- уязвимости в образе которые тащатся через зависимости
см. предыдущий пункт +
snyk.io сканирование исходников
и
https://www.defectdojo.org/ какой нибудь в который результаты сканирования сгружать и показывать динамику руководству...
- root в контейнере и всякие бинарники типа tcpdump и mcedit
для контроллируемого тобой environment
отрубается через
kubernetes securityContext в podTemplate
у Deployment, DaemonSet
для неконтроллируемого
опять банально
grep "RUN addgroup -S -g 101 rootles" Dockerfile
grep "USER rootless" Dockerfile
- размер образа
https://github.com/docker-slim/docker-slimможет решить проблемы левых бинарников
но нужны какие то e2e тесты чтобы понять что лишнее в образе
- образ долго собирается в ci/cd
свои базовые образа и всякие паралельные сборки с кешированием
или отдельные сборщики типа
https://github.com/genuinetools/imgвон вроде werf от фланта как то очень хитро пытается собирать образ
твое решение, хреново тем что если у вас публичный образ
то по факту вы свое приложение непонятно как тогда распостраняете
у вас откуда то должен будет взяться артифакт с исходниками
(.deb \ .rpm пакеты с исходниками?)
и это все будет ставиться в runtime, что неприемлимо с точки зрения контейнеризированного окружения
там все артефкты для запуска кроме секретов и юзерских настроек - они build time