adam121 - stock.adobe.com

Was sind Cloud-Container und wie funktionieren sie?

Die Containertechnik hat beeindruckende Erfolge hinter sich. Gerade beim Einsatz in der Cloud sind aber einige Punkte zu beachten, um für keine unbeabsichtigten Lücken zu sorgen.

In der Cloud gehostete Container sind ein heiß diskutiertes Thema in der IT, insbesondere wenn es um ihre Absicherung geht. Die größten Techkonzerne der Welt wie Microsoft, Google und Facebook setzen Container ein. Beispielsweise teilte etwa Google mit, dass alle Dienste, die das Unternehmen nutzt, in Containern laufen. Pro Woche seien es insgesamt mehrere Milliarden Container, die der Internetkonzern einsetzt.

Im vergangenen Jahrzehnt ist die Bedeutung von Containern in produktiven Umgebungen immer größer geworden. Sie spielen auch eine bedeutende Rolle bei der Modularisierung von DevOps. So ermöglichen sie es Entwicklern, unterschiedliche Funktionen einer Anwendung zu ändern, ohne sie dabei insgesamt anpassen zu müssen. Container versprechen eine schlanke, einfach zu implementierende und sichere Methode zum Umsetzen bestimmter Infrastrukturvorgaben und sind gleichzeitig eine leichtgewichtige Alternative zu virtuellen Maschinen (VMs).

So funktionieren Cloud-Container

Die für Container verwendete Technologie hat ihre Wurzeln im klassischen Partitionieren und der Isolierung, die mit dem chroot-Prozess unter Linux möglich wurde. Moderne Umsetzungen beziehen sich wie im Fall von Docker aber nur auf Anwendungs-Container oder auf Container zur Virtualisierung von Betriebssystemen. Letzteres ist etwa mit Linux Containern (LXC) möglich. Mit Containern kann der Anwendungscode von der zugrunde liegenden Infrastruktur abgekoppelt werden. Das erleichtert auch das Management unterschiedlicher Versionen einer Software. Außerdem lassen sich Anwendungen so schneller und leichter auf andere Deployment-Umgebungen migrieren.

Container verwenden eine virtuelle Isolierung, um mehrere Anwendungen auf einem geteilten Betriebssystem-Kernel zu nutzen. Eine herkömmliche virtuelle Maschine wird nicht mehr benötigt. Container enthalten aber trotzdem alle benötigten Komponenten wie Dateien, Bibliotheken und Umgebungsvariablen. So können sie eine gewünschte Software ausführen, ohne dass sich die Nutzer Sorgen über die Kompatibilität der eingesetzten Plattform machen müssen. Das Wirtssystem beschränkt die Zugriffe aus den Containern auf die physisch vorhandenen Ressourcen, so dass ein einzelner solcher Container zum Beispiel nicht die gesamte Leistung eines Systems in Beschlag nehmen kann.

Einer der wichtigsten Vorteile von Cloud-Containern ist, dass sie nur darauf ausgelegt sind, eine einzige Anwendung zu virtualisieren. So können Sie zum Beispiel einen Container nur für MySQL einsetzen. Er wird dann genau diese Aufgabe erledigen, also eine virtuelle Instanz der Anwendung bereitstellen und nichts anderes.

Container bieten folglich eine Isolierungsschicht auf der Anwendungsebene und nicht auf Ebene des Servers. Die Isolierung sorgt dafür, dass etwa bei einem Fehler wie einer exzessiven Nutzung von Ressourcen durch eine Anwendung, nur dieser eine Container davon betroffen ist und nicht eine komplette VM oder der ganze Server. Außerdem lassen sich damit Kompatibilitätsprobleme zwischen Anwendungen in Containern beseitigen, die gemeinsam auf einem System genutzt werden.

Alle größeren Cloud-Provider bieten eigene Container-as-a-Service-Produkte an. Die bekanntesten sind Amazon Elastic Container Service, AWS Fargate, Google Kubernetes Engine, Microsoft Azure Container Instances, Azure Kubernetes Services sowie IBM Cloud Kubernetes Service. Container können aber auch in öffentlichen oder privaten Cloud-Umgebungen genutzt werden, ohne dass dafür die spezielle Lösung eines Cloud-Anbieters benötigt wird.

Es gibt aber noch einige wichtige Fragen, die beantwortet werden müssen. Wie genau unterscheiden sich Container von traditionellen, Hypervisor-basierten VMs? Und nur weil Container derzeit so populär sind, bedeutet das auch, dass sie wirklich besser sind?

Cloud-Container versus VMs

Das wichtigste Unterscheidungsmerkmal zwischen Containern und VMs ist der deutlich geringere Aufwand, der für erstere betrieben werden muss. Anders als virtuelle Maschinen benötigen Container kein vollständiges Betriebssystem, das in ihnen installiert werden müsste.

Sie benötigen auch keine virtuelle Kopie der Hardware des Wirtssystems. Container brauchen nur sehr wenige Ressourcen, um die ihnen zugedachte Aufgabe zu erfüllen. Oft genügen nur etwas Software, ein paar Bibliotheken und einige wenige Bestandteile eines Betriebssystems. Das hat den Vorteil, dass zwei bis dreimal so viele Anwendungen in Containern auf einem System genutzt werden können als bei dem Einsatz von VMs. Darüber hinaus lassen sie sich erheblich schneller starten als virtuelle Maschinen.

Cloud-Container sind zudem portierbar. Sobald ein Container erst einmal angelegt wurde, kann er ohne viel Aufwand auf einen anderen Server übertragen werden. Aus Sicht des Lebenszyklus einer Software ist das eine hervorragende Eigenschaft, da Container problemlos kopiert werden können, um etwa schnell zusätzliche Entwicklungs-, Test-, Integrations- oder Produktions-Umgebungen zu schaffen. Auch aus Sicherheitssicht ist das vorteilhaft, da das zugrundeliegende Betriebssystem keinen Einfluss auf die Ergebnisse hat. Container ermöglichen außerdem dynamischere Umgebungen, da abhängig von der aktuellen Nachfrage schnell neue angelegt oder bestehende beendet werden können. So lassen sich die vorhandenen Ressourcen besser steuern.

Ein Nachteil der Containerisierung ist allerdings, dass Sie Ihre Virtualisierung damit in zahllose, meist winzige Bestandteile aufteilen. Wenn nur einige wenige Container vorhanden sind, wissen Sie genau, welche Konfiguration sie haben und wo sie eingesetzt werden.

Wenn Sie aber voll auf Container setzen, kann es schnell passieren, dass sie so viele haben, dass sie nur noch schwer zu verwalten sind. Stellen Sie sich nur die Situation vor, wenn Sie Updates in mehrere Hundert Container installieren sollen. Oder wenn eine spezielle Bibliothek innerhalb Ihrer Container eine Sicherheitslücke enthält und aktualisiert werden muss. Dann müssen Sie sich die Frage stellen, ob es nicht einen einfacheren Weg dafür gibt. Probleme bei der Verwaltung der Container sind eine häufig zu hörende Aussage, selbst wenn Container-Managementsysteme wie Docker eingesetzt werden, die den Arbeitsaufwand der IT eigentlich reduzieren sollen.

Pauschal gesehen werden Container auf zwei Arten genutzt: Entweder durch das Erstellen eines eigenen Images, das dann in Ihren Containern genutzt werden kann, oder indem ein von anderen vorbereitetes Image heruntergeladen wird. Diese sind in großer Zahl etwa auf dem Docker Hub zu finden. Auch wenn dies die bei weitem größte und beliebteste Container-Plattform ist, gibt es mittlerweile doch einige Alternativen. Nichtsdestotrotz ist es Docker gelungen, quasi zum Synonym für Container zu werden. Ursprünglich auf Basis von LXC entwickelt, ist die Technik zur vorherrschenden Kraft in der Welt der Container geworden.

Abbildung 1: Vergleich der für virtuelle Maschinen und Container benötigten Infrastruktur.
Abbildung 1: Vergleich der für virtuelle Maschinen und Container benötigten Infrastruktur.

Sicherheit von Containern in der Cloud

Nachdem Cloud-Container immer beliebter wurden, geriet der Fokus schnell darauf, wie sie wohl am besten abgesichert werden können. Anfangs war das gar nicht so leicht. Mit Docker realisierte Container benötigten zunächst erweiterte Berechtigungen auf dem Wirtssystem, um überhaupt laufen zu können. Das hatte zur Folge, dass ein Angreifer, der wichtige Komponenten in einem Container kompromittierte, sich root- oder Administrator-Rechte auf dem zugrundeliegenden Betriebssystem verschaffen konnte. Auch der umgekehrte Weg war möglich. Docker unterstützt daher jetzt User Namespaces, so dass Container mit den Rechten weniger mächtiger Nutzer laufen können.

Eine weitere Möglichkeit, um potenzielle Zugriffsprobleme zu reduzieren, ist der Einsatz sogenannter Rootless-Container. Diese bieten eine zusätzliche Sicherheitsschicht, da sie keine root-Rechte für ihren Einsatz benötigen. Das sorgt dann dafür, dass sich ein Angreifer durch einen kompromittierten Rootless-Container keine Root-Rechte mehr verschaffen kann. Ein weiterer Vorteil dieser Technik ist, dass unterschiedliche Nutzer Container auf ein- und demselben Endpunkt ausführen können. Docker unterstützt bereits Rootless-Container, Kubernetes aber noch nicht.

Ein weiteres Problemfeld besteht bei den vom Docker Hub heruntergeladenen Images. Beim Download eines durch ein Community-Mitglied bereitgestellten Images kann nicht garantiert werden, dass es wirklich sicher ist und keine unabsichtlichen oder auch absichtlichen Schwachstellen enthält. Docker hat sich diesem Problem mit dem Update auf Version 1.8 angenommen. Das damit eingeführte zentrale Feature nennt sich Docker Content Trust.

Es ermöglicht, dass der Urheber eines Containers überprüft werden kann. Darüber hinaus können Sie Images auch selbst auf Schwachstellen scannen. Das sorgt für mehr Vertrauen. Die dabei durchgeführten Überprüfungsprozesse sind aber unter Umständen nicht ausreichend, wenn es um Container für besonders sensible Anwendungen und Daten geht. In solchen Fällen wird es daher weiterhin empfohlen, die Images selbst zu erstellen. So gewährleisten Sie, dass Ihre Sicherheitsrichtlinien eingehalten und dass nötige Updates auch zeitnah durchgeführt werden.

Bedenken Sie dabei aber, dass auch die in einem Unternehmen selbst hergestellten Images nur so sicher sind, wie Ihre Mitarbeiter es vermögen. Geeignete Schulungsmaßnahmen für die Personen, die Container-Images erstellen, sind daher ratsam.

Container für besonders wichtige Daten und Anwendungen sollten genauso behandelt werden wie andere Ressourcen, wenn es um ihre Absicherung geht. Auch innerhalb eines Containers befindet sich ja eine Software, die möglicherweise ebenfalls Schwachstellen hat. Auch wenn ein kompromittierter Container keine Zugriffe auf das darunter liegende Betriebssystem mehr gewähren kann, kommt es möglicherweise zu anderen Problemen wie Denial of Service (DoS). Wenn dann zum Beispiel ein für eine Webseite benötigter MySQL-Container nicht mehr funktioniert, ist die ganze Seite nicht mehr vollständig verfügbar.

Stellen Sie daher sicher, dass Ihre Mitarbeiter verstehen, dass Container keine so umfangreiche Isolation bieten wie virtuelle Maschinen. Auch wenn sie vom Rest des Hosts abgetrennt sind, sind sie nur selten so stark gehärtet, wie es bei einer VM normalerweise der Fall ist. Innerhalb einer virtuellen Maschine können Anwender zum Beispiel Attachments und nicht vertrauenswürdige Anwendungen Programme öffnen, um ihre Sicherheit zu prüfen. Aber auch die Malware-Entwickler haben dazu gelernt. So verwenden sie mittlerweile Schadcode, der die Kontaktaufnahme mit einem Steuerserver auf später verschiebt, wenn er in einer virtuellen Umgebung ausgeführt wird.

Ungeachtet dessen kann ein Container, der sich eigenartig verhält oder der mehr Ressourcen verbraucht als nötig, meist ohne viel Aufwand beendet und neu gestartet werden. Auch wenn sie keine echte Sandbox-Erfahrung bieten, eignen sich Container deswegen trotzdem, um nicht vertrauenswürdige Anwendungen unabhängig vom Endpunkt laufen zu lassen. Der Linux-Kernel bietet zudem eine Funktion namens seccomp (Secure Computing Mode). Mit ihr lassen sich Systemaufrufe ähnlich wie in einer Sandbox überwachen und begrenzen. Wenn dann etwa eine schädliche Software einen Container befällt, kann sie nur noch begrenzte Systemaufrufe durchführen.

Wie immer gilt aber, dass Ihre IT-Mitarbeiter Sicherheitsbedrohungen und Schwachstellen priorisieren sollten. Zudem sollten sie sich an bewährte Best Practices zur Container-Sicherheit halten und sich über neue Gefährdungen und potenzielle Angriffe auf Container-Umgebungen informieren. Der richtige Einsatz und die richtige Verwaltung sind entscheidend. Ebenso wichtig ist, die Container regelmäßig auf Sicherheitslücken zu scannen und alle aktiven Container auf einem aktuellen Stand zu halten.

Vergessen Sie auch nicht die Sicherheit des Servers, auf dem Ihre Container laufen. Zu diesem Thema stellt Docker einige hervorragende Informationen auf seiner Website bereit.

Nur weil Container eine junge Technologie sind, bedeutet das nicht, dass traditionelle Sicherheitsrichtlinien und -prozesse nicht mehr darauf angewendet werden können.

Der Nutzen von Cloud-Containern

Es gibt kaum Unternehmen, die nicht von der Einführung von Cloud-Containern in ihre Infrastruktur profitieren würden. Ihre herausragende Übertragbarkeit, sowohl intern als auch in der Cloud, machen sie in Verbindung mit den niedrigen Kosten zu einer großartigen Alternative zu vollwertigen virtuellen Maschinen.

Es muss allerdings nicht immer eine Entweder-oder-Entscheidung sein, die getroffen werden muss. In den meisten Firmen besteht sowohl ein Bedarf an Containern als auch an VMs. Jede der beiden Techniken hat ihre starken Seiten, aber auch ihre Schwächen (siehe auch Wie unterscheiden sich Container und VMs bei der Sicherheit?). Daher ergänzen sich die beiden Welten gut und konkurrieren nicht nur miteinander.

Erfahren Sie mehr über Anwendungs- und Plattformsicherheit