Compania Amazon
Bottlerocket (apropo, numele dat micilor rachete cu pulbere neagră de casă) nu este primul sistem de operare pentru containere, dar este probabil să devină răspândit datorită integrării implicite cu serviciile AWS. Deși sistemul este axat pe cloud-ul Amazon, codul open source îi permite să fie construit oriunde: local pe un server, pe un Raspberry Pi, în orice cloud concurent și chiar într-un mediu fără container.
Acesta este un înlocuitor complet demn pentru distribuția CoreOS pe care Red Hat a îngropat-o.
De fapt, divizia Amazon Web Services are deja Amazon Linux, care a apărut recent în a doua sa versiune: este o distribuție de uz general care poate fi rulată într-un container Docker sau cu Linux KVM, Microsoft Hyper-V și VMware hipervizoare ESXi. A fost optimizat pentru a rula pe cloud AWS, dar odată cu lansarea Bottlerocket, toată lumea este încurajată să facă upgrade la un nou sistem care este mai sigur, mai modern și care utilizează mai puține resurse.
AWS a anunțat Bottlerocket
Minimalism extrem
Linux este lipsit de tot ceea ce nu este necesar pentru a rula containere. Acest design, conform companiei, reduce suprafața de atac.
Aceasta înseamnă că pe sistemul de bază sunt instalate mai puține pachete, ceea ce facilitează întreținerea și actualizarea sistemului de operare și, de asemenea, reduce probabilitatea apariției problemelor din cauza dependențelor, reducând utilizarea resurselor. Practic, totul funcționează aici în containere separate, iar sistemul de bază este practic gol.
De asemenea, Amazon a eliminat toate shell-urile și interpreții, eliminând riscul ca acestea să fie folosite sau ca utilizatorii să escaladeze accidental privilegiile. De dragul minimalismului și securității, imaginea de bază nu include un shell de comandă, un server SSH sau limbaje interpretate precum Python. Instrumentele de administrare sunt plasate într-un container de servicii separat, care este dezactivat implicit.
Sistemul este gestionat în două moduri: prin API și orchestrare.
În loc de un manager de pachete care actualizează componente individuale de software, Bottlerocket descarcă o imagine completă a sistemului de fișiere și repornește în ea. Dacă o încărcare eșuează, se derulează automat, iar o eroare a sarcinii de lucru poate declanșa o derulare manuală (comandă prin API).
Cadru /etc
montat cu sistemul de fișiere în RAM /etc
nu este acceptat: pentru a salva setările, ar trebui să utilizați API-ul sau să mutați funcționalitatea în containere separate.
Schema de actualizare API
Безопасность
Containerele sunt create prin mecanisme standard ale nucleului Linux - cgroups, namespaces și seccomp și sunt utilizate ca sistem de control al accesului forțat, adică pentru izolarea suplimentară
În mod implicit, politicile sunt activate pentru a partaja resurse între containere și nucleu. Binarele sunt protejate cu steaguri pentru a împiedica utilizatorii sau programele să le execute. Și dacă cineva ajunge la sistemul de fișiere, Bottlerocket oferă un instrument pentru a verifica și urmări orice modificări efectuate.
Modul „pornire verificată” este implementat prin intermediul funcției device-mapper-verity (
Există și un filtru în sistem
Model de execuție
Definit de utilizator
Compilare
Безопасность
Modul de eșec
Accesul la resurse
utilizator
sarcină
da
orice
drepturi de utilizator
întrerupe executarea
apel de sistem, defecțiune
Miezul
sarcină
nu
static
nu
panica nucleului
drept
BPF
eveniment
da
JIT, CO-RE
verificare, JIT
mesaj de eroare
ajutoare limitate
Cum diferă BPF de codul de utilizator obișnuit sau la nivel de kernel
AWS a declarat că Bottlerocket „folosește un model de operare care îmbunătățește și mai mult securitatea prin prevenirea conexiunilor la serverele de producție cu privilegii administrative” și este „potrivit pentru sistemele mari distribuite în care controlul asupra fiecărei gazde individuale este limitat”.
Un container de administrator este furnizat pentru administratorii de sistem. Dar AWS nu crede că un administrator va trebui să lucreze adesea în interiorul Bottlerocket: „Actul de a te conecta la o instanță separată de Bottlerocket este destinat operațiunilor rare: depanare avansată și depanare.”
Limbajul ruginii
Instrumentarea sistemului de operare din partea superioară a nucleului este scrisă în mare parte în Rust. Acest limbaj este prin natura sa
Steaguri sunt aplicate implicit la construirea --enable-default-pie
и --enable-default-ssp
pentru a permite randomizarea spațiului de adrese al fișierelor executabile (
Pentru pachetele C/C++, sunt incluse steaguri suplimentare -Wall
, -Werror=format-security
, -Wp,-D_FORTIFY_SOURCE=2
, -Wp,-D_GLIBCXX_ASSERTIONS
и -fstack-clash-protection
.
Pe lângă Rust și C/C++, unele pachete sunt scrise în Go.
Integrare cu serviciile AWS
Diferența față de sistemele de operare container similare este că Amazon a optimizat Bottlerocket pentru a rula pe AWS și a se integra cu alte servicii AWS.
Cel mai popular orchestrator de containere este Kubernetes, așa că AWS a introdus integrarea cu propriul serviciu Enterprise Kubernetes (EKS). Instrumentele de orchestrare vin într-un container de control separat
Va fi interesant de văzut dacă Bottlerocket decolează, având în vedere eșecul unor inițiative similare din trecut. De exemplu, PhotonOS de la Vmware s-a dovedit a fi nerevendicat, iar RedHat a cumpărat CoreOS și
Integrarea Bottlerocket în serviciile AWS face ca acest sistem să fie unic în felul său. Acesta este probabil motivul principal pentru care unii utilizatori pot prefera Bottlerocket în detrimentul altor distribuții, cum ar fi CoreOS sau Alpine. Sistemul este proiectat inițial să funcționeze cu EKS și ECS, dar repetăm că acest lucru nu este necesar. În primul rând, Bottlerocket poate
Codul sursă Bottlerocket este publicat pe GitHub sub licența Apache 2.0. Dezvoltatorii au făcut deja
Despre drepturile de publicitate
VDSina ofertele
Sursa: www.habr.com