Einführung
In diesem Artikel werden wir darüber sprechen, wie Sie Ihre CI/CD-Entwicklung (Continuous Integration / Continuous Deployment) durch die Implementierung von IaC (Infrastructure as Code) und einer gut strukturierten automatisierten Pipeline für fehleranfällige Bereitstellungen verbessern können. Für IaC werden wir speziell Terraform als die ausgewählte Softwareda es das am häufigsten verwendete Cloud-agnostische Tool ist.
Bei der Arbeit mit der Cloud ist es besonders wichtig, immer einen guten Überblick über die Entwicklung der Ihre Infrastruktur. Sie kann in größeren Unternehmen ziemlich groß werden und sollte organisiert werden. Hier kommt IaC ins Spiel. Mit einer Software wie Terraform können Sie Teile Ihrer Infrastruktur in eigene, repräsentative Projekte isolieren, was eine wesentlich bessere Wartung ermöglicht.
IaC ist nicht nur hilfreich für Verbesserung der Entwicklung in Ihrem Unternehmen, aber es ist auch wichtig, Ihre Bereitstellungen mit einer Pipeline zu sichern, die anstehende Änderungen im Projekt überwacht. Niemand möchte Änderungen einführen und versehentlich alles kaputt machen. Fehlerprüfungen sind daher unerlässlich, um eine sichere Arbeitsumgebung zu gewährleisten. In den kommenden Teilen dieses Artikels werden wir Ihnen einige Möglichkeiten aufzeigen, wie Sie eine gute und sichere IaC-Pipeline für Ihre Bedürfnisse Schritt für Schritt implementieren können.
Wie man anfängt - Terraform
Wenn es um die Entwicklung von Infrastruktur auf Cloud-Anbietern wie AWS, Google Cloud, Azurblauund so weiter, ist es immer gut, eine bessere Kontrolle über alles zu haben, was derzeit in diesen Diensten eingesetzt wird.
Für eine solche Verwaltung ist es wichtig, die bestehenden oder neuen Infrastrukturen in verschiedene Projekte aufzuteilen. Infrastructure as Code (IaC) beinhaltet die Verwaltung und Bereitstellung von Infrastrukturen mit Hilfe von Code, im Gegensatz zu manuellen Verfahren. Einführung in Terraform:
Terraform ist eine der größten IaC-Software auf dem Markt und ermöglicht genau dies. Wenn Sie Ihre Infrastruktur in eine Datei schreiben, haben Sie die volle Kontrolle über jeden Teil Ihres Projekts und können es von allem anderen auf dem Provider isolieren. Die Bereitstellung neuer Ressourcen, die Anpassung oder sogar das Löschen von Ressourcen kann durch einfache Änderung des Codes in der Datei und die Anwendung der Änderungen über Terraform selbst erfolgen, was eine hervorragende kontinuierliche Integration (CI) ermöglicht.
Auch Ressourcen, die vor dem Einsatz von IaC erstellt wurden, können problemlos in eine Terraform-Datei importiert werden, um von dieser im Nachhinein verwaltet zu werden. Terraform ist daher der ideale Ausgangspunkt für eine agile Entwicklung in Ihrem Unternehmen.
Verwendung von Repositories für die Automatisierung - Git
Nun, da Ihre gesamte Infrastruktur in Terraform verwaltet und in verschiedene Projekte aufgeteilt ist, können wir zum nächsten Schritt übergehen. Da ein DevOps-Team in der Regel aus mehr als einer Person besteht, ist es zwingend erforderlich, dass Ihre neu erstellten Dateien für das gesamte Team zugänglich sind. Daher sollten Sie sie in ein Versionskontrollsystem wie Git verschieben, das in der Regel über zahlreiche Funktionen verfügt, die auch für die Einrichtung einer ordnungsgemäßen Pipeline-Automatisierung sehr hilfreich sind.
Wenn Sie ein Online-Code-Repository wie Github verwenden, können Sie so genannte "Aktionen" erstellen, um Änderungen sofort zu verteilen, wenn Sie eine neue Übertragung vornehmen. Dies gewährleistet eine einzige Quelle der Wahrheit für die Infrastrukturen. Selbst Fehler können leicht behoben werden, indem man frühere Änderungen in den Dateien überprüft oder einfach zu einem früheren Arbeits-Commit zurückgeht.
Außerdem wird jede Bereitstellung nun automatisch erfolgen, was genau das ist, was wir umsetzen wollen. Mit dieser Form der Automatisierung gibt großen Wert für den Teil der kontinuierlichen Bereitstellung (CD) unserer Pipeline.
Optimierung Ihrer Automatisierung - Sicherheit
Wir sind jetzt an einem Punkt angelangt, an dem die Infrastrukturen mit Terraform verwaltet werden und auch ein automatisches Deployment in unserem Repository-System eingerichtet ist, ähnlich wie der Deployment-Workflow in Github Actions. Aber es fehlt noch ein wichtiger Punkt, um das volle Potenzial unserer Pipeline auszuschöpfen. Dieser Punkt ist die Sicherheit.
Wenn derzeit eine Änderung in Ihrem Repository versioniert wird, werden diese Änderungen sofort bereitgestellt (sofern keine Fehler in den Terraform-Dateien vorliegen). Jemand könnte versehentlich eine Ressource entfernen und diese Änderungen übertragen, auch wenn dies nicht beabsichtigt war, was zu entscheidenden Problemen führen könnte. Aus diesem Grund wollen wir den Prozess der Bereitstellung von Änderungen absichern.
Glücklicherweise gibt es viele Möglichkeiten zur Sicherung Ihrer Pipeline. Im folgenden Teil werden wir einige Lösungen zur Gewährleistung der Sicherheit in Ihrer Bereitstellungspipeline-Umgebung kurz erläutern.
Manuelle Genehmigung über Repository
Wir haben bereits einen automatisierten Arbeitsablauf für die Bereitstellung in Ihren Online-Code-Repositories (z. B. Github), der alle neu vorgenommenen Änderungen bereitstellt. Viele dieser Systeme unterstützen jedoch auch die Funktion der manuellen Genehmigung. Diese Funktion legt eine Pause zwischen Push und Bereitstellung ein und bittet zunächst andere Mitarbeiter, die anstehenden Änderungen zu überprüfen.
Nur wenn genügend Personen die Änderungen genehmigt haben, wird die Bereitstellung fortgesetzt. Ein Beispiel hierfür ist die Verwendung der Github Deployment Protection-Regeln. Sie können eine bestimmte Anzahl von angeforderten Prüfern festlegen, und die Bereitstellung wird nur ausgeführt, wenn diese Anzahl von Prüfern sie genehmigt.
Alternativ können Sie auch einen eigenen Workflow erstellen und in der Konfigurationsdatei des Workflows die Anzahl der erforderlichen Genehmigungen für Ihr Team festlegen.
Software für bewährte Praktiken
Funktionierende Infrastruktur können immer noch Sicherheitslücken aufweisen, die von den Genehmigern übersehen wurden. Sie haben z. B. einen Server, der über das Internet leicht zugänglich ist, obwohl er eigentlich privat und nur über Ihre andere Infrastruktur zugänglich sein sollte.
Diese Art von Problemen stellt auch eine große Bedrohung für die Sicherheit in Ihrer Pipeline dar. Glücklicherweise gibt es bereits Leute, die sich dieses Problems bewusst sind und spezielle Software zur Lösung dieses Problems entwickelt haben.
Für Entwicklungen außerhalb von Terraform gibt es das Programm "pre-commit", das über sogenannte Hooks nach Best Practices scannt. Diese Hooks setzen automatische Prüfungen und Aufgaben vor dem Commit von Änderungen. Wenn eine davon fehlschlägt, wird der Commit abgebrochen, bis das verursachende Problem behoben ist.
Wenn Sie mit Terraform entwickeln, können Sie Programme wie "tfsec" verwenden, das auch Ihren geschriebenen Code auf Best Practices überprüft. Es lässt Sie keine Änderungen vornehmen, wenn es kritische Probleme innerhalb Ihrer Infrastruktur gibt und markiert diese als Fehler.
Schlussfolgerung
Wenn Sie alles eingerichtet haben, sollten Sie nun über eine optimierte und sichere CI/CD-Pipeline verfügen, mit der Sie in Ihrem DevOps-Team arbeiten können.
Nach der Lektüre dieses Artikels sollten Sie in der Lage sein, die großen Vorteile der Implementierung von IaC, Automatisierung, Versionierung und Sicherheitsmaßnahmen in Ihrer CI/CD-Pipeline zu erkennen.
Auch wenn die Einrichtung all dieser Teile zu Beginn etwas zeitaufwändig sein kann, wird sie Ihnen einen wesentlich agileren Ansatz für die Entwicklung Ihres Unternehmens ermöglichen.
Mit dieser Methode minimieren Sie die Risiken bei der Bereitstellung, sichern Ihren Bereitstellungs-Workflow, sorgen für eine schnelle Bereitstellung der Ergebnisse und gewährleisten so eine gute Team-Flexibilität.
Über den Autor
Moritz Gunkel
Moritz ist ein aufstrebender Berater in der Abteilung DevOps für Scalefree, spezialisiert auf Cloud-Engineering, Automatisierung und Infrastructure as Code, mit einem besonderen Händchen für Terraform. Während er mit seinen Aufgaben jongliert und als Werkstudent einen Bachelor-Abschluss in Informatik anstrebt, hat Moritz' methodische Herangehensweise die internen Abläufe erheblich beeinflusst, was ihm Anerkennung einbrachte und die Voraussetzungen für einen spannenden Übergang in eine Vollzeit-Beratertätigkeit schuf. Mit seiner Leidenschaft für Innovation und seinem Engagement für hervorragende Leistungen wird Moritz auch weiterhin einen bleibenden Eindruck in der dynamischen Welt von DevOps hinterlassen.