Admission-Controller sind Gatekeeper für Kubernetes-Umgebungen und erhöhen die Sicherheit durch das Scannen von an den API-Server gesendeten Anfragen. Indem sie kritische Compliance-Vorschriften durchsetzen und vor potenziellen Bedrohungen schützen, fungieren diese Controller als Wächter für Kubernetes-Cluster — eine Notwendigkeit, da sich Bedrohungen für containerisierte Anwendungen ständig weiterentwickeln.
In diesem Artikel tauchen wir tief in die Welt der Kubernetes-Admission-Controller ein. Wir erläutern ihre Bedeutung, interne Mechanismen, Image-Scanning-Funktionen und ihre Rolle bzgl. des Sicherheitsstatus von Kubernetes-Clustern.
Was ist ein Kubernetes-Admission-Controller?
Kubernetes-Admission-Controller überwachen und regeln die an den Kubernetes-API-Server gerichteten Anfragen. Wie unten dargestellt, fungieren diese Plugins nach Abschluss der Authentifizierung und Autorisierung — aber bevor ein Objekt dauerhaft gespeichert wird — als Vermittler und fangen Anfragen ab:
Admission-Controller können Anfragen basierend auf bestimmten vordefinierten Bedingungen oder Richtlinien entweder zulassen, ablehnen oder ändern. Es gibt zwei Haupttypen von Admission-Controllern:
- Validerende Admission-Controller: Diese Controller sind für die Validierung der Objekte in Anfragen zuständig. Sie prüfen jede Anfrage und verifizieren, ob sie den im Controller definierten spezifischen Anforderungen und Regeln entspricht.
- Mutierende Admission-Controller: Mutierende Admission-Controller können Objekte in einer Anfrage modifizieren und ihre Konfigurationen ändern, bevor sie gespeichert werden. Sie ermöglichen die automatische Verwaltung und das Einfügen von Systemparametern gemäß vordefinierten Regeln und Richtlinien.
Hauptfunktionen von Admission-Controllern
Admission-Controller sind ein wesentlicher Bestandteil der Kubernetes-Architektur. Sie arbeiten unauffällig im Hintergrund und schützen Systeme, indem sie die Regeln und Richtlinien Ihres Unternehmens durchsetzen. Bei der Verwaltung von groß angelegten Kubernetes-Umgebungen kann die Gewährleistung der Sicherheit und die Durchsetzung der Compliance komplex werden. Glücklicherweise können Kubernetes-Admission-Controller auf folgende Weise helfen:
1. Verbesserung der Sicherheit in Kubernetes-Clustern
Controller können Richtlinien durchsetzen, die die in einem Cluster durchgeführten Operationen einschränken und so potenzielle Angriffsvektoren reduzieren. Beispielsweise können sie verhindern, dass Benutzer privilegierte Container ausführen oder Hostnetzwerke und Dateisysteme verwenden, die häufige Angriffsvektoren darstellen.
2. Durchsetzung der Compliance
Admission-Controller sind ein wichtiges Mittel zur Durchsetzung unternehmensweiter Richtlinien: Sie können Benennungskonventionen, Ressourcenbeschränkungen und Netzwerkrichtlinien erzwingen. Sie können auch die Bereitstellung von Pods verhindern, die diesen Regeln nicht entsprechen, und so Konsistenz und die Einhaltung von Best Practices gewährleisten.
3. Sicherstellung der Ressourcenverwaltung und Optimierung der Zuweisung
Die Ressourcenverwaltung ist ein entscheidender Bestandteil der Verwaltung eines Kubernetes-Clusters. Admission-Controller können Quoten und Grenzen für CPU, Speicher und Arbeitsspeicher durchsetzen und so verhindern, dass einzelne Container mehr Clusterressourcen verbrauchen, als ihnen zugewiesen sind. Dies trägt zur Aufrechterhaltung der Stabilität und Zuverlässigkeit des Systems bei und fördert eine effiziente Ressourcennutzung, was auch zu einer Kostenoptimierung führt.
4. Verhinderung potenzieller Kubernetes-Container-Escape-Exploits
Ein Container-Escape-Exploit ist ein erhebliches Sicherheitsproblem in Kubernetes-Clustern, das auftritt, wenn ein Angreifer aus einem Container ausbricht und unbefugten Zugriff auf das Host-System erhält. Admission-Controller können dazu beitragen, diese Exploits zu verhindern, indem sie strenge Sicherheitskontexte erzwingen und die Containerberechtigungen einschränken.
Die Funktionsweise von Admission-Controllern
Um das volle Potenzial von Admission-Controllern auszuschöpfen, ist es wichtig, ihre innere Funktionsweise zu verstehen. Sehen wir uns an, wie Admission-Controller mit anderen Kubernetes-Komponenten interagieren:
Anfragen und Antworten
Admission-Controller überprüfen eingehende Anfragen an den API-Server und untersuchen das Objekt, das die Anfrage im System zu speichern versucht. Je nachdem, ob es sich um einen validierenden oder mutierenden Controller handelt, validiert er die Anfrage anhand einer Reihe von Regeln (validierend) oder ändert das Objekt in der Anfrage (mutierend). Anschließend lässt der Controller die Anfrage zu oder lehnt sie ab und sendet dem Benutzer eine Antwort. Wird die Anfrage abgelehnt, erhält der Benutzer eine Nachricht, die erklärt, warum sie abgelehnt wurde.
Kette von mehreren Admission-Controllern
Admission-Controller bilden eine Kette und werden der Reihe nach aufgerufen. Die Reihenfolge ist hier besonders wichtig, wenn mutierende und validerende Controller im selben Cluster konfiguriert sind. Im Allgemeinen werden mutierende Controller vor validierenden Controllern aufgerufen. Auf diese Weise kann eine Anfrage so geändert werden, dass sie die Kriterien vor der Validierung erfüllt. Falls ein Controller in dieser Sequenz die Anfrage ablehnt, wird der gesamte Vorgang gestoppt und ein Fehler an den Benutzer gesendet. Dieser Mechanismus stellt sicher, dass alle definierten Regeln überprüft werden, bevor eine Anfrage akzeptiert wird.
Integrierte Admission-Controller
Kubernetes enthält bereits mehrere integrierte Admission-Controller. Beispielsweise weist der NamespaceLifecycle-Controller alle Anfragen an Objekte in einem Namespace zurück, der gerade beendet wird. Wie der Name schon sagt, erzwingt der ResourceQuota-Controller Quoten, die die Ressourcennutzung pro Namespace begrenzen, und der PodSecurityPolicy-Controller wendet Sicherheitsbeschränkungen basierend auf dem angeforderten Sicherheitskontext an. Um die integrierten Admission-Controller besser zu verstehen, sollten Sie sich mit den standardmäßig bereitgestellten Funktionen vertraut machen und erfahren, wie diese Controller Kubernetes-Operationen automatisieren.
Image-Scanning mit Admission-Controllern
Container-Images sind die Bausteine jeder containerisierten Anwendung, aber diese Images können Schwachstellen im Anwendungscode oder in den zugrunde liegenden Systembibliotheken enthalten. Wenn diese Schwachstellen nicht behoben werden, können sie ausgenutzt werden, was nicht autorisierte Zugriffe, Datenlecks oder sogar die Übernahme des Systems zur Folge haben kann. Deshalb ist das Scannen von Container-Images auf bekannte Schwachstellen nicht nur eine Best Practice, sondern eine Notwendigkeit.
Image-Scanning-Tools wie Clair, Anchore und die CrowdStrike Falcon®-Plattform können in Kubernetes-Admission-Controller integriert werden, um Richtlinien für das Scannen von Images durchzusetzen. Diese Tools können Container-Images mit Schwachstellendatenbanken abgleichen, um bekannte Schwachstellen zu identifizieren. Ein Admission-Controller kann so konfiguriert werden, dass er mit diesen Tools integriert wird und die Bereitstellung von Images verhindert, die entweder Schwachstellen aufweisen oder nicht gescannt wurden.
Mit anderen Worten, der Admission-Controller lehnt die Bereitstellungsanfrage ab, wenn das Image unsicher ist, und verhindert, dass der anfällige Container in einem Cluster ausgeführt wird. So wird automatisch und zwangsweise sichergestellt, dass alle im Cluster bereitgestellten Container-Images sicher sind und den Sicherheitsrichtlinien entsprechen.
Entwicklung benutzerdefinierter Admission-Controller
Obwohl Kubernetes mit verschiedenen integrierten Admission-Controllern ausgestattet ist, kann es Szenarien geben, in denen Sie unternehmensspezifische Regeln durchsetzen müssen, z. B. bestimmte Benennungskonventionen, Richtlinien zur Ressourcennutzung oder Pod-Sicherheitsrichtlinien. In diesen Fällen können Sie mit Kubernetes einen eigenen Controller erstellen und ihn dynamisch in laufende Cluster integrieren.
Best Practices für das Erstellen eines Admission-Controllers
Das Erstellen eines Admission-Controllers umfasst das Schreiben eines Webhook-Servers, der auf Anfragen des API-Servers reagiert. Webhook-Server reagieren speziell auf Zulassungsanfragen des Kubernetes-API-Servers. Der Webhook-Server kann mit Validierung und/oder Mutation beauftragt werden. Beachten Sie beim Erstellen des Admission-Controllers folgende Best Practices:
1. Definieren Sie klare Regeln
Stellen Sie sicher, dass die vom Controller durchgesetzten Regeln klar und gut dokumentiert sind und allen Teammitgliedern, die mit Ihrem Kubernetes-Cluster interagieren, zur Verfügung stehen.
2. Gehen Sie angemessen mit Fehlern um
Ihr Admission-Controller sollte Fehler angemessen behandeln und den Betrieb des Kubernetes-API-Servers nicht blockieren. Darüber hinaus sollte er aussagekräftige Fehlermeldungen zurückgeben. So können Benutzer nachvollziehen, warum ihre Anfrage abgelehnt wurde.
3. Sichern Sie Ihren Webhook
Webhooks erhalten vertrauliche Informationen vom API-Server und sollten daher mit TLS gesichert werden. Bei einem sicheren Webhook muss der API-Server das Zertifikat des Webhooks überprüfen, bevor er eine Anfrage sendet.
4. Legen Sie den Schwerpunkt auf Leistung
Webhook-Aufrufe erhöhen die Latenzzeit bei API-Server-Anfragen. Entwerfen Sie Ihren Admission-Controller für hohe Leistung, indem Sie die Zeit, die Ihr Webhook zur Bearbeitung einer Anfrage benötigt, minimieren.
5. Testen Sie ausgiebig
Testen Sie den Admission-Controller mit verschiedenen Arten von Anfragen, um sicherzustellen, dass er sich wie erwartet verhält. Der Testprozess sollte auch die Kompatibilität mit den von Ihnen verwendeten Kubernetes-Versionen überprüfen.
Überwachung und Protokollierung für Admission-Controller
Die Überwachung und Protokollierung von Kubernetes bietet wichtige Einblicke und hilft dabei, die Entscheidungen Ihrer Admission-Controller zu verstehen, Probleme zu identifizieren, den Sicherheitsstatus eines Clusters zu verbessern und sicherzustellen, dass Richtlinien korrekt und konsistent angewendet werden.
Kubernetes stellt zwar über seinen API-Server eine integrierte Protokollierung von Admission-Controller-Entscheidungen bereit, diese Protokolle können aber sehr umfangreich und schwer zu analysieren sein. Glücklicherweise können Log-Management-Tools diese Protokolle durch Sammeln, Filtern und Analysieren sinnvoll nutzen. Beispielsweise können Tools wie Fluentd oder Logstash Protokolle von Kubernetes-Clustern sammeln und an eine zentrale Log-Management-Lösung wie Elasticsearch oder einen cloudbasierten Log-Management-Service weiterleiten. Anschließend kann Kibana – oder ein ähnliches Tool – die Protokolldaten analysieren und visualisieren.
Suchen Sie in Ihren Protokollen nach AdmissionReview-Objekten, die Informationen über die Entscheidungen der Admission-Controller enthalten. Behalten Sie die Antwortzeiten des API-Servers im Auge, um deren Auswirkungen auf die Leistung zu verstehen. Es ist auch ratsam, nach Mustern von zurückgewiesenen Anfragen zu suchen, die auf einen falsch konfigurierten Admission-Controller oder ein Missverständnis der Regeln unter Ihren Benutzern hindeuten könnten. Achten Sie auf plötzliche Änderungen im Volumen oder in der Art der Anfragen – diese könnten auf einen Sicherheitszwischenfall hindeuten.
Optimale Nutzung von Kubernetes-Admission-Controllern
Die Stärke von Admission-Controllern liegt nicht nur in der Sicherheit und Compliance, die sie standardmäßig bieten, sondern auch in ihrem Potenzial zur Anpassung und Erweiterung. Wir empfehlen allen Besitzern eines Kubernetes-Clusters, sich näher mit diesem Thema zu befassen und zu überlegen, wie Admission-Controller in ihrer eigenen Umgebung besser genutzt werden können.
Der CrowdStrike Kubernetes-Admission-Controller bietet vordefinierte Richtlinien und vereinfacht die Containerverwaltung. So müssen Benutzer keine eigenen Rego-Regeln schreiben und die Bereitstellung falsch konfigurierter Container wird verhindert.
Schützen Sie den Lebenszyklus von Containern und verwalten Sie die Kubernetes-Sicherheit mit CrowdStrike
CrowdStrike Falcon® Cloud Security für Container reduziert die Komplexität der Kubernetes-Sicherheit mit einer einzigen, benutzerfreundlichen Oberfläche und bietet den einzigen Kubernetes-Admission-Controller, der anfällige Container erkennen und beseitigen sowie deren erneute Bereitstellung verhindern kann.
Verbessern Sie den Sicherheitsstatus und die Resilienz Ihrer Kubernetes-Cluster mit CrowdStrike Falcon® Cloud Security. Die robuste Sicherheitsplattform CrowdStrike Falcon bietet Schwachstellen- und Bedrohungserkennung, Reaktion auf Zwischenfälle, Identitätsschutz, Beobachtbarkeit und Cloud-Sicherheit. Verwenden Sie die Plattform in Verbindung mit Admission-Controllern, um Ihre Kubernetes-Umgebungen zu sichern.
Registrieren Sie sich jetzt für eine kostenlose Testversion.