Безопасность — увлекательная тема. Это часть каждого аспекта системы. От почтового сервера до проверки HTTP вашего API.
Это также тема, в которой ключевую роль играет человеческий фактор. Вы можете использовать самые строгие подходы к обеспечению безопасности, но, если ваши правила слишком сложны для выполнения или реализации конечными пользователями – это будет идеальной лазейкой для «плохих людей».
В распределенных системах есть достаточно интересные проблемы, такие как:
- Как мы можем быть уверенными в отдельной части цельной системы? Как мы можем доверять новому приложению после масштабирования?
- Весь трафик, генерируемый системой, должен быть ограничен. Топология сети растет с увеличением количества сервисов, которые мы добавляем, но это не является хорошим оправданием для снятия с себя ответственности за то, как мы управляем нашей сетью.
Когда вы разрабатываете систему, вам нужно думать о безопасности с разных точек зрения:
- Безопасность должна быть эффективной. Это кажется очевидным, но об этом всегда следует помнить.
- Она должна быть простой в использовании в режиме разработки. Как я уже говорил, если безопасность замедляет работу, кто-то просто выключит ее.
- Если вы достаточно опытны, чтобы сделать простую систему безопасности, то вам будет и проще обеспечить надлежащее поведение с ней всех пользователей.
Все эти концепции хорошо применяются в различных проектах, созданных с использованием Docker. Учтите, что это всего лишь несколько примеров, но, если вы подумаете о фреймворке обновления (TUF) и обо всем, что происходит за каждой командой docker push и pull, вы вдруг увидите прекрасный пример того, как сделать сложные вещи действительно простыми в использовании.
Контейнеры Docker фактически неизменны. Это означает, что работающий контейнер почти никогда не изменяется, поэтому в случае, если вам необходимо его обновить, рекомендуется создать новый контейнер с обновленной версией приложения и удалить старый.
Этот аспект важен с разных точек зрения.
Неизменность, применяемая для деплоя, является большим вызовом, потому что она открывает двери для совершенно других стратегий релизов, например, blue green deployment или canary release. Неизменность также снижает время отката, поэтому вы можете сохранить старую версию еще немного дольше и переключать трафик в случае проблем.
Это также плюс с точки зрения масштабируемости и стабильности. Для каждого деплоя вы фактически используете существующие сценарии и инструменты и в результате, выпускаете новую версию вашего приложения. Вы создаете новые ноды, чтобы заменить старые, что означает, что вы сосредоточены на управлении конфигурацией. Так Вы оправдываете все усилия, затраченные на реализацию инфраструктуры в виде кода.
Это также важно для безопасности, потому что у вас будет новый контейнер после каждого обновления, и в случае уязвимости или проникновения он будет очищен во время обновления.
У вас также есть инструмент для анализа атакованного контейнера с помощью команды docker diff. Эта команда показывает различия в файловой системе.
Поддерживает 3 события:
A — Добавить
D — Удалить
C — Изменить
В случае атаки вы можете зафиксировать атакованный контейнер, чтобы проанализировать его позже и заменить его исходным образом.
Этот процесс интересен, но, если вы знаете, что вашему приложению не нужно делать изменений в файловой системе, то просто используйте параметры –read-only, чтобы сделать fs доступным только для чтения, или вы можете разделить объем при помощи суффикса ro -v PWD: / data: ро.
Docker не сможет исправить проблемы безопасности для вас, ведь если ваше приложение было атаковано с помощью внедрения кода, тогда вам нужно исправлять ситуацию вручную. Но все же, Docker предлагает несколько утилит, которые усложнят жизнь хакеру и позволят вам лучше контролировать среду.
В общем, вам нужно держать свое приложение в среде, которая предоставляет только то, что вам нужно и то, что вы знаете.
Если в вашем контейнере есть что-то, что вы не можете контролировать, или оно не используется, то рекомендуется его попросту удалить.
Обращайтесь с вопросами по внедрению и использованию Docker и я с радостью Вам отвечу!
About The Author
Виктор