компанія 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
Ядро
задача
немає
статична
немає
паніка ядра
прямий
БНФ
подія
да
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. Розробники вже
На правах реклами
В.Д.Сіна пропонує
Джерело: habr.com