Docker-Compose

1.

DOCKER COMPOSE · БЕЗОПАСНОСТЬ
Безопасное развертывание серверных приложений с Docker Compose
Кейсы, примеры и требования безопасности при создании и оркестрации контейнеризованных приложений
Docker Compose
Архитектура и сценарии использования
Риски безопасности
Типичные уязвимости и угрозы
Безопасная среда
Практики и инструменты защиты

2.

Введение: Почему безопасность Docker Compose важна?
Контекст
Docker Compose упрощает оркестрацию многоконтейнерных
приложений с помощью декларативного YAML-синтаксиса. Один файл
Цели презентации
Изучить архитектуру Docker Compose
описывает всю инфраструктуру: сервисы, сети, тома и переменные
окружения.
Разобрать типичные уязвимости
Однако с ростом популярности растёт и число атак на неправильно
настроенные контейнерные среды. Открытые API, хардкодированные
секреты и избыточные привилегии — основные векторы угроз.
Применить требования безопасности
Рассмотреть реальные кейсы

3.

ЧАСТЬ 1
Основы Docker Compose
Docker Compose — инструмент для определения и запуска многоконтейнерных Docker-приложений с помощью единого YAML-файла
docker-compose.yml, в котором описываются сервисы, сети и тома.
Веб-приложения с БД
Микросервисы
Dev / Test среды
Frontend, backend и база данных
Изолированные сервисы (auth,
Разработчики воспроизводят
Идеально для Flask, Django, Node.js
поднимаются одной командой.
+ PostgreSQL / MySQL.
users, gateway) взаимодействуют
продакшен-окружение локально,
через внутренние сети, не открывая
тестировщики используют
порты наружу.
изолированные стеки для каждого
теста.

4.

ПРИМЕР 1
Простое веб-приложение с базой данных
Flask/Django + PostgreSQL — классический стек. Ниже приведён базовый docker-compose.yml, демонстрирующий определение двух сервисов, настройку портов, томов и
изолированной сети.
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
depends_on:
- db
networks:
- app-network
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
networks:
- app-network
volumes:
postgres_data:
networks:
app-network:
driver: bridge
⚠ В данном примере пароли указаны напрямую — в реальном проекте обязательно используйте Docker Secrets или переменные окружения через .env-файл.

5.

ПРИМЕР 2
Микросервисная архитектура
Сервис аутентификации, сервис пользователей и API-шлюз взаимодействуют через изолированную внутреннюю сеть. Наружу открыт только один порт — шлюза.
version: "3.9"
services:
api-gateway:
build: ./gateway
ports:
- "80:80"
networks:
- internal
auth-service:
build: ./auth
networks:
- internal
# порт не открыт наружу
user-service:
build: ./users
networks:
- internal
# порт не открыт наружу
networks:
internal:
driver: bridge
internal: true
# сеть недоступна снаружи хоста
Ключевой принцип
Преимущества изоляции
Флаг internal: true запрещает выход трафика из сети наружу. Это критически
важно для микросервисов, которые не должны быть доступны напрямую из
интернета.
Уменьшение поверхности атаки
Принцип наименьших привилегий на сетевом уровне
Простота аудита входящего трафика

6.

ЧАСТЬ 2
Общие риски безопасности в Docker Compose
Неправильная конфигурация Docker Compose — одна из ведущих причин инцидентов безопасности в контейнерных средах. По данным CISA,
открытые API Docker являются активной целью для автоматизированных атак.
English     Русский Правила