Что такое расширенная изоляция контейнеров?

Примечание

Расширенная изоляция контейнеров доступна только для клиентов Docker Business.

Усовершенствованная изоляция контейнеров обеспечивает дополнительный уровень безопасности, в котором используются различные передовые методы для усиления изоляции контейнеров без ущерба для производительности разработчиков. Он доступен с Docker Desktop 4.13.0 или новее.

Данные методы включают в себя:

  • Запуск всех контейнеров без привилегий через пространство имён пользователей Linux.

  • Запрет контейнерам изменять настройки виртуальной машины Docker Desktop.

  • Проверка некоторых критических системных вызовов для предотвращения выхода из контейнера и частичная виртуализация частей /proc и /sys внутри контейнера для дальнейшей изоляции.

  • Предотвращение доступа консоли к виртуальной машине Docker Desktop.

Это делается автоматически и с минимальным воздействием на функциональность или производительность.

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

Примечание

Enhanced Container Isolation является дополнением к другим методам обеспечения безопасности контейнеров, используемым Docker. Например, уменьшены возможности Linux, Seccomp, AppArmor.

Кто это для?

  • Для организаций и разработчиков, которые хотят предотвратить атаки на контейнеры и уменьшить количество уязвимостей.

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

Что происходит, когда включена расширенная изоляция контейнеров?

Когда Enhanced Container Isolation включена, включаются следующие функции:

  • Все пользовательские контейнеры автоматически запускаются в пространствах имён пользователей Linux, что обеспечивает более надежную изоляцию.

  • Пользователь root в контейнере сопоставляется с непривилегированным пользователем на уровне виртуальной машины.

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

  • Привилегированные контейнеры работают, но они являются привилегированными только в пространстве имён пользователя Linux контейнера, а не в виртуальной машине Docker Desktop.

  • Контейнеры больше не могут совместно использовать пространства имён с виртуальной машиной Docker Desktop. Например, --network=host, --pid=host.

  • Контейнеры больше не могут изменять файлы конфигурации в виртуальной машине Docker Desktop.

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

  • Контейнеры становится труднее взламывать. Например, проверяются конфиденциальные системные вызовы и эмулируются части /proc и /sys.

Дополнительные сведения о том, как работает Enhanced Container Isolation, см. в разделе Как это работает.

Важно

В настоящее время Enhanced Container Isolation несовместима с WSL и не защищает модули Kubernetes. Дополнительные сведения об известных ограничениях и обходных путях см. в Часто задаваемые вопросы и известные проблемы.

Как включить расширенную изоляцию контейнеров?

Как разработчик

Чтобы включить Enhanced Container Isolation в качестве разработчика: 1. Перейдите к Настройки > Общие в Docker Desktop. 2. Устанавливает флажок рядом с Использовать улучшенную изоляцию контейнеров. 3. Выбрать Применить и перезапустить, чтобы сохраняет настройки.

Как администратор

Чтобы включить Enhanced Container Isolation в качестве администратора, сначала необходимо настроить файл registry.json для принудительного входа. Это связано с тем, что для функции Enhanced Container Isolation требуется подписка на Docker Business, поэтому пользователи Docker Desktop должны пройти аутентификацию в вашей организации, чтобы эта конфигурация вступила в силу.

Далее необходимо создать и настроить файл admin-settings.json и указать:

{
 "configurationFileVersion": 2,
 "enhancedContainerIsolation": {
    "value": true,
    "locked": true
    }
}

Чтобы это вступило в силу:

  • При новой установке разработчикам необходимо выполнить Docker Desktop и пройти аутентификацию в своей организации.

  • В существующей установке разработчикам необходимо выйти из Docker Desktop через меню Docker, а затем перезапустить Docker Desktop. Если они уже вошли в систему, им не нужно входить снова, чтобы изменения вступили в силу.

    Важно

    Выбора Restart в меню Docker недостаточно, т. к. он перезапускает только некоторые компоненты Docker Desktop.

Что увидят пользователи, когда администратор активирует данный параметр?

Когда расширенная изоляция контейнеров включена, пользователи видят:

  • Использовать расширенную изоляцию контейнеров включён в Настройки > Общие.

  • Контейнеры запускаются в пользовательском пространстве имён Linux.

Для проверки, выполнить:

$ docker run --rm alpine cat /proc/self/uid_map

Отображается следующий вывод:

0     100000      65536

Это указывает на то, что привилегированный пользователь контейнера (0) сопоставляется с непривилегированным пользователем (100000) в виртуальной машине Docker Desktop и что сопоставление распространяется на диапазон 64000 идентификаторов пользователей.

Напротив, без Enhanced Container Isolation пространство имён пользователей Linux не используется, и отображается следующее:

0          0 4294967295

Это означает, что пользователь root в контейнере (0) на самом деле является пользователем root в виртуальной машине Docker Desktop (0), что снижает изоляцию контейнера. Сопоставление идентификаторов пользователей зависит от каждого нового контейнера, поскольку каждый контейнер получает эксклюзивный диапазон идентификаторов пользователей хоста для изоляции. Сопоставление User-ID автоматически управляется Docker Desktop.

С Enhanced Container Isolation, если процесс выйдет из контейнера, он окажется без привилегий на уровне виртуальной машины. Для получения дополнительной информации см. Как работает расширенная изоляция контейнеров.

Поскольку Enhanced Container Isolation использует среду выполнения контейнера Sysbox встроен в виртуальную машину Docker Desktop Linux, другим способом определить, работает ли контейнер с Enhanced Container Isolation, является использование docker inspect:

docker inspect --format='{{.HostConfig.Runtime}}' my_container

Он выводит:

sysbox-runc

Без Enhanced Container Isolation docker inspect выводит runc, что является стандартной средой выполнения OCI.