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

Опубліковано випуск 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.

Інструменти для оркестрування контейнерів поставляються в окремому контейнері, що вмикається за замовчуванням і управляється через 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 з підтримкою Kubernetes 1.21. У варіантах k8s задіяні налаштування cgroup runtime.slice та system.slice.

Джерело: opennet.ru

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