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

Опубліковано випуск Linux-дистрибутива Bottlerocket 1.8.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».

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

  • Оновлено вміст адміністративного та керуючого контейнерів.
  • Runtime для ізольованих контейнерів оновлено до гілки containerd 1.6.x.
  • Забезпечено перезапуск фонових процесів, що координують роботу контейнерів після змін у сховище сертифікатів.
  • Надано можливість виставляти завантажувальні параметри ядра через секцію Boot Configuration.
  • Включено ігнорування порожніх блоків під час контролю цілісності кореневого розділу з допомогою dm-verity.
  • Надано можливість статичної прив'язки імен хостів /etc/hosts.
  • Надано можливість генерації мережної конфігурації за допомогою утиліти netdog (додана команда generate-net-config).
  • Запропоновано нові варіанти дистрибутива з підтримкою Kubernetes 1.23. Скорочено час запуску pod-ів у Kubernetes за рахунок відключення режиму configMapAndSecretChangeDetectionStrategy. Додано нові налаштування kubelet-ів: provider-id та podPidsLimit.
  • Запропоновано новий варіант дистрибутива "aws-ecs-1-nvidia" для Amazon Elastic Container Service (Amazon ECS), що поставляється з драйверами NVIDIA.
  • Додано підтримку пристроїв зберігання Microchip Smart Storage та MegaRAID SAS. Розширено підтримку Ethernet-карт на чіпах Broadcom.
  • Оновлено версії пакетів та залежності для мов Go та Rust, а також версії пакетів зі сторонніми програмами. Bottlerocket SDK оновлено до версії 0.26.0.

Джерело: opennet.ru

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