Безопасность в Docker
Безопасность в Docker
Основные механизмы
Docker предоставляет несколько механизмов для повышения безопасности контейнеров.
- Seccomp (Secure Computing Mode) ограничивает системные вызовы, доступные процессам внутри контейнера. Docker использует профиль seccomp по умолчанию, который блокирует опасные системные вызовы (например, chmod, chown). Можно создать собственный профиль seccomp и применить его:
docker run --Безопасность-opt seccomp=/path/to/seccomp-profile.json my-container
- AppArmor контролирует права доступа к файлам и системным ресурсам. Включён по умолчанию в Ubuntu. Пример:
docker run --Безопасность-opt apparmor=unconfined my-container
- SELinux предоставляет более строгий контроль доступа. Включён по умолчанию в RHEL/CentOS. Пример:
docker run --Безопасность-opt label=disable my-container
- User Namespaces отображает UID и GID контейнера на другой UID/GID хоста. Даже если злоумышленник получит доступ к контейнеру с правами root, он не сможет получить такие же права на хосте. Пример - как включить:
dockerd --userns-remap=default
- Capabilities позволяют ограничить привилегии контейнера. Docker предоставляет ограниченный набор capabilities (например, CAP_NET_BIND_SERVICE, CAP_SYS_ADMIN). Можно удалить все дополнительные права и добавить только необходимые права.
Удаление всех дополнительных прав:
docker run --cap-drop ALL my-container
Добавление только необходимых прав:
docker run --cap-add NET_ADMIN my-container
- Read-Only Filesystem делает файловую систему контейнера доступной только для чтения. Пример:
docker run --read-only my-container
- Masking Sensitive Paths. По умолчанию контейнер имеет доступ к /proc, /sys и другим системным директориям. Как решение, можно использовать флаг --tmpfs или --mask:
docker run --tmpfs /run:rw,noexec,nosuid my-container
Когда Docker развёртывается в Production, рекомендуется удалять ненужные capabilities, включать seccomp и AppArmor/SELinux, использовать user namespaces, защищать файловую систему от изменений, использовать минимальные базовые образы (тот же alpine), создавать отдельные сети для контейнеров, и использовать инструменты мониторинга. Всё это можно совместить. Пример безопасного запуска контейнера:
docker run \
--name secure-container \
--read-only \
--cap-drop ALL \
--cap-add CHOWN \
--Безопасность-opt seccomp=/path/to/seccomp-profile.json \
--Безопасность-opt apparmor=custom-profile \
--user 1000:1000 \
--Сеть isolated-Сеть \
my-container
Docker Secrets
Docker Secrets - встроенная функция Docker, предназначенная для безопасного хранения и передачи конфиденциальных данных (например, паролей, API-ключей, сертификатов) между контейнерами. Она доступна только в режиме Docker Swarm, но может быть адаптирована и для других сценариев.
Docker Secrets позволяет хранить конфиденциальные данные в зашифрованном виде, передавать секреты только в те контейнеры, которые их запрашивают, и обеспечивать изоляцию данных, чтобы они не попадали в образы или логи. Секреты шифруются как на диске, так и при передаче, доступны только тем сервисам, которым они предназначены, и такая технология упрощает управление конфиденциальными данными.
Как работает Docker Secrets?
- Создаётся секрет с помощью команды docker secret create:
echo "my-secret-password" | docker secret create db_password -
- При создании сервиса нужно указать секрет (привязав его к сервису):
docker service create \
--name my-app \
--secret db_password \
my-app-image
- Секрет монитруется в файловую систему контейнера по пути
/run/secrets/<имя_секрета>. Например:
cat /run/secrets/db_password
Комплексный подход и альтернативы
Для обеспечения безопасности контейнеров важно использовать комплексный подход. Вот основные аспекты:
- Шифрование томов производится, к примеру, через LUKS (Linux Unified Key Setup) или другие инструменты для шифрования данных на уровне хоста;
- Шифрование сетевого трафика - используется TLS для защищённой передачи данных между контейнерами, настроить сертификаты для HTTPS.
- Тома используются для хранения данных вне контейнера - доступ ограничен и предоставляется только нужным контейнерам;
- Конфиденциальные данные хранятся в секретах, а не в переменных окружения и файлах.
Альтернативами Docker Secrets являются HashiCorp Vault и Kubernetes Secrets.
HashiCorp Vault — это инструмент для безопасного управления секретами (пароли, ключи, токены) и защищенного доступа к ним. External Secrets Operator — это оператор Kubernetes, который позволяет синхронизировать секреты из внешних систем (например, HashiCorp Vault, AWS Secrets Manager, Azure Key Vault) с секретами Kubernetes.
Kyverno — это политика безопасности для Kubernetes, которая позволяет автоматически применять правила и ограничения к ресурсам кластера - проверка корректности манифестов, автоматическое изменение манифестов (мутация), генерация новых ресурсов на основе политик и логирование нарушений политик (аудит).
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). OWASP (Open Web Application Безопасность Project) — это некоммерческая организация, которая выпускает список TOP 10 самых опасных уязвимостей веб-приложений. Безопасность — это непрерывный процесс, пронизывающий весь жизненный цикл информационных систем. Эффективная защита требует — Безопасной разработки кода — программисты должны осознавать типичные… Инцидент информационной безопасности — это событие или последовательность событий, нарушающих или угрожающих нарушить конфиденциальность, целостность или доступность информации. В новых требованиях ФСТЭК России (Приказ № 117 от 11.04.2025) происходит важная эволюция понятий. Вместо узкого термина Средства защиты информации от несанкционированного доступа (СЗИ от НСД) всё… Сертификация — это не просто техническая процедура; это социально-техническая система, в которой участвуют три базовых актора — Субъект сертификации — сторона, чья идентичность (или атрибуты) должны… Content Безопасность Policy — это мощный механизм защиты от XSS, clickjacking и других атак, основанный на белых списках источников ресурсов. Анализ безопасности — это систематический процесс выявления, оценки и приоритизации уязвимостей в программном обеспечении. Безопасность на ранних этапах разработки (Secure Software Разработка Life Cycle, Secure SDLC) представляет собой методологию внедрения практик защиты информации непосредственно в процесс создания… Отслеживание действий представляет собой систематический процесс записи, сбора и анализа операций, выполняемых пользователями, приложениями и инфраструктурными компонентами в информационной системе.… Шифрование представляет собой один из фундаментальных механизмов обеспечения информационной безопасности. Его суть заключается в целенаправленном и обратимом преобразовании данных таким образом, что… HTTPS функционирует на порту 443. Этот порт используется большинством веб-серверов по умолчанию. Блокировка соединения на этом порту нарушает работу интернета. Современный мессенджер представляет собой распределённую систему с несколькими ключевыми узлами. Основными компонентами являются клиентское приложение и серверная инфраструктура.Информационная безопасность
Методы защиты информации
Государственные требования к информационной безопасности
Средства защиты информации
Сертификация и сертификаты
Безопасность приложений
Анализ и тестирование безопасности
Безопасность на ранних этапах разработки
Контроль и отслеживание
Шифрование
SSH и HTTPS
Архитектура взаимодействия мессенджеров