Компания Amazon
Bottlerocket (кстати, так называют мелкие самодельные ракеты на дымном порохе) — не первая ОС для контейнеров, но вполне вероятно, что она получит широкое распространение благодаря дефолтной интеграции с сервисами AWS. Хотя система ориентирована на облако Amazon, открытый исходный код позволяет собрать её где угодно: локально на сервере, на Raspberry Pi, в любом конкурирующем облаке и даже в среде без контейнеров.
Это вполне достойная замена дистрибутиву CoreOS, который похоронила Red Hat.
Вообще, у подразделения Amazon Web Services уже есть Amazon Linux, который недавно вышел во второй версии: это дистрибутив общего назначения, который можно запустить в контейнере Docker или с гипервизорами Linux KVM, Microsoft Hyper-V и VMware ESXi. Он был оптимизирован для работы в облаке AWS, но с выходом Bottlerocket всем рекомендуется сделать апгрейд на новую систему, которая более безопасная, современная и потребляет меньше ресурсов.
AWS анонсировала Bottlerocket
Экстремальный минимализм
Linux очищен от всего, что не нужно для запуска контейнеров. Такой дизайн, по словам компании, сокращает поверхность атаки.
Это означает, что в базовой системе устанавливается меньше пакетов, что упрощает поддержку и обновление ОС, а также снижает вероятность возникновения проблем из-за зависимостей, снижает использование ресурсов. В принципе, здесь всё работает внутри отдельных контейнеров, а базовая система практически голая.
Amazon также удалила все оболочки и интерпретаторы, исключив риск их использования или случайного повышения привилегий пользователями. В базовом образе ради минимализма и безопасности отсутствует командная оболочка, сервер SSH и интерпретируемые языки типа Python. Инструменты для администратора вынесены в отдельный служебный контейнер, который отключён по умолчанию.
Управление системой предусмотрено двумя способами: через API и оркестровку.
Вместо менеджера пакетов, который обновляет отдельные части программного обеспечения, Bottlerocket загружает полный образ файловой системы и перезагружается в него. В случае сбоя загрузки он автоматически откатывается, а сбой рабочей нагрузки может инициировать откат вручную (команда через API).
Фреймворк /etc
монтируется с файловой системой в оперативной памяти /etc
не поддерживается: для сохранения настроек следует использовать API или выносить функциональность в отдельные контейнеры.
Схема обновления через API
Безопасность
Контейнеры создаются штатными механизмами ядра Linux — cgroups, пространства имён и seccomp, а в качестве системы принудительного контроля доступа, то есть для дополнительной изоляции используется
По умолчанию включены политики для разделения ресурсов между контейнерами и ядром. Бинарники защищены флагами, чтобы пользователи или программы не могли их выполнять. И если кто-то добрался до файловой системы, Bottlerocket предлагает инструмент для проверки и отслеживания любых внесённых изменений.
Режим «проверенной загрузки» реализован через функцию device-mapper-verity (
Также в системе присутствует фильтр
Модель выполнения
Задаётся пользователем
Компиляция
Безопасность
Режим сбоя
Доступ к ресурсам
Юзер
задача
да
любая
права пользователей
прерывание выполнения
системный вызов, fault
Ядро
задача
нет
статическая
нет
паника ядра
прямой
BPF
событие
да
JIT, CO-RE
верификация, JIT
сообщение об ошибке
ограниченные хелперы
Отличие BPF от обычного кода уровня пользователя или ядра,
AWS заявила, что Bottlerocket «применяет операционную модель, которая ещё больше повышает безопасность, препятствуя подключению к продакшн-серверам с привилегиями администратора», и «подходит для больших распределённых систем, в которых ограничен контроль над каждым отдельным хостом».
Для системных администраторов предусмотрен контейнер администратора. Но AWS не думает, что админу часто придется работать внутри Bottlerocket: «Акт входа в отдельный инстанс Bottlerocket предназначен для нечастых операций: расширенной отладки и устранения неполадок», —
Язык Rust
Инструментарий ОС поверх ядра в основном написан на Rust. Этот язык по своей природе
При сборке по умолчанию применяются флаги --enable-default-pie
и --enable-default-ssp
для включения рандомизации адресного пространства исполняемых файлов (
Для пакетов на C/C++ дополнительно включаются флаги -Wall
, -Werror=format-security
, -Wp,-D_FORTIFY_SOURCE=2
, -Wp,-D_GLIBCXX_ASSERTIONS
и -fstack-clash-protection
.
Кроме Rust и C/C++, некоторые пакеты написаны на языке Go.
Интеграция с сервисами AWS
Отличие от аналогичных контейнерных операционных систем заключается в том, что Amazon оптимизировала Bottlerocket для работы на AWS и интеграции с другими сервисами AWS.
Самым популярным оркестратором контейнеров является Kubernetes, поэтому AWS внедрила интеграцию с собственным Enterprise Kubernetes Service (EKS). Инструменты для оркестровки идут в отдельном управляющем контейнере
Будет интересно посмотреть, взлетит ли Bottlerocket, учитывая провал некоторых подобных инициатив в прошлом. Например, PhotonOS от Vmware оказалась невостребованной, а RedHat купила CoreOS и
Интеграция Bottlerocket в сервисы AWS делает эту систему в своём роде уникальной. Возможно, это главная причина, почему некоторые пользователи могут предпочесть Bottlerocket другим дистрибутивам, таким как CoreOS или Alpine. Система изначально спроектирована для работы с EKS и ECS, но повторим, что это не обязательно. Во-первых, Bottlerocket можно
Исходный код Bottlerocket опубликован на GitHub под лицензией Apache 2.0. Разработчики уже
На правах рекламы
VDSina предлагает
Источник: habr.com