Поиск по сайту:

Рекомендации по обеспечению безопасности контейнеров: защита Docker


Когда дело доходит до контейнеризации, Docker легко стал наиболее широко распространенной технологией. Поскольку предприятия и пользователи в отрасли стремятся использовать контейнеры для сокращения затрат, масштабирования сервисов и ускорения внедрения многочисленных приложений, важным аспектом, который не следует упускать из виду, является безопасность Docker. Docker обычно хвалят как более безопасный, чем традиционные развертывания, и, хотя это и правда, мы все равно должны осознавать потенциальные недостатки безопасности, чтобы предотвратить использование такого мощного инструмента.

В этом руководстве мы рассмотрим некоторые из наиболее важных мер безопасности для Docker в системе Linux. Это лучшие практики, которых следует придерживаться системным администраторам, чтобы гарантировать, что их контейнерные приложения в Docker защищены от потенциальных эксплойтов и злоумышленников.

В этом уроке вы узнаете:

  • Топ-5 лучших практик по обеспечению безопасности Docker в Linux

Рекомендации по обеспечению безопасности Docker

Ниже мы перечислим пять наиболее важных рекомендаций по обеспечению безопасности вашей среды Docker и ее контейнерных приложений.

Для чего используется Docker?
Docker — самое известное имя в области контейнеризации, хотя существует множество других инструментов, которые также могут выполнять эту работу. Многие администраторы Linux начинают использовать Docker для создания приложений, которые можно упаковать в контейнер и легко развернуть в любой системе. Это также отличный способ для разработчиков поделиться своей работой, поскольку запустить приложение может любой, у кого есть Docker.

1. Избегайте использования root-прав

Пользователи Linux уже должны стараться свести к минимуму использование административных привилегий, когда это возможно. Это уже золотое правило систем Linux, где учетная запись root должна использоваться исключительно для выполнения важных задач и команд, которые не могут быть реализованы обычными учетными записями пользователей.

То же правило применимо и к контейнерам Docker. Разработчики иногда лениво или бессистемно назначают Dockerized-приложению больше разрешений, чем необходимо, вместо того, чтобы тратить время на то, чтобы решить, какие именно привилегии необходимы, и делегировать их соответствующим образом. Подобная оплошность может иметь ужасные последствия, если пользователю удастся получить контроль над приложением, что фактически предоставит ему полную свободу действий над средой.

Мы можем обойти эту ловушку, убедившись, что мы не запускаем контейнеры от имени пользователя root (чтобы убедиться в этом, проверьте USER внутри файла Dockerfile) и избегайте запуска контейнеров с такими параметрами, как --id 0 или --привилегирован. В большинстве ситуаций мы также можем избежать запуска самого Docker от имени пользователя root, хотя это не так важно в качестве меры предосторожности, как вышеупомянутые пункты.

2. Регулярно обновляйте — с осторожностью

Обновления образов Docker обычно полезны. Они представляют новые функции, исправления безопасности и т. д. Поэтому обычно рекомендуется регулярно получать обновления и поддерживать все ваши образы Docker в актуальном состоянии. Однако в чувствительных средах, где время безотказной работы крайне важно, можно принять дополнительные меры для предварительной подготовки этих изменений перед их внедрением в производство.

Хотя обновления, как правило, полезны, они также могут привносить критические изменения или нестабильные функции, недостатки которых еще не устранены. В среде, которая использует множество контейнеров Docker и требует повышенного внимания к обеспечению бесперебойной работы, мы можем воспользоваться такими технологиями, как Kubernetes, которые позволят нам постепенно развертывать обновления и отслеживать приложения на наличие ошибок на случай, если нам понадобится прервать обновления и выполнить откат. .

См. также: Kubernetes и Docker, в чем разница?

3. Используйте официальные изображения

По возможности выбирайте официальные изображения, которые можно загрузить на Docker Hub. Эти образы регулярно обновляются и управляются разработчиками из сообщества Docker, поэтому они, как правило, более надежны и долговечны, чем изображения, поддерживаемые разными пользователями на других веб-сайтах.

Например, официальные образы распространенных приложений, таких как NGINX или Ubuntu, доступны на Docker Hub. Использовать их очень просто, поскольку эта возможность уже встроена в Docker по умолчанию:


# Pull an official nginx image from Docker Hub:
$ docker pull nginx:latest

Ту же команду, показанную выше, можно использовать и для обновления изображения.

4. Ограничьте возможности контейнера

Эта рекомендация идет рука об руку с нашей первой — избегать использования root-прав. Точно так же нам следует ограничить возможности наших Docker-контейнеров всеми возможными способами. Контейнеры обычно должны работать только с минимальными разрешениями, которые им необходимы для правильного выполнения своей работы. Поскольку приложения Docker обычно играют очень специфическую роль, мы можем очень точно определить, какие возможности мы назначаем.

Одним из таких способов ограничения возможностей является использование флага --internal. Это предотвращает доступ контейнера Docker к чему-либо за пределами внутренней сети, что часто не является необходимым разрешением, которое нам нужно делегировать. Таким образом, контейнеры Docker по-прежнему могут взаимодействовать друг с другом (при правильной настройке), но не с внешней сетью хост-системы. Для приложений Docker, которые настроены для доступа через прокси-сервер, флаг --internal можно использовать постоянно.

Опция --cap-drop=ALL сведет возможности Linux к минимуму, чего не требуют многие приложения. Мы можем объединить эту опцию с другими, такими как --cap-add=NET_BIND_SERVICE, чтобы привязать службу к определенному порту, не требуя привилегий root.

5. Аудит безопасности с помощью Docker Bench Security

Разработчики Docker знают, что это сложное приложение, требующее защиты со многими аспектами. Слишком сложно ожидать, что каждый администратор Linux достаточно хорошо ознакомится с Docker, чтобы проверить каждую настройку на наличие потенциальных недостатков безопасности.

Вот почему существует Docker Bench Security, который доступен на официальном сайте Docker GitHub и проведет аудит безопасности вашей установки Docker. По сути, он выполняет набор сценариев Bash, которые выполняют различные проверки безопасности вашей среды, а затем сообщает об обнаруженных угрозах и мерах, которые можно предпринять для усиления безопасности вашей среды.

Это так же просто, как клонировать репо и затем выполнить скрипт:


$ git clone https://github.com/docker/docker-bench-security.git
$ cd docker-bench-security
$ sudo sh docker-bench-security.sh

Заключительные мысли

В этом руководстве мы рассмотрели список из пяти лучших практик по обеспечению безопасности Docker в системе Linux. Хотя Docker — относительно новая технология, мы обнаружили, что многие из ее лучших практик аналогичны тем, которые используются в традиционных системах Linux, например, ограничение возможностей, инструменты аудита безопасности, установка обновлений и использование доверенного программного обеспечения. Использование Docker само по себе вместе с этими основными рекомендациями поможет обеспечить безопасность ваших приложений, минимизируя поверхность атаки больше, чем когда-либо могло бы сделать традиционное развертывание.