Выпуск Bottlerocket 1.3, дистрибутива на базе изолированных контейнеров
7 октября 2021 года
Опубликован выпуск Linux-дистрибутива Bottlerocket 1.3.0, развиваемого при участии компании Amazon для эффективного и безопасного запуска изолированных контейнеров. Инструментарий и управляющие компоненты дистрибутива написаны на языке Rust и распространяются под лицензиями MIT и Apache 2.0. Поддерживается запуск Bottlerocket в кластерах Amazon ECS, VMware и AWS EKS Kubernetes, а также создание произвольных сборок и редакций, допускающих применение различных инструментов оркестровки и runtime для контейнеров.
Дистрибутив предоставляет атомарно и автоматически обновляемый неделимый системный образ, включающий ядро Linux и минимальное системное окружение, включающие только компоненты, необходимые для запуска контейнеров. В окружении задействованы системный менеджер systemd, библиотека Glibc, сборочный инструментарий Buildroot, загрузчик GRUB, конфигуратор сети wicked, runtime для изолированных контейнеров containerd, платформа оркестровки контейнеров Kubernetes, аутентификатор aws-iam-authenticator и агент Amazon ECS.
Инструменты для оркестровки контейнеров поставляются в отдельном управляющем контейнере, который включается по умолчанию и управляется через API и AWS SSM Agent. В базовом образе отсутствует командная оболочка, сервер SSH и интерпретируемые языки (например, нет Python или Perl) - средства для администратора и отладочные инструменты вынесены в отдельный служебный контейнер, который по умолчанию отключён.
Ключевым отличием от похожих дистрибутивов, таких как Fedora CoreOS, CentOS/Red Hat Atomic Host является первичная ориентация на предоставление максимальной безопасности в контексте усиления защиты системы от возможных угроз, усложнения эксплуатации уязвимостей в компонентах ОС и повышения изоляции контейнеров. Контейнеры создаются при помощи штатных механизмов ядра Linux - cgroups, пространств имён и seccomp. Для дополнительной изоляции в дистрибутиве применяется SELinux в режиме "enforcing".
Корневой раздел монтируется в режиме только для чтения, а раздел с настройками /etc монтируется в tmpfs и восстанавливает исходное состояние после перезапуска. Прямое изменение файлов в каталоге /etc, таких как /etc/resolv.conf и /etc/containerd/config.toml, не поддерживается - для постоянного сохранения настроек следует использовать API или выносить функциональность в отдельные контейнеры. Для криптографической верификации целостности корневого раздела задействован модуль dm-verity, а в случае выявления попытки модификации данных на уровне блочного устройства система перезагружается.
Большинство системных компонентов написаны на языке Rust, предоставляющем средства для безопасной работы с памятью, позволяющие избежать уязвимостей, вызванных обращением к области памяти после её освобождения, разыменованием нулевых указателей и выходом за границы буфера. При сборке по умолчанию применяются режимы компиляции "--enable-default-pie" и "--enable-default-ssp" для включения рандомизации адресного пространства исполняемых файлов ( PIE) и защиты от переполнения стека через подстановку канареечных меток. Для пакетов, написанных на языке C/C++, дополнительно включаются флаги "-Wall", "-Werror=format-security", "-Wp,-D_FORTIFY_SOURCE=2", "-Wp,-D_GLIBCXX_ASSERTIONS" и "-fstack-clash-protection".
В новом выпуске:
- Устранены уязвимости в инструментарии docker и runtime containerd ( CVE-2021-41089, CVE-2021-41091, CVE-2021-41092, CVE-2021-41103), связанные с некорректной установкой прав доступа, что позволяло непривилегированным пользователям выйти за пределы базового каталога и выполнить внешние программы.
- В kubelet и pluto добавлена поддержка IPv6.
- Предоставлена возможность перезапуска контейнера после изменения его настроек.
- В пакет eni-max-pods добавлена поддержка инстансов Amazon EC2 M6i.
- В open-vm-tools добавлена поддержка фильтров устройств, реализованная на базе инструментария Cilium.
- Для платформы x86_64 реализован гибридный режим загрузки (с поддержкой EFI и BIOS).
- Обновлены версии пакетов и зависимости для языка Rust.
- Прекращена поддержка варианта дистрибутива aws-k8s-1.17 на базе
Kubernetes 1.17. Рекомендовано использовать вариант aws-k8s-1.21 c поддержкой Kubernetes 1.21. В вариантах k8s задействованы настройки cgroup runtime.slice и system.slice.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.