9.1 Основні аспекти безпеки мереж Docker
У цій лекції ми розглянемо основні аспекти безпеки мереж Docker, рекомендації та найкращі практики для захисту твоїх контейнерів і даних.
Основні аспекти безпеки мереж Docker
- Ізоляція контейнерів
- Контроль доступу
- Шифрування даних
- Моніторинг і аудит
- Оновлення та патчі
9.2 Ізоляція контейнерів
Ізоляція контейнерів — це перший крок до забезпечення безпеки мереж Docker. Вона допомагає мінімізувати вплив потенційних вразливостей і запобігає несанкціонованому доступу між контейнерами.
Використання користувацьких мереж
Створюйте користувацькі мережі для ізоляції контейнерів, щоб обмежити їх взаємодію лише необхідними сервісами.
docker network create --driver bridge my_secure_network
У Docker Compose ви можете визначити користувацьку мережу для кожного сервісу.
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_secure_network
app:
image: myapp:latest
networks:
- my_secure_network
networks:
my_secure_network:
driver: bridge
Використання міжконтейнерних правил
Docker дозволяє задавати міжконтейнерні правила для керування взаємодією між контейнерами на рівні мережі.
docker network connect --link <source_container>:<alias> <target_network> <container_name>
Приклад:
docker network connect --link container1:c1 multi-host-network container2
9.3 Контроль доступу
Контроль доступу важливий для запобігання несанкціонованому доступу до контейнерів і мереж.
Обмеження доступу до портів
Обмежуйте доступ до опублікованих портів, використовуючи IP-адреси та правила брандмауера.
docker run -d -p 127.0.0.1:8080:80 --name my_secure_container nginx
Використання ролей і політик
Використовуйте ролі та політики доступу для обмеження прав користувачів, що керують контейнерами та мережами.
docker run -d --user <uid>:<gid> my_secure_container
9.4 Шифрування даних
Шифрування даних допомагає захистити конфіденційні дані як у стані спокою, так і при передачі.
Шифрування даних у стані спокою
Використовуйте шифрування файлової системи для томів, які використовуються контейнерами.
docker run -d --name my_secure_container --mount
type=volume,source=my_volume,destination=/data,volume-driver=local,volume-opt=o=bind,volume-opt=device=/mnt/secure_data nginx
Шифрування даних при передачі
Використовуйте TLS для шифрування даних, що передаються між контейнерами та зовнішніми сервісами.
docker run -d -p 443:443 --name my_secure_container -v /path/to/cert.pem:/etc/nginx/cert.pem -v
/path/to/key.pem:/etc/nginx/key.pem nginx
9.5 Моніторинг і аудит
Моніторинг і аудит дозволяють відстежувати активність контейнерів і мереж, виявляти потенційні загрози та реагувати на них.
Логи і метрики
Збирайте логи і метрики контейнерів для аналізу і моніторингу.
docker logs <container_name>
Використовуйте інструменти моніторингу, такі як Prometheus і Grafana, для відстеження стану контейнерів і мереж.
Аудит
Увімкніть аудит для відстеження дій користувачів і змін конфігурації контейнерів і мереж.
docker events
9.6 Оновлення та патчі
Регулярні оновлення та патчі допомагають захистити контейнери та мережі від відомих уразливостей.
Оновлення Docker
Слідкуй за оновленнями Docker і вчасно встановлюй нові версії.
sudo apt-get update
sudo apt-get install docker-ce
Оновлення образів
Регулярно оновлюй образи контейнерів до останніх версій, які містять виправлення безпеки.
docker pull nginx:latest
9.7 Приклади найкращих практик
Приклад 1: Створення ізольованих мереж
Створіть ізольовані мережі для кожного компонента вашого застосунку.
docker network create --driver bridge frontend_network
docker network create --driver bridge backend_network
Запустіть контейнери у відповідних мережах.
docker run -d --name frontend --network frontend_network nginx
docker run -d --name backend --network backend_network myapp
Приклад 2: Обмеження доступу до портів
Обмежте доступ до портів контейнерів лише для необхідних IP-адрес і потрібних хостів.
docker run -d -p 192.168.1.100:8080:80 --name restricted_container nginx
Приклад 3: Використання TLS для шифрування
Налаштуйте контейнери на використання TLS для захисту даних під час передачі.
docker run -d -p 443:443 --name tls_container -v /path/to/cert.pem:/etc/nginx/cert.pem -v
/path/to/key.pem:/etc/nginx/key.pem nginx
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ