
Azienda Amazon sul rilascio finale — una distribuzione specializzata per l'esecuzione di container e la loro gestione efficiente.
Bottlerocket (tra l'altro, questo è il nome delle piccole razzi fai-da-te a polvere da sparo) non è il primo sistema operativo per container, ma è molto probabile che ottenga una diffusione ampia grazie all'integrazione predefinita con i servizi AWS. Sebbene il sistema sia orientato verso il cloud di Amazon, il codice sorgente aperto consente di compilarlo ovunque: localmente su un server, su Raspberry Pi, in qualsiasi cloud concorrente e persino in un ambiente senza container.
È un'ottima alternativa alla distribuzione CoreOS, che è stata abbandonata da Red Hat.
Infatti, la divisione Amazon Web Services ha già Amazon Linux, recentemente rilasciato nella sua seconda versione: una distribuzione di uso generale che può essere eseguita in un container Docker o con hypervisor Linux KVM, Microsoft Hyper-V e VMware ESXi. È stato ottimizzato per lavorare nel cloud AWS, ma con il rilascio di Bottlerocket a tutti è consigliato effettuare un upgrade al nuovo sistema, che è più sicuro, moderno e consuma meno risorse.
AWS ha annunciato Bottlerocket . Ha subito riconosciuto che non è il primo "Linux per container", citando tra le fonti di ispirazione CoreOS, Rancher OS e Project Atomic. Gli sviluppatori hanno scritto che il sistema operativo è "il risultato delle lezioni apprese dopo un lungo periodo di lavoro con servizi di produzione su scala Amazon, e considerando l'esperienza accumulata negli ultimi sei anni su come eseguire container".
Minimalismo estremo
Linux è stato ripulito da tutto ciò che non è necessario per l'esecuzione dei container. Questo design, secondo l'azienda, riduce la superficie di attacco.
Ciò significa che nella sistema base sono installati meno pacchetti, semplificando il supporto e l'aggiornamento del sistema operativo, oltre a ridurre la probabilità di problemi dovuti alle dipendenze e diminuire l'utilizzo delle risorse. In linea di massima, tutto funziona all'interno di singoli container, e il sistema base è praticamente vuoto.
Amazon ha anche rimosso tutte le shell e gli interpreti, eliminando il rischio del loro utilizzo o di un eventuale elevamento dei privilegi da parte degli utenti. Nell'immagine base, per minimizzare e garantire sicurezza, non ci sono shell di comando, server SSH e linguaggi interpretati come Python. Gli strumenti per l'amministratore sono stati estratti in un contenitore di servizio separato, che è disattivato di default.
La gestione del sistema è prevista in due modi: tramite API e orchestrazione.
Invece di un gestore di pacchetti che aggiorna singole parti del software, Bottlerocket carica un'immagine completa del filesystem e si riavvia in essa. In caso di fallimento del caricamento, viene eseguito automaticamente il rollback, e il fallimento del carico di lavoro può attivare manualmente il rollback (comando tramite API).
Framework (The Update Framework) carica aggiornamenti basati su immagini in partizioni alternative o "smontate". Sono dedicati due partizioni del disco al sistema, una delle quali contiene il sistema attivo, mentre sull'altra viene copiato l'aggiornamento. In questo modo, la partizione radice è montata in modalità di sola lettura, mentre la partizione /etc è montata con il filesystem in memoria volatile e ripristina lo stato originale dopo il riavvio. La modifica diretta dei file di configurazione in /etc non è supportata: per la conservazione delle impostazioni è necessario utilizzare l'API o estrarre la funzionalità in contenitori separati.

Lo schema di aggiornamento tramite API
Sicurezza
I contenitori sono creati mediante i meccanismi standard del kernel Linux — cgroups, spazi dei nomi e seccomp, e come sistema di controllo degli accessi, cioè per ulteriore isolamento, viene utilizzato in modalità "enforcing".
Di default, sono attive politiche per la suddivisione delle risorse tra contenitori e kernel. I binari sono protetti da flag, in modo che gli utenti o i programmi non possano eseguirli. E se qualcuno riesce ad accedere al filesystem, Bottlerocket offre uno strumento per verificare e monitorare eventuali modifiche apportate.
La modalità "bootsrap verificata" è implementata tramite la funzione device-mapper-verity (), che verifica l'integrità della partizione radice durante il caricamento. AWS descrive dm-verity come «una funzione del kernel Linux che fornisce la verifica dell'integrità per prevenire il funzionamento di malware nel sistema operativo, come la riscrittura del firmware di sistema principale».
È presente anche un filtro (BPF esteso, ), che consente di sostituire i moduli del kernel con programmi BPF più sicuri per operazioni di sistema a basso livello.
Modello di esecuzione
Impostato dall'utente
Compilazione
Sicurezza
Modalità di errore
Accesso alle risorse
Utente
compito
sì
qualsiasi
diritti degli utenti
interruzione dell'esecuzione
chiamata di sistema, fault
Il kernel
compito
no
statico
no
panic del kernel
diretto
BPF
evento
sì
JIT, CO-RE
verifica, JIT
messaggio di errore
helper limitati
La differenza tra BPF e il codice di livello utente o kernel normale è
AWS ha dichiarato che Bottlerocket «applica un modello operativo che migliora ulteriormente la sicurezza, impedendo la connessione ai server di produzione con privilegi di amministratore», e «è adatto per grandi sistemi distribuiti, in cui è limitato il controllo su ogni singolo host».
Per gli amministratori di sistema è previsto un contenitore per gli amministratori. Ma AWS non crede che l'amministratore debba spesso lavorare all'interno di Bottlerocket: «L'accesso a un'istanza separata di Bottlerocket è destinato a operazioni rare: debug avanzato e risoluzione dei problemi», — gli sviluppatori.
Il linguaggio Rust
L'ecosistema OS sopra il kernel è principalmente scritto in Rust. Questo linguaggio, per sua natura, , e inoltre .
Durante la compilazione predefinita, vengono applicate le flag --enable-default-pie e --enable-default-ssp per attivare la randomizzazione dello spazio degli indirizzi dei file eseguibili (, PIE) e la protezione contro il buffer overflow.
Per i pacchetti in C/C++ vengono inoltre incluse flag -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS e -fstack-clash-protection.
Oltre a Rust e C/C++, alcuni pacchetti sono scritti in Go.
Integrazione con i servizi AWS
La differenza rispetto ad altri sistemi operativi containerizzati è che Amazon ha ottimizzato Bottlerocket per l'uso su AWS e per l'integrazione con altri servizi AWS.
Il più popolare orchestratore di container è Kubernetes, quindi AWS ha implementato l'integrazione con il proprio Enterprise Kubernetes Service (EKS). Gli strumenti per l'orchestrazione vengono forniti in un container di gestione separato , attivato per impostazione predefinita e gestito tramite API e AWS SSM Agent.
Sarà interessante vedere se Bottlerocket avrà successo, considerando il fallimento di alcune iniziative simili in passato. Ad esempio, PhotonOS di Vmware si è rivelata poco richiesta, mentre RedHat ha acquisito CoreOS e , che era considerato un pioniere in questo campo.
L'integrazione di Bottlerocket nei servizi AWS rende questo sistema unico nel suo genere. Potrebbe essere la ragione principale per cui alcuni utenti potrebbero preferire Bottlerocket ad altre distribuzioni, come CoreOS o Alpine. Il sistema è progettato principalmente per lavorare con EKS ed ECS, ma ripetiamo, non è obbligatorio. In primo luogo, Bottlerocket può e utilizzato, ad esempio, come soluzione hosted. In secondo luogo, gli utenti di EKS ed ECS continueranno ad avere la possibilità di scegliere il proprio sistema operativo.
Il codice sorgente di Bottlerocket è pubblicato su GitHub con licenza Apache 2.0. Gli sviluppatori già .
In base alla pubblicità
VDSina offre . È possibile installare qualsiasi sistema operativo, incluso il proprio immagine. Ogni server è connesso a un canale Internet da 500 Megabit ed è protetto gratuitamente da attacchi DDoS!
Fonte: habr.com
