Isolierte Dienstausführung / One Service per Container Regel
Isolierte Dienstausführung
Beschreibung
Jeder Container muss einen einzelnen, klar definierten Dienst ausführen. Dies begünstigt ein robustes Sicherheitskonzept, da es die Angriffsfläche reduziert und das Prinzip der geringsten Rechte unterstützt. Dienste wie Webserver, Datenbanken oder Anwendungslogik sollten jeweils in separaten Containern betrieben werden. Der Container soll nur die minimal notwendigen Abhängigkeiten und Bibliotheken enthalten, die für den Betrieb des spezifischen Dienstes erforderlich sind.
Die Forderung ist nicht nur aus Sicherheits- und Verwaltungsperspektive sinnvoll, sondern unterstützt auch die Philosophie der Microservices-Architektur, bei der jede Komponente als eigenständiger Service implementiert wird, der über wohldefinierte Schnittstellen mit anderen Services kommuniziert.
Definition eines "Services"
Ein "Service" in der Containerisierung sollte als eine oder mehrere eng gekoppelte Funktionseinheiten definiert werden, die zusammen eine spezifische Aufgabe erfüllen. Ein Service kann aus mehreren Komponenten bestehen, die zusammenarbeiten müssen und daher in einem einzigen Container oder in mehreren miteinander kommunizierenden Containern untergebracht sein können.
Beispiel: Mailserver
Ein klassischer Mailserver, wie mailcow
, kann aus verschiedenen Komponenten wie einem Mail Transfer Agent (MTA, z.B. Postfix), einem Antivirus-Programm (z.B. ClamAV) und einem Spamfilter bestehen. Während die Isolierung dieser Komponenten in separate Container das Patch-Management und die Sicherheitskontrollen erleichtern kann, erfordert sie auch eine effiziente und sichere Konfiguration der Netzwerkkommunikation zwischen diesen Containern.
Kommunikation zwischen Containern
Die Entscheidung, Dienstkomponenten auf separate Container aufzuteilen, sollte auch die notwendigen Kommunikationswege zwischen diesen Containern berücksichtigen. Es ist wichtig, Netzwerkrichtlinien zu definieren, die die Sicherheit gewährleisten, ohne die Performance negativ zu beeinflussen.
Best Practices für komplexe Services
Für komplexe Dienste, die aus mehreren interagierenden Komponenten bestehen, sollten Best Practices entwickelt werden, die sowohl die Isolation als auch die Interkonnektivität berücksichtigen. Dazu gehören:
- Einsatz von Netzwerk-Policies und Service Meshes zur sicheren und kontrollierten Kommunikation.
- Regelmäßige Updates und Sicherheitsüberprüfungen aller beteiligten Komponenten.
- Dokumentation aller Interaktionen und Abhängigkeiten innerhalb des Services zur Vereinfachung von Wartung und Troubleshooting.
Vorteile
Einfachere Compliance-Überprüfung
Wenn jeder Container genau einen Dienst ausführt, wird es einfacher zu verifizieren, ob jeder Dienst die spezifischen Sicherheitsanforderungen und Compliance-Vorschriften erfüllt. Dies reduziert die Komplexität bei der Durchführung von Sicherheitsaudits und Compliance-Checks.
Vereinfachtes Patch-Management
Container, die nur einen Dienst ausführen, erleichtern das Patch-Management. Jeder Container kann unabhängig aktualisiert werden, ohne andere Dienste zu beeinflussen, was das Risiko von Konflikten und Ausfällen während des Update-Prozesses minimiert.
Gezielte Sicherheitsmaßnahmen
Mit der Beschränkung auf einen Dienst pro Container können Sicherheitsmaßnahmen spezifisch und gezielt implementiert werden. Dies verbessert die Effektivität von Sicherheitsmechanismen wie Firewalls, Intrusion Detection Systems (IDS) und anderen Überwachungstools.
Verbesserte Fehlerdiagnose und Service-Überwachung
Wenn ein Container nur einen Dienst beinhaltet, ist es einfacher, Leistungsprobleme oder Sicherheitsvorfälle zu diagnostizieren und zuzuordnen. Dies führt zu einer schnelleren Reaktion und Behebung von Problemen.
Optimierte Ressourcennutzung
Audits können auch überprüfen, ob die Ressourcenzuweisung pro Container optimiert ist, da keine überflüssigen Ressourcen für nicht benötigte Dienste bereitgestellt werden müssen. Dies führt zu einer effizienteren Nutzung der Hardware- und Software-Ressourcen.
Erhöhte Transparenz und Dokumentation
Die Anforderung, dass jeder Container nur einen Dienst ausführt, fördert eine klare und nachvollziehbare Dokumentation der Containerlandschaft. Dies erleichtert die Auditierung, da schnell ersichtlich wird, welcher Container welche Funktionen erfüllt.
Anmerkung zur zukünftigen Version von SYS.1.6 Containerisierung des BSI:
In einer zukünftigen Revision des BSI-Bausteins SYS.1.6 Containerisierung sollte eine Ergänzung vorgenommen werden, die die Konzeptualisierung der "Isolierten Dienstausführung" inklusive einer klaren Definition eines "Container Dienstes" umfasst. Dies trägt zur Klarheit und Verstärkung der Sicherheitsrichtlinien bei.