Production Perig - stock.adobe.c
Sichere Entwicklung von Webanwendungen und -Services
Mit Infrastructure as Code lassen sich nicht nur Kosten und Zeit einsparen. Auch viele Fehlkonfigurationen können vermieden werden, wenn Einstellungen in Code definiert werden.
On-Demand aufgebaute Cloud-Plattformen wie AWS (Amazon Web Services), Microsoft Azure und die Google Cloud Platform bieten ihren Kunden viele Informationen zum Thema Security. So ermöglichen sie es meist, umfangreiche Security- und Compliance-Berichte einzusehen. Dazu kommen Zertifizierungen und andere Bestätigungen von unabhängiger Seite, die die jeweiligen Implementierungen und den operativen Betrieb aus Sicherheitssicht überprüft haben. Ein weiteres Beispiel ist das Self-Service-Portal AWS Artifact, das einen direkten Zugriff auf die von AWS bereitgestellten Compliance-Reports ermöglicht. Microsoft bietet ähnliche Dienste über sein Trust Center und das hauseigene Service Trust Portal.
Diese Berichte und Ressourcen unterstützen die Kunden nicht nur beim Überwachen und Kontrollieren ihrer eigenen Compliance-Vorgaben innerhalb der Cloud. Sie bieten auch hilfreiche Einsichten in die physischen, strukturellen und operativen Kontrollen, die zum Einhalten der wichtigsten Security-Standards und -Vorgaben benötigt werden. Die in den Bereichen Infrastructure as a Service (IaaS) und Platform as a Service (PaaS) bereitgestellten Ressourcen entsprechen in der Regel den in der Industrie geltenden Best Practices. Sie können aber nicht garantieren, dass die eigene Umsetzung eines Kunden und seine individuellen Implementierungen auch dieselben Standards einhalten. Es besteht sogar das Risiko, dass manche für das Design und den Aufbau der Cloud-Infrastruktur eines Unternehmens verantwortlichen Netzwerkingenieure denselben Fehler machen wie vor ihnen so viele Softwareentwickler: Das Kopieren und Einfügen von Code-Beispielen aus dem Web in ihre Templates, die sie dann ohne weitere Prüfung in ihren produktiven Umgebungen einsetzen.
Die Vorteile von Infrastructure as Code
Infrastructure as Code steht als Begriff für das Management von IT-Infrastrukturen durch von Maschinen lesbare Skripte und Definitionsdateien. Dadurch werden viele bisher benötigte manuelle Konfigurationsschritte überflüssig. Das hat den großen Vorteil, dass dabei dieselben Versionierungsmaßnahmen verwendet werden können wie sie die Entwicklungsteams bereits für Quellcode nutzen. Das gewünschte Ergebnis einer Umgebung wird also in Form von Code beschrieben, der dann in einer vordefinierten Konfiguration umgesetzt wird. Das heißt, bei diesem Modell ergibt sich immer dasselbe Ergebnis. Die Teams erreichen so stabile, in sich konsistente Umgebungen, die sich zudem auch schneller einrichten und skalieren lassen. Die damit mögliche Automatisierung reduziert Sicherheitsrisiken, die immer dann auftreten, wenn Menschen beteiligt sind. Ansonsten immer wieder auftretende Probleme im operativen Betrieb lassen sich ebenfalls leichter vermeiden, weil keine manchmal nur minimal unterschiedlichen Konfigurationen mehr verwendet werden. Das gilt natürlich nur dann, wenn der eingesetzte Code auch wirklich für sichere IT-Umgebungen sorgt.
Aber das Problem geht noch weiter. Viele der Ratgeber für Nutzer und Entwickler, aber auch API-Referenzen (Application Programming Interfaces) und Tutorials der Cloud-Anbieter enthalten Beispielkonfigurationen und Code-Schnipsel. Meist wurden sie jedoch nicht ausreichend im Hinblick auf ihre Sicherheit überprüft. Sondern es ging meist nur darum, möglichst einfach zu erklären, wie eine Funktion genutzt werden kann. Viele Code-Beispiele aus anderen Quellen verwenden in der Regel ebenfalls unsichere Infrastrukturkonfigurationen wie zum Beispiel das Aktivieren eines Zugriffs via SSH (Secure Shell) auf Ressourcen von beliebigen IP-Adressen aus. Damit soll vermieden werden, dass die Schritt-für-Schritt-Anleitungen zu kompliziert für die meisten Nutzer werden. Auch wenn viele der Dokumentationen und Artikel Warnungen enthalten, dass die beschriebenen Einstellungen nicht auf ihre Sicherheit überprüft wurden, besteht doch in der Praxis die erhebliche Gefahr, dass viele der erwähnten Beispiele und unsicheren Konfigurationen später in produktiven Umgebungen wieder zu finden sind. Ohne ausreichende Trainings und umfassende Code-Reviews lässt sich das fast nie vermeiden.
Mehr Sicherheit im Code
Die für die Sicherheit eines Projekts verantwortlichen Mitarbeiter müssen daher dafür sorgen können, dass ein verlässliches Framework genutzt wird, wenn es um die Umsetzung sicherer Methoden bei der Entwicklung von Applikationen geht. Das gilt insbesondere für den Code, der beim Erstellen, Konfigurieren und Ausspielen von Infrastrukturen genutzt werden soll, auf denen dann wiederum andere Applikationen und Services angeboten werden sollen. Aus Security-Sicht fehlerhafte Konfigurationen finden sich schon seit langem in den OWASP-Top-Ten (Open Web Application Security Project). Diese Liste enthält die gefährlichsten Sicherheitsrisiken für Webanwendungen. Trotzdem tauchen sie immer wieder auf. Wenn die Entwickler Code-Beispiele nehmen und kopieren, ohne die dadurch entstehenden Sicherheitsrisiken einer bestimmten Konfiguration in der Dokumentation zu kennen und zu verstehen, wird das Problem immer größer.
Im vergangenen Jahr hat AWS alleine mehr als 1.000 neue Funktionen in seinen diversen Services eingeführt. Anhand dieser gewaltigen Zahl wird klar, wie wichtig die fortgesetzte Ausbildung der mit einem Cloud-Projekt befassten Entwickler und Administratoren ist. Gemeinsame Code-Reviews, bei denen der bisher entwickelte Code mit den anderen Teammitgliedern besprochen und diskutiert wird, sind deswegen ein probates Mittel, damit jeder Beteiligte versteht, wie die jeweilige Infrastruktur aufgebaut ist und wie sie abgesichert werden kann. Dadurch entstehen zudem Möglichkeiten, um Fehler und Unachtsamkeiten früher zu entdecken und noch rechtzeitig zu beheben, bevor ein größerer Schaden entstanden ist. Ebenso wichtig ist der Einsatz eines modernen Code-Repositories für den bei einem Infrastrukturprojekt verwendeten Code. Der Grund dafür ist, dass dadurch eine Kontrolle der Versionen möglich wird und dass Veränderungen am Code nachverfolgt werden können. Sowohl vor als auch nach dem Deployment des Codes wird auf diese Weise die Verwaltung optimiert. Im Notfall lässt sich dann auch ein möglicherweise benötigtes Rollback leichter und schneller durchführen.
Softwareprojekte und -anwendungen werden immer komplexer. Das lässt sich nicht vermeiden. Das Gleiche gilt jedoch auch für die Infrastruktur, auf denen sie eingesetzt werden. Es ist deswegen notwendig, dass Standards für eine sichere Code-Entwicklung in allen Bereichen angewendet werden. Auf diese Weise kann Infrastructure as Code auch das Thema Standardisierung im Unternehmen fördern.