Was ist Infrastructure-as-Code (IaC)?

Unter Infrastructure-as-Code (IaC) versteht man die Nutzung von Code (in Form von vorgefertigten Vorlagen) zur Bereitstellung von Infrastruktur-Ressourcen, die zur Unterstützung von cloudbasierten Anwendungen erforderlich sind. Entwickler können diese hochgradig reproduzierbare Vorgehensweise nutzen, um Code zu schreiben, zu testen und zu veröffentlichen, der die Infrastruktur schafft, auf der Anwendungen ausgeführt werden. Der gesamte Prozess kann als Teil der CI/CD-Softwarepipeline (Continuous Integration/Continuous Deployment) automatisiert werden.

IaC kann sehr vorteilhaft sein, da Sie nicht jedes Mal manuell Ressourcen bereitstellen müssen, wenn Sie neuen Code in die Produktion geben. Wiederholbare Aufgaben können automatisiert werden und Teams können Produkte schneller bereitstellen.

Die Implementierung von IaC kann Entwicklern zwar zu einem schnelleren und effizienteren Arbeitsprozess verhelfen, doch ist dies oft mit einem Kompromiss verbunden. Diese erhöhte Geschwindigkeit führt oft dazu, dass Plattform- und DevOps-Teams weniger Kontrolle und Überblick haben. Und das kann in manchen Fällen dazu führen, dass Ressourcen nicht ordnungsgemäß bereitgestellt oder, schlimmer noch, auf unsichere Weise erstellt werden. Um dem entgegenzuwirken, heißt es in einem aktuellen Forrester-Bericht, dass 58 % der weltweit führenden Sicherheitsentscheider planten, ihr Budget für Anwendungssicherheit im Jahr 2022 zu erhöhen.

Die Integration von Cybersecurity in den Entwicklungszyklus kann jedoch zu Konflikten zwischen Entwicklern und Sicherheitspersonal führen, da SecOps versucht, mit DevOps Schritt zu halten und Workloads so schnell wie möglich zu sichern.

Infrastructure-as-Code-Tools

Jede Umgebung und ihr Zweck sind einzigartig. Einige Tools eignen sich besser als andere, daher sollten Sie recherchieren, was für Ihre speziellen Bedürfnisse am besten geeignet ist. Zu beachten ist dabei, dass viele Cloud-Anbieter native Tools und Dienste für ihre Plattformen bereitstellen. Versuchen Sie, dies während des Rechercheprozesses zu berücksichtigen, um eine Redundanz von Funktionen zu vermeiden, die Ihnen möglicherweise bereits bei der Einführung einer bestimmten Plattform zur Verfügung stehen.

Erfahren Sie mehr über unseren Ansatz: Integration von Cloud-Sicherheit mit DevOps und CI/CD-Tools

Terraform

Terraform hilft Nutzern, Ressourcen und Infrastruktur in lesbaren, deklarativen Konfigurationsdateien zu definieren. Es kann den Lebenszyklus einer Infrastruktur auf mehreren Cloud-Plattformen verwalten und Ressourcenänderungen während der Bereitstellung verfolgen.

Chef Infra

Mit Chef Infra können Nutzer das Konfigurationsmanagement automatisieren, indem Richtlinien definiert werden, die reproduzierbar, einheitlich und wiederverwendbar sind. Es kann Konfigurationen und Richtlinien als Code definieren, der testbar und durchsetzbar ist und in großem Umfang als Teil automatisierter Pipelines bereitgestellt werden kann. Chef kann auch Konfigurationsabweichungen erkennen und diese bei Bedarf korrigieren.

Puppet

Puppet ist ein Tool, das deklarativen Code zur Verwaltung und Automatisierung der Serverkonfiguration verwendet. Es ermöglicht die Skalierung der Infrastrukturautomatisierung mit den IT-Anforderungen eines Unternehmens. Nutzer können den gewünschten Systemzustand beschreiben, im Gegensatz zu den Schritten, die erforderlich sind, um dorthin zu gelangen.

AWS CloudFormation

AWS CloudFormation unterstützt Nutzer bei der Verwaltung der Infrastruktur mit DevOps. Es ermöglicht Automatisierung, Tests und Vorlagen für die Bereitstellung der Infrastruktur mit CI/CD-Automatisierungen. Es kann auch die Infrastruktur erweitern und verwalten, um in der CloudFormation Registry veröffentlichte Cloud-Ressourcen, die Entwickler-Community und eine Nutzerbibliothek einzubeziehen.

Ansible

Ansible ist eine auf Open Source basierende Befehlszeilensoftwareanwendung für die IT-Automatisierung. Es kann Systeme konfigurieren, Software bereitstellen und fortschrittliche Workflows zur Unterstützung von Anwendungsbereitstellung, Systemaktualisierungen und mehr orchestrieren. Ansible verfügt über minimale „bewegliche Teile“ und verwendet OpenSSH für den Transport. Es verwendet außerdem eine für Menschen lesbare Sprache, damit die Anwender schnell loslegen können.

SaltStack

SaltStack ist eine auf Python basierende Open-Source-Software für die Remote-Ausführung von Aufgaben und das Konfigurationsmanagement, mit der Nutzer komplexe IT-Systeme bereitstellen und konfigurieren können. Es kombiniert menschenlesbares YAML mit ereignisgesteuerter Automatisierung, um ITOps-, DevOps-, NetOps- oder SecOps-Funktionen zu nutzen.

Was sind die Vorteile von IaC?

Wie oben erwähnt, ist der Hauptvorteil von Infrastructure-as-Code in Cloud-Umgebungen die Geschwindigkeit. Etwas genauer betrachtet, ergeben sich die folgenden greifbareren und spezifischeren Geschäftsvorteile:

  • Erstellung von Vorlagen für manuelle Konfigurationen: Bisher mussten Entwickler die Infrastruktur jedes Mal manuell bereitstellen, wenn eine Anwendung für das Deployment vorbereitet wurde. IaC automatisiert diesen Prozess mit Vorlagen. Wiederholbarer Code kann schnell und effizient genutzt werden, indem SecOps mit diesen Vorlagen Sicherheitskontrollen erstellt und Leitplanken einrichtet.
  • Reduzierung von Risiken: Risiken können nie vollständig beseitigt werden. Wenn Sie jedoch wiederholbare Vorlagen erstellen, die sich an den Sicherheitsstandards und bewährten Verfahren des Unternehmens orientieren, sinkt das Risiko menschlicher Fehler und Schwachstellen.
  • Reduzierung unnötiger Ausgaben: Neben der potenziellen Bereitstellung falsch konfigurierter Ressourcen führt menschliches Versagen häufig zu einer Überbelegung von Infrastrukturressourcen. Durch die Anwendung von Leitplanken auf Ressourcenvolumina können Sie unnötige Ausgaben im Zusammenhang mit einer übermäßigen Bereitstellung von Ressourcen vermeiden.
  • Aufbau eines stärkeren Teams: IaC kann Kosteneinsparungen sowie mehr technische und betriebliche Effizienz ermöglichen. Der vielleicht größte Vorteil ist die Verringerung der Reibungsverluste in der Beziehung zwischen DevOps und SecOps. Wenn die Cybersecurity auf natürliche Weise in den Prozess integriert ist, hat man weniger das Gefühl, dass die Sicherheitsabteilung die Arbeit der Entwickler vor der Laufzeit „überprüft“. Dies kann zu einer positiveren Arbeitsumgebung und einem stärkeren Teamgeist führen.

Der makroökonomische Nutzen, den die meisten modernen Unternehmen erreichen wollen, ist der große „Shift-Left“-Ansatz. Das heißt, die Integration von DevOps und SecOps in eine echte DevSecOps-Kultur, die Sicherheit in die CI/CD-Pipeline verlagert und Sicherheit und Compliance von einer reaktiven zu einer präventiven Strategie macht.

Deklarative vs. imperative IaC

Was also ist IaC? Was deutlich wird, ist, dass es viele Möglichkeiten zur Beantwortung der Frage gibt. Wenn man etwas genauer hinschaut, gibt es zwei allgemeine Möglichkeiten, dies zu tun: deklarative IaC und imperative IaC. Einfach ausgedrückt: Diese beiden Methoden zeigen, wie ein Entwickler die IaC-Automatisierungsplattform informiert, was zu tun ist.

Deklarative IaC

Bei der Angabe eines gewünschten Ergebnisses lässt ein Nutzer das System auf vorgefertigte Vorlagen und Regeln zurückgreifen, um zu diesem Ergebnis zu gelangen. Daher benötigt der Nutzer weniger technisches Wissen über den Konfigurationsprozess, und durch die Delegation werden Effizienzvorteile erzielt. Ein Nutzer sagt im Wesentlichen: „Ich möchte, dass dieses Ergebnis eintritt, nachdem der Prozess abgeschlossen ist, und es ist mir egal, wie Sie es machen.“ Ein weiterer Vorteil ist, dass Nutzer bei der Gestaltung und Bereitstellung der gesamten Anwendung einen strategischeren Ansatz verfolgen können.

Zur Erinnerung: Die Natur von IaC besteht darin, Anweisungen zu schreiben, die die Cloud-Infrastruktur definieren, auf der Code ausgeführt wird. Deklarative IaC ist einfach ein schnellerer und einfacherer Weg, um zu einem gewünschten Ergebnis zu gelangen, und ist die Methode, die in der überwältigenden Mehrheit der Fälle angewendet wird.

Imperative IaC

Die Verantwortung für die Definition jedes einzelnen Schritts bis zum Endergebnis klingt vielleicht nach einem großen Nachteil, und das kann es auch sein. Ein Nutzer muss die Programmiersprache sehr gut kennen und jeden Schritt fehlerfrei ausführen, damit der gesamte Vorgang funktioniert. Der Vorteil ist, dass der Nutzer mehr Kontrolle über den Automatisierungsprozess und den Code hat und den Konfigurationsprozess an die spezifischen Anforderungen einer Situation anpassen kann.

Es geht darum, dem Controller zu sagen, wie er genau Dinge tun soll. „Iteriere durch diese Schleife, prüfe diese Randbedingung, führe diese Aktion aus, wenn die Bedingung erfüllt ist, aber diese andere Aktion, wenn die Bedingung nicht erfüllt ist.“ Imperative Programmierung ist im Wesentlichen Mikromanagement und wird im Allgemeinen von Menschen geleitet.

Was sind einige Herausforderungen von IaC?

Die Teams müssen sicherstellen, dass die Erhöhung der Geschwindigkeit und Effizienz im Entwicklungszyklus durch IaC nicht zu Sicherheitsproblemen führt. Somit ist es entscheidend, Sicherheitskontrollen und -prüfungen so früh wie möglich im Prozess zu implementieren. Auf diese Weise können Sie vermeiden, dass Ressourcen erstellt werden, die nicht den Unternehmensstandards entsprechen, da Probleme in der Vorlage erkannt werden, bevor sie überhaupt erstellt werden. Werfen wir einen Blick auf einige der Herausforderungen von IaC (keine Sorge, die Vorteile überwiegen):

  • Vorlagen, die Sicherheitsrisiken enthalten: Sobald eine Vorlage erstellt wurde, bedeutet das nicht, dass sie fehlerfrei ist. Es empfiehlt sich, die Vorlage vor der Verwendung zu überprüfen, um zu vermeiden, dass die riskante Ressource überhaupt erstellt wird.
  • Integrierte Analyse: Sobald IaC in die Praxis umgesetzt wurde, müssen auch Scan-Tools integriert werden, um, wie oben erwähnt, Fehler zu erkennen, bevor sie zu echten Schwachstellen werden. Die gute Nachricht ist, dass sowohl die statische IaC-Analyse als auch die dynamische IaC-Analyse dabei helfen können, den Code zu analysieren, Fehlkonfigurationen zu erkennen und die Cloud-Umgebungen zu bewerten, in denen eine IaC-Vorlage ausgeführt werden soll.
  • Hochfahren mit IaC: Die Implementierung und Verwendung von IaC ist zu einem bestimmten Zeitpunkt mit einer Lernkurve verbunden, die Entwicklerressourcen beanspruchen und einen grundlegend anderen Arbeitsablauf schaffen kann, als Teams es möglicherweise gewohnt sind. Außerdem muss das Repository der IaC-Vorlagen umfangreich genug sein, um sicherzustellen, dass es den Anforderungen des gesamten Entwicklungsteams entspricht. Daher ist es wichtig, dass die beteiligten Teams über einen Plan auf dem Laufenden bleiben, um die Vorlagen auf dem neuesten Stand zu halten.
  • Menschliche Reibung: Bei der Implementierung von IaC kann es für Entwickler schwierig sein, mit dem Gefühl der Störung oder Verlangsamung umzugehen, das mit der Notwendigkeit einhergeht, kontinuierlich Sicherheitstools zu verwenden, um sicherzustellen, dass die Infrastruktur vor Fehlkonfigurationen und Schwachstellen geschützt ist. Es liegt an der Cybersecurity-Abteilung, den Entwicklern das schnelle Scannen von IaC-Vorlagen und das Weiterarbeiten so einfach wie möglich zu machen.

Lesen Sie mehr über IAC-Security

Erfahren Sie, wie die Cloud Security-Plattform von Rapid7 IAC Sicherheit bietet

Aktuelle Themen zur Cloud-Infrastruktur im Rapid7-Blog

2022 Cloud Misconfigurations Report: Neueste Cloud Security-Verstöße und Angriffstrends