
Compania Amazon despre lansarea finală — o distribuție specializată pentru rularea containerelor și gestionarea eficientă a acestora.
Bottlerocket (de altfel, așa se numesc rachetele mici făcute acasă pe bază de pulbere) — nu este primul sistem de operare pentru containere, dar este foarte posibil să obțină o popularitate largă datorită integrării sale implicite cu serviciile AWS. Deși sistemul este orientat către cloud-ul Amazon, codul sursă deschis permite construirea acestuia oriunde: local pe un server, pe Raspberry Pi, în orice cloud concurent și chiar într-un mediu fără containere.
Este o înlocuire demnă pentru distribuția CoreOS, pe care Red Hat a îngropat-o.
În general, divizia Amazon Web Services are deja Amazon Linux, care a fost recent lansat în a doua versiune: aceasta este o distribuție de uz general, care poate fi rulată într-un container Docker sau cu hipervizoare Linux KVM, Microsoft Hyper-V și VMware ESXi. A fost optimizată pentru a funcționa în cloud-ul AWS, dar odată cu lansarea Bottlerocket, tuturor li se recomandă să facă upgrade la noul sistem, care este mai sigur, modern și consumă mai puține resurse.
AWS a anunțat Bottlerocket . A recunoscut imediat că nu este primul „Linux pentru containere”, menționând ca surse de inspirație CoreOS, Rancher OS și Project Atomic. Dezvoltatorii au scris că sistemul de operare este „rezultatul lecțiilor pe care le-am învățat în timpul lucrului în servicii de producție la scară Amazon și ținând cont de experiența pe care am dobândit-o în ultimii șase ani despre cum să rulăm containere”.
Minimalism extrem
Linux-ul este curățat de tot ce nu este necesar pentru rularea containerelor. Acest design, potrivit companiei, reduce suprafața de atac.
Aceasta înseamnă că în sistemul de bază sunt instalate mai puține pachete, ceea ce simplifică întreținerea și actualizarea sistemului de operare, și reduce probabilitatea apariției problemelor din cauza dependențelor, reducând utilizarea resurselor. În principiu, totul funcționează în interiorul unor containere separate, iar sistemul de bază este practic gol.
Amazon a eliminat, de asemenea, toate shell-urile și interpretoarele, eliminând riscul utilizării lor sau al creșterii accidentale a privilegiilor de către utilizatori. În imaginea de bază, din motive de minimalism și securitate, lipsesc shell-ul de comandă, serverul SSH și limbajele interpretate precum Python. Instrumentele pentru administratori sunt scoase într-un container de service separat, care este dezactivat implicit.
Gestionarea sistemului este prevăzută în două moduri: prin API și orchestrare.
În loc de un manager de pachete care actualizează părți individuale ale software-ului, Bottlerocket descarcă o imagine completă a sistemului de fișiere și repornește în aceasta. În cazul unei erori la încărcare, acesta revine automat, iar o eroare a sarcinii de lucru poate iniția o revenire manuală (comandă prin API).
Framework (The Update Framework) încarcă actualizări pe baza imaginilor în partiții alternative sau "de-căptușite". Sistemul este alocat pe două partiții de disc, dintre care una conține sistemul activ, iar pe cealaltă se copiază actualizarea. În timpul acestui proces, partiția rădăcină este montată în modul doar pentru citire, iar partiția /etc este montată cu un sistem de fișiere în memoria operativă și revine la starea inițială după repornire. Modificările directe ale fișierelor de configurare în /etc nu sunt acceptate: pentru a salva setările, trebuie utilizat API-ul sau să se externalizeze funcționalitățile în containere separate.

Schema de actualizare prin API
Securitate
Containerele sunt create prin mecanismele standard ale nucleului Linux — cgroups, spații de nume și seccomp, iar ca sistem de control al accesului obligatoriu, adică pentru izolare suplimentară este utilizat în modul "enforcing".
Implicit, politicile sunt activate pentru a separa resursele între containere și nucleu. Binarele sunt protejate cu steaguri, astfel încât utilizatorii sau programele să nu le poată executa. Și, dacă cineva a ajuns la sistemul de fișiere, Bottlerocket oferă un instrument pentru a verifica și urmări orice modificări efectuate.
Modul „încărcării verificate” este implementat prin funcția device-mapper-verity (), care verifică integritatea partiției rădăcină în timpul încărcării. AWS descrie dm-verity ca „o funcție a nucleului Linux care asigură verificarea integrității, pentru a preveni funcționarea programelor malițioase în sistemul de operare, cum ar fi rescrierea software-ului de bază al sistemului”.
Există de asemenea un filtru în sistem (BPF extins, ), care permite înlocuirea modulelor nucleului cu programe BPF mai sigure pentru operațiuni sistemice de nivel jos.
Model de execuție
Definit de utilizator
Compilare
Securitate
Mod de eșec
Acces la resurse
Utilizator
o sarcină
da
oricare
drepturile utilizatorilor
interruperea execuției
apel de sistem, fault
Nucleu
o sarcină
nu
static
nu
panică de nucleu
direct
BPF
eveniment
da
JIT, CO-RE
verificare, JIT
mesaj de eroare
helperi restricționați
Diferența dintre BPF și codul obișnuit de nivel utilizator sau nucleu,
AWS a declarat că Bottlerocket „aplică un model operațional care sporește și mai mult securitatea, împiedicând conectarea la serverele de producție cu privilegii de administrator”, și „este potrivit pentru sisteme distribuite mari, în care controlul asupra fiecărui gazdă este limitat”.
Pentru administratorii sistemului este prevăzut un container de administrator. Totuși, AWS nu crede că administratorul va trebui să lucreze frecvent în Bottlerocket: „Actul de conectare la o instanță separată de Bottlerocket este destinat operațiunilor rare: depanare avansată și diagnosticare” — dezvoltatori.
Limbajul Rust
Instrumentele OS deasupra nucleului sunt în principal scrise în Rust. Acest limbaj, prin natura sa, , dar și pentru .
La compilare se aplică în mod implicit steaguri --enable-default-pie și --enable-default-ssp pentru a activa randomizarea spațiului de adresare al fișierelor executabile (, PIE) și protecția împotriva overflow-ului stivei.
Pentru pachetele în C/C++ se adaugă în plus steaguri -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS și -fstack-clash-protection.
Pe lângă Rust și C/C++, unele pachete sunt scrise în limbajul Go.
Integrarea cu serviciile AWS
Diferența față de sistemele de operare containerizate similare este că Amazon a optimizat Bottlerocket pentru a funcționa pe AWS și pentru a se integra cu alte servicii AWS.
Cel mai popular orchestrator de containere este Kubernetes, motiv pentru care AWS a implementat integrarea cu propriul său Serviciu Kubernetes Enterprise (EKS). Instrumentele pentru orchestration sunt într-un container de control separat, , care este inclus în mod implicit și gestionat prin API și AWS SSM Agent.
Va fi interesant de văzut dacă Bottlerocket va avea succes, având în vedere eșecul unor inițiative similare din trecut. De exemplu, PhotonOS de la Vmware s-a dovedit a fi nereușită, iar RedHat a achiziționat CoreOS și , care a fost considerat un pionier în acest domeniu.
Integrarea Bottlerocket în serviciile AWS face ca acest sistem să fie unic în felul său. Posibil, acesta este motivul principal pentru care unii utilizatori ar putea prefera Bottlerocket altor distribuții, precum CoreOS sau Alpine. Sistemul a fost proiectat inițial pentru a funcționa cu EKS și ECS, dar să repetăm, aceasta nu este o cerință obligatorie. În primul rând, Bottlerocket poate și utilizat, de exemplu, ca soluție găzduită. În al doilea rând, utilizatorii EKS și ECS vor continua să aibă opțiunea de a alege sistemul de operare.
Codul sursă Bottlerocket este publicat pe GitHub sub licența Apache 2.0. Dezvoltatorii deja .
În numele publicității
VDSina oferă . Este posibilă instalarea oricărui sistem de operare, inclusiv din imaginea proprie. Fiecare server este conectat la un canal de internet de 500 Megabiți și este protejat gratuit împotriva atacurilor DDoS!
Sursa: habr.com
