Bottlerocket 1.0.0, la distro de Amazon basada en contenedores aislados
Hace pocos días Amazon dio a conocer la liberación de la primera versión significativa de Bottlerocket 1.0.0, la cual es una distribución especializada de Linux diseñada para ejecutar contenedores aislados de manera eficiente y segura.
El sistema operativo está adaptado para ejecutarse en clústeres de Amazon ECS y AWS EKS Kubernetes. Se proporcionan herramientas para crear sus propios ensamblados y revisiones, que pueden usar otras herramientas de orquestación, kernels y tiempo de ejecución para contenedores.
La distribución proporciona un kernel de Linux y un entorno de sistema mínimo, que incluye solo los componentes necesarios para ejecutar contenedores.
Entre los paquetes involucrados en el proyecto se destacaron el administrador del sistema systemd, la biblioteca Glibc to, las herramientas de ensamblaje Buildroot, el configurador del cargador de arranque GRUB network wicked, el tiempo de ejecución para contenedores aislados en contenedor, la plataforma de orquestación Kubernetes Container Authenticator aws-iam-authenticator agent y Amazon ECS.
La distribución se actualiza atómicamente y se presenta en forma de una imagen de sistema indivisible. Se asignan dos particiones de disco para el sistema, una de las cuales contiene el sistema activo y la actualización se copia en la segunda.
Una vez implementada la actualización, se activa la segunda sección, y en la primera, hasta que llega la próxima actualización, se guarda la versión anterior del sistema, a la que se puede revertir en caso de problemas. Las actualizaciones se instalan automáticamente sin la intervención del administrador.
La diferencia clave con respecto a distribuciones similares como Fedora CoreOS, CentOS / Red Hat Atomic Host es el enfoque principal en garantizar la máxima seguridad en el contexto de fortalecer la protección del sistema contra posibles amenazas, complicando la explotación de vulnerabilidades en los componentes del sistema operativo y aumentando el aislamiento de contenedores.
Los contenedores se crean utilizando los mecanismos estándar del kernel de Linux: cgroups, namespaces y seccomp. Para un aislamiento adicional, la distribución usa SELinux en modo de «aplicación» y el módulo dm-verity se usa para la verificación criptográfica de la integridad de la partición root.
Si se detecta un intento de modificar datos en el nivel del dispositivo de bloque, el sistema se reinicia.
La partición root se monta como de solo lectura y la partición de configuración /etc se monta en tmpfs y se restaura a su estado original al reiniciar.
No se admite la modificación directa de archivos en el directorio /etc, como /etc/resolv.conf y /etc/containerd/config.toml, para guardar permanentemente la configuración, usar la API o mover la funcionalidad a contenedores separados.
La mayoría de los componentes del sistema están escritos en el lenguaje Rust, lo que proporciona un medio para la manipulación segura de la memoria para evitar vulnerabilidades causadas por acceder a un área de memoria después de que se libera, desreferenciar punteros nulos y desbordar los límites del búfer.
Al compilar, los modos de compilación «–enable-default-pie» y «–enable-default-ssp» se utilizan por defecto para habilitar la aleatorización del espacio de direcciones ejecutable (PIE) y para proteger contra el desbordamiento de la pila mediante la sustitución de etiquetas canarias.
Para paquetes escritos en C/C ++, los indicadores «-Wall», «-Werror = format-security», «-Wp, -D_FORTIFY_SOURCE = 2», «-Wp, -D_GLIBCXX_ASSERTIONS» y «-fstack-clash -proteccion».
Las herramientas de orquestación de contenedores se envían en un contenedor de administración separado que está habilitado de manera predeterminada y administrado a través de la API y el agente de AWS SSM.
La imagen base carece de un shell de comandos, un servidor SSH y lenguajes interpretados (por ejemplo, sin Python o Perl): las herramientas para el administrador y las herramientas de depuración se mueven a un contenedor de servicios separado , que está deshabilitado de manera predeterminada.
Obtener Bottlerocket 1.0.0
Tanto la distribución, así como los componentes de control de la distribución están escritos en Rust y se distribuyen bajo las licencias MIT y Apache 2.0. El proyecto se está desarrollando en GitHub y está disponible para la participación comunitaria.
La imagen de implementación del sistema se genera para las arquitecturas x86_64 y Aarch64.
Para mayor información, puedes consultar el siguiente enlace.