Warum GitOps für DevSecOps unerlässlich ist
Veröffentlicht: 2022-02-24Die Vorteile von DevOps in Bezug auf Automatisierung, Rückverfolgbarkeit und insbesondere die Zusammenarbeit zwischen den zuvor isolierten Gruppen und Beteiligten werden sehr akzeptiert. Da DevOps-Gruppen jedoch eine erhebliche Aufgabe haben, den Betrieb in containerisierte Kubernetes-Umgebungen zu verlagern, können langwierige erprobte und getestete DevOps-Taktiken kürzer werden. Sicherheitsprobleme – und Fallstricke – manifestieren sich auch in einzigartigen Methoden.
Die fantastische Information ist, dass GitOps dazu dient, eine Auswahl von Lücken in DevOps für die Stabilität verteilter Umgebungen zu schließen. Dies liegt an der Tatsache, dass GitOps-Prozesse sehr förderlich für DevSecOps sind, die hier als die effektivsten Sicherheitstaktiken definiert sind, die für den gesamten Softwarelebenszyklus gelten.
In diesem Artikel werfen wir einen Blick darauf, wie GitOps ein wichtiges Framework für DevSecOps bietet, für Sicherheitsprüfungen, die durch CI/CD zunehmen, sowie durch die Write-up-Deployment-Phasen der Anwendungsverwaltung auf Kubernetes-Clustern.
Eine einsame unveränderliche Ressource der Realität
GitOps kann beschrieben werden als:
Ein funktionierendes Design für Kubernetes und andere Cloud-eigene Systeme, das eine Reihe der besten Verfahren bereitstellt, die die Git-Bereitstellung, -Verwaltung und -Überwachung für Container-Cluster und -Zwecke vereinheitlichen.
Ein Weg in Richtung einer praktischen Erfahrung als Entwickler für die Pflege von Programmen, bei denen durchgängige CI/CD-Pipelines und Git-Workflows für jeden Betrieb und jede Entwicklung verwendet werden.
Git ist die einzige Ressource der wahren Wahrheit, da hier die gewünschte Konfiguration deklariert wird. Es gibt einen GitOps-Agenten, der in Kubernetes ausgeführt wird. Er vergleicht regelmäßig den tatsächlichen Punkt in Kubernetes mit dem gesuchten Punkt, der in Git gespeichert ist. Alle neuen Variationen, die in der überwachten Abteilung in Git zusammengeführt werden, werden sofort auf Kubernetes angewendet. Umgekehrt werden alle in Kubernetes verwendeten Handbuchvariationen automatisch wieder auf den in Git deklarierten Idealzustand zurückgesetzt. Konfigurationsdrift wird eliminiert.
Git wird dank seiner unveränderlichen Zusammensetzung normalerweise treffend als die einzige Ressource der wirklichen Wahrheit beschrieben, wenn es um GitOps geht. Unter anderem wird es dazu beitragen, eine Grenze aufrechtzuerhalten – nicht im Gegensatz zu einer Firewall – die die Anliegen zwischen CI und CD trennt. Auf diese Weise die Bandbreite der Möglichkeiten, die an der Anwendungsentwicklung als Teil von CI beteiligt sind – Pull-Requests, Screening, Commits und so weiter. – Bleiben Sie auf Git getrennt.
Für den Entwickler, der eine Pull-Anfrage erstellt, wird die Pull-Anfrage zum überprüften und genehmigten Zeitpunkt zusammengeführt und bei der bevorstehenden Abstimmung routinemäßig mit dem Cluster verwendet – was normalerweise 15 Minuten dauert.
Standardmäßig ist der Prozess bidirektional – das bedeutet, dass eine direkt in Kubernetes erstellte Änderung auf Git hin- und hergeschickt wird, wenn die Future-Abgleichsschleife ausgeführt wird (im Allgemeinen alle 15 Minuten). Trotzdem ist dieser Zustand deutlich schlechter als am besten, wenn ein DevOps-Mitarbeiter oder, schlimmer noch, ein Eindringling mit negativen Akteuren sofort Änderungen an den Clustern vornimmt. Diese Direct-to-Cluster-Variationen wurden nicht angemessen durch Merge-Anfragen und Genehmigungen überprüft und verstoßen daher gegen die GitOps-Theorie, dass Git als unveränderliche Quelle der Wahrheit dient, wenn es zu Abweichungen kommt.
Um das Auftreten von Abweichungen zu verhindern, kann eine GitOps-Prüfressource Warnungen senden, wenn Änderungen am Cluster vorgenommen werden, die ursprünglich nicht in Git verwendet wurden. Wenn dies geschieht, kann der Softwarecode auf Git dank des Audit-Trails die fehlerhaften Änderungen an den Clustern durch Controller in seinem bereitgestellten Punkt in der natürlichen Laufzeitumgebung austauschen.
Umgekehrt, wenn Unveränderlichkeit nicht erreicht wird, kann es zu Drift kommen. Dies kann möglicherweise bei einem Netzwerkangriff eintreten oder wenn ein DevOps-Mitarbeiter versehentlich die Clusterkonfiguration ändert, sodass sie sich von der auf Git unterscheidet. Die Inkongruenz wird gekennzeichnet, wenn dies geschieht – durch die Verwendung der richtigen GitOps-Ausrüstung – und symbolisiert somit eine Quintessenz von DevSecOps, die GitOps-Prozesse aufweisen.
Entsprechende Anwendungen automatisieren das System der laufenden Überprüfung, um sicherzustellen, dass der gewünschte Punkt aus der Konfiguration auf dem Git-Repository mit dem wahren Zustand im Kubernetes-Cluster übereinstimmt. Es wird auch verwendet, um Bereitstellungen abzugleichen und zu summieren, sobald sie im deklarierten Zustand des Endlagers tatsächlich dediziert sind.
Audit verwalten
Die Audit-Funktionen, die GitOps bietet, sind auch für die DevSecOps-Hilfe von entscheidender Bedeutung. Indem das Git-Repository als einziger Faktenlieferant verwendet wird, werden alle Anwendungen, Codes und Konfigurationen versioniert und behalten einen vollständigen Audit-Pfad bei, was eine Hauptvoraussetzung für jede geschützte natürliche Umgebung ist. Dieser Prüfpfad wird in der Regel auch Entwicklern und Betriebsmitarbeitern gleichermaßen angeboten, damit sie sehen können, was im Cluster ausgeführt wird (die meisten Benutzer sind auf den reinen Zugriff auf die Clusterkonfiguration beschränkt).
Der Entwickler muss sich möglicherweise nicht immer so sehr auf Audit Trails verlassen wie Kunden von Funktionen und DevSecOps-Mitarbeitern, aber er kann die Möglichkeit nutzen, nachzuvollziehen, welche Abweichungen aufgetreten sind und was der Grund für die vorgenommenen Änderungen am Repository war . Kurz gesagt, für den Entwickler – wie auch für alle DevOps-Mitarbeiter – ist alles nur ein Git-Log entfernt.
Audit-Trails auf Git sind ebenfalls verfügbar und können von Buildern bei Bedarf sehr einfach angezeigt werden. Dies liegt daran, dass das Enderbe des Prozesses im Git-Berichtsprogramm erfasst wird, das Entwickler verstehen.
Mit der Verfügbarkeit des Audit-Trails ist es auch möglich, Anpassungen an Apps, die Schwierigkeiten ausgelöst haben, schnell rückgängig zu machen. Dies ist besonders vorteilhaft, wenn Cluster kompromittiert oder falsch konfiguriert wurden. In diesem Fall besteht der Audit-Trail, anstatt einen Cluster von Grund auf neu erstellen zu müssen, aus dem gesuchten Punkt im Repo. Die Cluster-Konfiguration und Programme mit dem gewünschten Punkt aus dem Audit-Trail werden dann bereitgestellt und der Wiederherstellungsvorgang erfolgt automatisch.
Anzahl der 'Schlüssel zum Königreich'

Entwickler verlassen sich häufig auf Jenkins, einen Automatisierungsserver, um CI/CD für die Herstellung von Pipelines für Kubernetes-Umgebungen zu entwickeln, zu prüfen und zu unterstützen. Ohne GitOps könnten die Entwickler sonst möglicherweise sofort auf Kubernetes-Cluster zugreifen, wenn sie ihren Code direkt bereitstellen. Mit anderen Worten, die Bauherren – egal, ob sie Teil der Organisation sind oder ein remote agierender Auftragnehmer sind – hätten sofortigen Zugriff auf die Ausgangsumgebung und hätten sozusagen die „Schlüssel zum Reich“. Dies ist selten ein idealer Sicherheitszustand.
Alles, was es im zuvor erwähnten Fall wählen würde, wäre, dass der unberechtigte Benutzer – oder noch schlimmer, ein Eindringling – Zugriff auf KubeConfig- oder Kubectl-Befehle auf Cluster in der Fertigung hat, die er von seinem Notebook aus ausführen könnte. Wenn ein Angreifer beispielsweise den CI-Prozess kompromittiert und die Anmeldeinformationen eingerichtet hat, kann er auch auf jeden Cluster zugreifen, auf den das CI-System Zugriff hat.
Die einfache Tatsache, dass GitOps hilft, Benutzer – oder Angreifer – davon abzuhalten, Cluster-Konfigurationen zu modifizieren, ohne Spuren zu hinterlassen, ist in erster Linie für Betriebs- und Sicherheitsteams von entscheidender Bedeutung – zusätzlich zur Unterstützung, die mentale Belastung des Entwicklers zu minimieren. Zum Beispiel muss der Entwickler durch das Erhalten von Verwalten im Allgemeinen keinen direkten Zugriff auf Kubernetes-Knoten und/oder kubectl-Befehlszeilen haben. GitOps gleicht so ziemlich alles ab, was Builder in Git skizzieren, lässt aber keinen manuellen Zugriff auf Kubernetes-Cluster oder Fertigungsumgebungen zu, es sei denn, Builder haben eindeutige Zugriffssteuerungsberechtigungen.
DevSecOps von GitOps bietet eine Möglichkeit, diese Angriffsvektorsituation für CDs zu vereiteln und so die „Schlüssel zum Königreich“ abzuschirmen. Wenn GitOps-Operatoren wie Open Source Flux – mehr dazu weiter unten – innerhalb von Kubernetes ausgeführt werden und somit Zugriff auf Cluster haben, bleiben die Abrufkontrollen innerhalb des Kubernetes-Sicherheitssystems. Die Zugänglichkeit für Verbraucher wird durch die Zuweisung von Privilegien zu den Namensräumen unterschiedlicher Gruppen und Gruppenmitglieder hergestellt.
Als ein typisches Beispiel dafür, wie DevSecOps und GitOps für eine andere Person bemerkenswert förderlich sind, hat die US-Verteidigungsabteilung (DoD), Nicolas Chaillan, Hauptcomputersoftwareoffizier der US Air Power, vor kurzem beschrieben, wie DevSecOps und GitOps – zusammen mit Flux – spielt eine wichtige Rolle bei der Weiterentwicklung seines Softwareprogramms, das das gesamte Spektrum der US-Sicherheitskräfte unterstützt.
„Sicherheit und Schutz sind nicht verhandelbar, aber wir wollen auch, dass Entwickler-Selbstunternehmen die Effizienz und Geschwindigkeit verbessern“, sagte Chaillan.
Beispielsweise ist GitOps der „Schlüssel für unsere Leistung bei der Einrichtung und Einführung von Platform Just One im gesamten DoD“, behauptet das DoD. Laut DoD ist System Just One „eine Auswahl zulässiger, gehärteter Cloud Indigenous Computing Foundation (CNCF)-konformer Kubernetes-Distributionen, Infrastruktur als Code-Playbooks und gehärtete Container“ mit eingebauten Sicherheitspipelines.
Gewaltenteilung
DevSecOps-Verfahren werden mit GitOps-Supply Checks and Balances kombiniert. Auf diese Weise hilft der Zugriffsbefehl, den es gibt, zu verhindern, dass Entwickler – oder Eindringlinge – auf ein Versorgungscode-Repository zugreifen, um beispielsweise eine Hintertür, Zero-Day- oder eine andere Form von Schwachstelle für die Dauer des CI einzuführen Verfahren. Das liegt einfach daran, dass alle Pull-Requests Peer-Reviews unterzogen werden.
Da DevSecOps das CI-System unterstützt, wird die Verwendung von Checks and Balances vor dem Code auf Git dediziert und im Cluster bereitgestellt. Der Entwickler postet normalerweise eine Änderung als Pull-Anforderung, die von Experten begutachtet wird. Nach Überprüfung und Autorisierung wird der Code auf Git gemergt und die YAML-Datei des gesuchten Zustands wird dann entsprechend geändert.
Die gewünschte Bedingung wird sofort auf den Kubernetes-Cluster angewendet. Wie bereits erwähnt, verfolgt korrektes GitOps-Equipment mit DevSecOps-Funktionen ständig den genauen Zustand im Zielprozess, um sicherzustellen, dass es das erwidert, was auf Git deklariert wird. Bei Abweichungen wird eine Warnung ausgegeben, sodass Korrekturmaßnahmen ergriffen werden können.
DevSecOps eigensinnig
Eine Reihe von GitOps-Instrumenten unterstützen DevSecOps. Open Supply Flux hilft beispielsweise dabei, das Git-Repository als die einzige unveränderliche Quelle der wahren Wahrheit zu erhalten. Die Fähigkeiten von Flux erstrecken sich auch auf die Zugänglichkeitsregulierung für Checks and Balances während CI/CD für Code, der dediziert und bereitgestellt wird.
Für eine viel eigensinnigere Flux-Begegnung vereinfacht Open Source Weave GitOps Main die ersten Möglichkeiten, CI/CD in vielen Clustern zu automatisieren. Das System zum Einrichten einer GitOps- und DevSecOps-Methode mit Weave GitOps Main umfasst ein paar unkomplizierte Befehle auf einer Konsole.
Die Weave GitOps Company hat sich als erste GitOps-Plattform herausgestellt, die den stetigen Anwendungsversand und die automatische Betriebsverwaltung für Kubernetes automatisiert in jeder Größenordnung in Hybrid-Cloud-, Multi-Cloud- und Edge-Architekturen.
Alle Tools helfen dabei, die Überwachung zu automatisieren, um sicherzustellen, dass die Clusterkonfiguration normalerweise mit der auf Git übereinstimmt, um Abweichungen zu vermeiden. Ein vollständiger und verfügbarer Audit-Trail ermöglicht es, Rollbacks von Anwendungen und Cluster-Konfigurationen auf einer wesentlichen Grundlage zu erstellen – ohne den Cluster von Grund auf neu erstellen zu müssen.
Zusammenfassend bedeutet GitOps die Weiterentwicklung von DevOps für verteilte Kubernetes-Umgebungen, obwohl sich DevSecOps als wichtiger Weg herausgestellt hat, um die CI/CD-Stabilität für GitOps über den gesamten Anwendungslebenszyklus aufrechtzuerhalten.
Steve Waterworth ist Leiter des technischen Marketings bei Weaveworks .