Випуск Bottlerocket 1.2, дистрибутив на базі ізольованих контейнерів

Доступний випуск Linux-дистрибутива Bottlerocket 1.2.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.

Інструменти для оркестрування контейнерів поставляються в окремому контейнері, що вмикається за замовчуванням і управляється через 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».

У новому випуску:

  • Додано підтримку дзеркал реєстру образів контейнерів.
  • Додано можливість використання самопідписаних сертифікатів.
  • Доданий параметр для налаштування імені хоста.
  • Оновлено версію запропонованого за замовчуванням адміністративного контейнера.
  • Додано налаштування topologyManagerPolicy та topologyManagerScope для kubelet.
  • Додано підтримку стиснення ядра за допомогою алгоритму zstd.
  • Надано можливість завантаження у VMware віртуальних машин у форматі OVA (Open Virtualization Format).
  • Оновлено варіанти дистрибутива aws-k8s-1.21 з підтримкою Kubernetes 1.21. Припинено підтримку aws-k8s-1.16.
  • Оновлено версії пакетів та залежності для мови Rust.

Джерело: opennet.ru

Додати коментар або відгук