Контейнеры ускоряют разработку и деплой, но без базовой защиты становятся удобной точкой входа для атаки. Разберём, как повысить безопасность на трёх уровнях: Dockerfile, Kubernetes и container registry.
1. Безопасный Dockerfile
Ошибки в образе потом тиражируются во все окружения.
Что важно:
- Используйте минимальные базовые образы: alpine, distroless, slim-версии
- Фиксируйте версии зависимостей и base image, а не latest
- Не запускайте контейнер от root — задавайте USER
- Удаляйте временные файлы, кэши пакетных менеджеров
- Не храните секреты в ENV, ARG и слоях образа
- Применяйте multi-stage build, чтобы не тащить в production компиляторы и лишние утилиты
Почему это важно:
меньше пакетов — меньше уязвимостей, меньше поверхность атаки, проще аудит.
2. Безопасность в Kubernetes
Даже хороший образ можно небезопасно запустить.
Что проверить в манифестах:
- securityContext:
- runAsNonRoot: true
- readOnlyRootFilesystem: true
- allowPrivilegeEscalation: false
- Не использовать privileged: true без крайней необходимости
- Ограничивать capabilities, например drop: ["ALL"]
- Настроить requests/limits, чтобы снизить риск DoS внутри кластера
- Использовать NetworkPolicy для ограничения сетевого доступа между pod
- Хранить секреты в Secrets + включать шифрование at rest
- Включать RBAC по принципу минимальных привилегий
- Не монтировать service account token туда, где он не нужен
Практический эффект:
если один pod скомпрометирован, атакующему будет сложнее двигаться дальше по кластеру.
3. Защита registry
Registry — это источник артефактов, а значит критичная часть supply chain.
Рекомендации:
- Включайте аутентификацию и разграничение прав
- Подписывайте образы: Cosign / Notary
- Проверяйте образы сканерами уязвимостей: Trivy, Grype, Clair
- Настройте policy: запрещать pull/deploy неподписанных или критически уязвимых образов
- Храните registry в приватном доступе, если образы внутренние
- Ведите аудит: кто загрузил образ, когда и что изменилось
4. Что ищут чаще всего: короткие ответы
Как защитить Docker контейнер?
Запуск не от root, минимальный образ, без секретов внутри, регулярный скан уязвимостей.
Как повысить безопасность Kubernetes?
RBAC, NetworkPolicy, securityContext, ограничения привилегий, контроль секретов.
Зачем сканировать registry?
Чтобы не пропустить CVE в базовых образах и зависимостях до попадания в production.
5. Минимальный чек-лист
- Не использовать latest
- Не запускать от root
- Убрать секреты из образов
- Сканировать образы в CI/CD
- Подписывать артефакты
- Ограничивать права в K8s
- Контролировать доступ к registry
Безопасность контейнеров — это не одна настройка, а цепочка контроля от сборки до запуска. Чем раньше встроить её в CI/CD и инфраструктуру, тем ниже риск инцидентов и дороже обход для злоумышленника.
За подборкой полезных каналов про IT можно заглянуть ниже.