
Amazon sobre el lanzamiento final — una distribución especializada para ejecutar contenedores y gestionarlos de manera eficiente.
Bottlerocket (por cierto, así se llaman los pequeños cohetes caseros de pólvora) no es el primer sistema operativo para contenedores, pero es muy probable que gane una amplia adopción gracias a su integración predeterminada con los servicios de AWS. Aunque el sistema está orientado a la nube de Amazon, su código abierto permite que se compile en cualquier lugar: localmente en un servidor, en una Raspberry Pi, en cualquier nube competidora e incluso en entornos sin contenedores.
Es un sustituto bastante digno de la distribución CoreOS, que fue descontinuada por Red Hat.
En general, la división de Amazon Web Services ya tiene Amazon Linux, que recientemente lanzó su segunda versión: una distribución de propósito general que se puede ejecutar en un contenedor Docker o con hipervisores de Linux KVM, Microsoft Hyper-V y VMware ESXi. Fue optimizado para trabajar en la nube de AWS, pero con el lanzamiento de Bottlerocket, se recomienda a todos actualizarse al nuevo sistema, que es más seguro, moderno y consume menos recursos.
AWS anunció Bottlerocket . Inmediatamente reconoció que no es el primer "Linux para contenedores", mencionando como fuentes de inspiración a CoreOS, Rancher OS y Project Atomic. Los desarrolladores escribieron que el sistema operativo es "el resultado de las lecciones que hemos aprendido durante mucho tiempo trabajando en servicios en producción a escala de Amazon, y de la experiencia que hemos obtenido en los últimos seis años sobre cómo ejecutar contenedores."
Minimalismo extremo
Linux está despojado de todo lo que no es necesario para ejecutar contenedores. Este diseño, según la empresa, reduce la superficie de ataque.
Esto significa que en el sistema base se instalan menos paquetes, lo que simplifica el mantenimiento y la actualización del sistema operativo, además de reducir la probabilidad de problemas debido a dependencias y disminuir el uso de recursos. En principio, todo funciona dentro de contenedores separados, y el sistema base es prácticamente desnudo.
Amazon también eliminó todas las conchas e intérpretes, eliminando el riesgo de su uso o el aumento accidental de privilegios por parte de los usuarios. En la imagen base, por razones de minimalismo y seguridad, no hay shell, servidor SSH ni lenguajes interpretados como Python. Las herramientas para el administrador se han movido a un contenedor de servicio separado, que está desactivado por defecto.
La gestión del sistema se puede realizar de dos maneras: a través de la API y la orquestación.
En lugar de un gestor de paquetes que actualiza partes individuales del software, Bottlerocket descarga una imagen completa del sistema de archivos y reinicia en ella. En caso de un fallo de arranque, se revierte automáticamente, y un fallo en la carga de trabajo puede iniciar la reversión manualmente (comando a través de la API).
Marco de trabajo (The Update Framework) descarga actualizaciones basadas en imágenes en particiones alternativas o "desmontadas". Se asignan dos particiones de disco al sistema, una de las cuales contiene el sistema activo, mientras que la segunda copia la actualización. En este proceso, la partición raíz se monta en modo solo lectura, y la partición /etc se monta con un sistema de archivos en la memoria y restaura el estado original después del reinicio. No se permite modificar directamente los archivos de configuración en /etc : para guardar la configuración, debe utilizarse la API o trasladar la funcionalidad a contenedores separados.

Esquema de actualización a través de la API
Seguridad
Los contenedores se crean mediante mecanismos estándar del núcleo de Linux: cgroups, espacios de nombres y seccomp, y como sistema de control de acceso forzado, es decir, para un aislamiento adicional se utiliza en modo "enforcing".
Por defecto, se habilitan políticas para la separación de recursos entre contenedores y el núcleo. Los binarios están protegidos con banderas para que los usuarios o programas no puedan ejecutarlos. Y si alguien accede al sistema de archivos, Bottlerocket ofrece una herramienta para verificar y rastrear cualquier cambio realizado.
El modo de "arranque verificado" se implementa a través de la función device-mapper-verity (), que verifica la integridad de la partición raíz durante el arranque. AWS describe dm-verity como "una función del núcleo de Linux que proporciona verificación de integridad para evitar que malware opere en el sistema operativo, como la reescritura del firmware del sistema base".
También hay un filtro en el sistema (BPF extendido, ), que permite reemplazar los módulos del núcleo por programas BPF más seguros para operaciones de sistema de bajo nivel.
Modelo de ejecución
Establecido por el usuario
Compilación
Seguridad
Modo de fallo
Acceso a recursos
Usuario
tarea
sí
cualquier
derechos de usuarios
interrupción de la ejecución
llamada del sistema, fallo
Núcleo
tarea
no
estático
no
pánico del núcleo
directo
BPF
evento
sí
JIT, CO-RE
verificación, JIT
mensaje de error
ayudantes limitados
La diferencia entre BPF y un código típico de nivel de usuario o núcleo,
AWS afirmó que Bottlerocket 'aplica un modelo operativo que mejora aún más la seguridad, evitando conexión a servidores de producción con privilegios de administrador', y 'es adecuado para grandes sistemas distribuidos con control limitado sobre cada host individual'.
Para los administradores del sistema, hay un contenedor de administrador. Pero AWS no cree que el administrador necesite trabajar a menudo dentro de Bottlerocket: 'El acto de entrar en una instancia individual de Bottlerocket está destinado a ser poco frecuente: para depuración avanzada y resolución de problemas', desarrolladores.
Lenguaje Rust
Las herramientas del sistema operativo sobre el núcleo están principalmente escritas en Rust. Este lenguaje por naturaleza , así como .
Al compilar por defecto se aplican las banderas --enable-default-pie y --enable-default-ssp para habilitar la aleatorización del espacio de direcciones de archivos ejecutables (, PIE) y la protección contra desbordamientos de pila.
Para paquetes en C/C++ también se incluyen banderas -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS y -fstack-clash-protection.
Además de Rust y C/C++, algunos paquetes están escritos en Go.
Integración con servicios de AWS
La diferencia con otros sistemas operativos de contenedores es que Amazon optimizó Bottlerocket para funcionar en AWS e integrarse con otros servicios de AWS.
El orquestador de contenedores más popular es Kubernetes, por lo que AWS implementó la integración con su propio servicio de Kubernetes empresarial (EKS). Las herramientas de orquestación se encuentran en un contenedor de control separado , que está habilitado por defecto y se gestiona a través de la API y AWS SSM Agent.
Será interesante ver si Bottlerocket despega, considerando el fracaso de algunas iniciativas similares en el pasado. Por ejemplo, PhotonOS de Vmware resultó ser poco útil, y RedHat compró CoreOS y , que se consideraba pionero en este campo.
La integración de Bottlerocket en los servicios de AWS hace que este sistema sea único en su tipo. Quizás esa sea la principal razón por la que algunos usuarios puedan preferir Bottlerocket a otras distribuciones, como CoreOS o Alpine. El sistema está diseñado principalmente para trabajar con EKS y ECS, pero repetimos, esto no es obligatorio. En primer lugar, Bottlerocket se puede utilizar, por ejemplo, como una solución alojada. En segundo lugar, los usuarios de EKS y ECS seguirán teniendo la opción de elegir el sistema operativo.
El código fuente de Bottlerocket se ha publicado en GitHub bajo la licencia Apache 2.0. Los desarrolladores ya .
Publicidad
VDSina ofrece . Se puede instalar cualquier sistema operativo, incluyendo desde su propia imagen. Cada servidor está conectado a un canal de internet de 500 Megabits y protegido gratuitamente contra ataques DDoS.
Fuente: habr.com
