Казалось бы технологии контейнеризации, в частности docker, уже прочно вошли в нашу жизнь… Но до сих пор встречаются ситуации, которые ускользают от классических обсуждений.
Например – какой образ использовать?
Вот два примера использования неофициальных репозиториев для PostgreSQL:
Что мы видим на этих скриншотах?
Были использованы образы PostgreSQL, созданные злоумышленниками и содержащие трояна, который через некоторое время просто зашифровал вашу БД.
Второй кейс – открывать порты наружу докерконтейнера через классические -p 5432:5432. Какие вы видите минусы этого варианта?
А их несколько:
- контейнер по умолчанию открыт для подключений со всех IP (привет listener) – без маски подсети (привет pg_hba) – соответственно злоумышленник может сразу получить доступ по этому порту к вашему контейнеру внутри ВМ (ну тут конечно нужен пароль, опять же кто на тестовых БД задает сильный пароль?)
- контейнер по умолчанию открыт для подключений с этой ВМ через localhost
- лично мое мнение – PostgreSQL, несмотря на встроенный файрвол, не должен заниматься защитой от DDoS и т.д.
Поэтому я составил короткий чеклист при использовании докерконтейнеров:
- Безопасность наше все!
- Только проверенные источники (официальные образы, bitnami, etc)
- Тестируем контейнеры на безопасность
- Открывать доступ извне для БД – плохая идея (помним про порты)
- Мультистейдж сборка – в 1 окружении собрали jar, потом в минимальном окружении запустили типа apline
- группируем команды, возможно есть смысл к 1 слою все схлопнуть
- Конфиги в 1 каталоге, который и монтируем внутрь контейнера
- Указываем версию контейнера – latest плохая практика из-за несовместимости файлов БД разных версий
- ограничении ресурсов – помним про ООМ
- docker -> containerd && CRI-O из-за отсутствия поддержки c-groups 2.0
Кому докер в новинку – рекомендую статью к прочтению.
Добавить комментарий