Что такое безопасность контейнеров Docker?

Использование Docker® подразумевает работу со множеством динамических компонентов. Обеспечить их безопасность труднее, чем в случае с более традиционными технологиями развертывания. Необходим комплексный подход — от межсетевых экранов для сети и приложений до защитных средств для среды выполнения и хостов.

Защита контейнеров Docker

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

Что нужно учесть

Что нужно учесть для обеспечения безопасности контейнеров Docker:

  • квоты ресурсов;
  • риски при запуске контейнеров от учетной записи root;
  • безопасность реестров;
  • источники образов;
  • источники кода;
  • защищенность API и сетей.

Квоты ресурсов

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

С помощью квот вы можете предотвратить неожиданные задержки в работе контейнеров, а также повысить безопасность. Если один из контейнеров будет заражен, злоумышленники смогут воспользоваться только выделенным этому контейнеру объемом ресурсов, что уменьшит масштаб атаки. Это простая защитная мера, которую можно задать флагами командной строки.

Риски при запуске контейнеров от учетной записи root

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

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

Безопасность реестров

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

Хотя очень заманчиво не делать «лишнюю» работу и предоставить им открытый доступ, но такое решение с большой вероятностью повлечет за собой компрометацию реестра. Хороший метод решения вопроса — внедрение контроля доступа на основе ролей, что дает возможность контролировать, кто именно и к чему может получить доступ в реестрах.

Источники образов

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

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

Источники кода

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

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

Защищенность API и сетей

Контейнеры Docker взаимодействуют через API и сети. От обмена данными зависит работа контейнеров, и здесь тоже необходимо внедрить защитные меры и настроить мониторинг. Хотя API и сети не являются частью Docker-контейнеров, злоумышленники могут использовать их, чтобы добраться до контейнеров. Чтобы в будущем быстро останавливать атаки, при проектировке API и сетей нельзя забывать о безопасности и возможностях их мониторинга.

Заключение

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

Исследования по теме

Статьи по теме