Zur Ausführung von Containern wurde eine minimalistische Linux-Distribution Bottlerocket veröffentlicht. Das Wichtigste an ihm

Zur Ausführung von Containern wurde eine minimalistische Linux-Distribution Bottlerocket veröffentlicht. Das Wichtigste an ihm

Amazon-Unternehmen kündigte die über die endgültige Veröffentlichung Flaschenrakete – eine spezialisierte Distribution zum Ausführen und effektiven Verwalten von Containern.

Bottlerocket (übrigens der Name für kleine selbstgebaute Schwarzpulverraketen) ist nicht das erste Betriebssystem für Container, aber es ist wahrscheinlich, dass es dank der Standardintegration mit AWS-Diensten weit verbreitet wird. Obwohl sich das System auf die Amazon-Cloud konzentriert, kann es dank des offenen Quellcodes überall erstellt werden: lokal auf einem Server, auf einem Raspberry Pi, in jeder konkurrierenden Cloud und sogar in einer Umgebung ohne Container.

Dies ist ein absolut würdiger Ersatz für die CoreOS-Distribution, die Red Hat verdrängt hat.

Tatsächlich verfügt die Amazon Web Services-Abteilung bereits über Amazon Linux, das kürzlich in der zweiten Version herauskam: Es handelt sich um eine Allzweck-Distribution, die in einem Docker-Container oder mit Linux KVM, Microsoft Hyper-V und VMware ausgeführt werden kann ESXi-Hypervisoren. Es wurde für die Ausführung in der AWS-Cloud optimiert, aber mit der Veröffentlichung von Bottlerocket wird jeder dazu ermutigt, auf ein neues System zu aktualisieren, das sicherer und moderner ist und weniger Ressourcen verbraucht.

AWS hat Bottlerocket angekündigt im März 2020 des Jahres. Sie gab sofort zu, dass dies nicht das erste „Linux für Container“ sei, und nannte CoreOS, Rancher OS und Project Atomic als Inspirationsquellen. Die Entwickler schrieben, das Betriebssystem sei „das Ergebnis der Lehren, die wir aus der langjährigen Ausführung von Produktionsdiensten im Amazon-Maßstab gezogen haben, und der Erfahrungen, die wir in den letzten sechs Jahren mit der Ausführung von Containern gesammelt haben.“

Extremer Minimalismus

Linux enthält alles, was nicht zum Ausführen von Containern erforderlich ist. Nach Angaben des Unternehmens verringert dieses Design die Angriffsfläche.

Dies bedeutet, dass weniger Pakete auf dem Basissystem installiert werden, was die Wartung und Aktualisierung des Betriebssystems erleichtert und auch die Wahrscheinlichkeit von Problemen aufgrund von Abhängigkeiten verringert, wodurch der Ressourcenverbrauch reduziert wird. Grundsätzlich funktioniert hier alles in separaten Containern und das zugrunde liegende System ist praktisch leer.

Amazon hat außerdem alle Shells und Interpreter entfernt, um das Risiko zu beseitigen, dass sie verwendet werden oder Benutzer versehentlich ihre Berechtigungen erweitern. Aus Gründen des Minimalismus und der Sicherheit enthält das Basis-Image keine Befehlsshell, keinen SSH-Server oder interpretierte Sprachen wie Python. Administratortools werden in einem separaten Dienstcontainer abgelegt, der standardmäßig deaktiviert ist.

Das System wird auf zwei Arten verwaltet: über die API und Orchestrierung.

Anstelle eines Paketmanagers, der einzelne Softwareteile aktualisiert, lädt Bottlerocket ein vollständiges Dateisystem-Image herunter und startet dieses neu. Wenn ein Ladevorgang fehlschlägt, erfolgt automatisch ein Rollback, und ein Workload-Fehler kann manuell ein Rollback auslösen (Befehl über API).

Rahmen TUF (Das Update Framework) lädt Image-basierte Updates auf alternative oder „nicht gemountete“ Partitionen herunter. Dem System werden zwei Festplattenpartitionen zugewiesen, von denen eine das aktive System enthält und das Update auf die zweite kopiert wird. In diesem Fall wird die Root-Partition im schreibgeschützten Modus gemountet und die Partition /etc mit dem Dateisystem im RAM gemountet tmpfs und stellt nach einem Neustart den ursprünglichen Zustand wieder her. Direkte Änderung von Konfigurationsdateien in /etc nicht unterstützt: Um Einstellungen zu speichern, sollten Sie die API verwenden oder die Funktionalität in separate Container verschieben.

Zur Ausführung von Containern wurde eine minimalistische Linux-Distribution Bottlerocket veröffentlicht. Das Wichtigste an ihm
API-Update-Schema

Sicherheit

Container werden durch Standardmechanismen des Linux-Kernels erstellt – cgroups, Namespaces und seccomp – und werden als erzwungenes Zugriffskontrollsystem, also für zusätzliche Isolation, verwendet SELinux im Modus „Durchsetzung“.

Standardmäßig sind Richtlinien aktiviert, um Ressourcen zwischen Containern und dem Kernel zu teilen. Binärdateien werden mit Flags geschützt, um zu verhindern, dass Benutzer oder Programme sie ausführen. Und wenn man doch einmal an das Dateisystem gelangt, bietet Bottlerocket ein Tool an, mit dem sich vorgenommene Änderungen überprüfen und nachverfolgen lassen.

Der „Verified Boot“-Modus wird durch die Funktion „device-mapper-verity“ implementiert (dm-verity), das beim Booten die Integrität der Root-Partition überprüft. AWS beschreibt dm-verity als „eine Funktion des Linux-Kernels, die Integritätsprüfungen bereitstellt, um zu verhindern, dass Malware auf dem Betriebssystem ausgeführt wird, beispielsweise das Überschreiben von Kernsystemsoftware.“

Es gibt auch einen Filter im System eGMP (erweiterter BPF, entwickelt von Alexey Starovoitov), wodurch Kernelmodule durch sicherere BPF-Programme für Systemoperationen auf niedriger Ebene ersetzt werden können.

Ausführungsmodell
Benutzerdefinierte
Zusammenstellung
Sicherheit
Fehlermodus
Zugriff auf Ressourcen

Benutzer
Herausforderung
ja
Jede
Nutzerrechte
Ausführung unterbrechen
Systemaufruf, Fehler

Kern
Herausforderung
Nein
statisch
Nein
Kernel-Panik
прямой

BPF
Ereignis
ja
JIT, CO-RE
Verifizierung, JIT
Fehlermeldung
begrenzte Helfer

Wie sich BPF vom normalen Code auf Benutzer- oder Kernelebene unterscheidet Quelle

Laut AWS setzt Bottlerocket „ein Betriebsmodell ein, das die Sicherheit weiter erhöht, indem es Verbindungen zu Produktionsservern mit Administratorrechten verhindert“ und „für große verteilte Systeme geeignet ist, bei denen die Kontrolle über jeden einzelnen Host begrenzt ist“.

Für Systemadministratoren steht ein Administrator-Container zur Verfügung. Aber AWS glaubt nicht, dass ein Administrator oft innerhalb von Bottlerocket arbeiten muss: „Die Anmeldung bei einer separaten Bottlerocket-Instanz ist für seltene Vorgänge gedacht: erweitertes Debugging und Fehlerbehebung.“ schreiben Entwickler.

Rust-Sprache

Die Betriebssysteminstrumentierung auf dem Kernel ist größtenteils in Rust geschrieben. Diese Sprache ist von Natur aus verringert die Wahrscheinlichkeit eines unsicheren Speicherzugriffs, und auch beseitigt Race-Bedingungen zwischen Threads.

Beim Erstellen werden standardmäßig Flags angewendet --enable-default-pie и --enable-default-ssp um die Randomisierung des Adressraums ausführbarer Dateien zu ermöglichen (positionsunabhängig ausführbar, PIE) und Stapelüberlaufschutz.

Für C/C++-Pakete sind zusätzliche Flags enthalten -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS и -fstack-clash-protection.

Neben Rust und C/C++ sind einige Pakete in Go geschrieben.

Integration mit AWS-Diensten

Der Unterschied zu ähnlichen Container-Betriebssystemen besteht darin, dass Amazon Bottlerocket für die Ausführung auf AWS und die Integration mit anderen AWS-Diensten optimiert hat.

Der beliebteste Container-Orchestrator ist Kubernetes, daher hat AWS die Integration mit seinem eigenen Enterprise Kubernetes Service (EKS) eingeführt. Orchestrierungstools werden in einem separaten Kontrollcontainer geliefert Flaschenraketen-Kontrollbehälter, die standardmäßig aktiviert ist und über die API und den AWS SSM-Agenten verwaltet wird.

Angesichts des Scheiterns einiger ähnlicher Initiativen in der Vergangenheit wird es interessant sein zu sehen, ob Bottlerocket Erfolg hat. Beispielsweise stellte sich heraus, dass PhotonOS von Vmware nicht beansprucht wurde, und RedHat kaufte CoreOS und das Projekt abgeschlossen, der als Pionier auf diesem Gebiet galt.

Die Integration von Bottlerocket in AWS-Dienste macht dieses System auf seine Art einzigartig. Dies ist möglicherweise der Hauptgrund, warum einige Benutzer Bottlerocket anderen Distributionen wie CoreOS oder Alpine vorziehen. Das System ist ursprünglich für die Zusammenarbeit mit EKS und ECS konzipiert, wir wiederholen jedoch, dass dies nicht erforderlich ist. Erstens kann Bottlerocket selbst zusammenbauen und nutzen Sie es beispielsweise als gehostete Lösung. Zweitens haben EKS- und ECS-Benutzer weiterhin die Möglichkeit, ihr Betriebssystem auszuwählen.

Der Bottlerocket-Quellcode wird auf GitHub unter der Apache 2.0-Lizenz veröffentlicht. Die Entwickler haben es bereits getan Reagieren Sie auf Fehlerberichte und Funktionsanfragen.

Über die Rechte der Werbung

VDSina bietet VDS mit täglicher Bezahlung. Es ist möglich, jedes Betriebssystem zu installieren, auch von Ihrem eigenen Image. Jeder Server ist mit einem Internetkanal von 500 Megabit verbunden und kostenlos vor DDoS-Angriffen geschützt!

Zur Ausführung von Containern wurde eine minimalistische Linux-Distribution Bottlerocket veröffentlicht. Das Wichtigste an ihm

Source: habr.com

Kommentar hinzufügen