Blog
Drei Sicherheits-Highlights für Terraform auf AWS

Sie möchten also Ihre Infrastruktur in AWS aufbauen und Terraform für Ihre Infrastructure as Code verwenden? Und Sie möchten dies sicher tun? In diesem Blog beleuchten wir drei Dinge, auf die Sie aus der Sicherheitsperspektive achten sollten: Ihre IAM-Rollen und Vertrauensbeziehungen, Ihren Terraform-Status und Ihre Erkennung und Überwachung. Natürlich verdient jedes dieser Themen einen eigenen, ausführlichen Blog, aber wir beginnen mit den drei wichtigsten Punkten.

Wenn Sie unsere früheren Blogs zum Thema sichere Bereitstellung gelesen haben, dann wissen Sie inzwischen, dass Sie Ihre Infrastruktur am besten mit einer sicheren CI/CD-Pipeline bereitstellen können. Wenn Sie das weiterverfolgt haben, dann haben Sie bereits einen guten Ausgangspunkt für Ihre Cloud-Infrastruktur. Hoffentlich stellen Sie Ihre Produktionsumgebung nur über Infrastruktur als Code mit geschützten Zweigen und geschützten Läufern bereit. Wie geht es nun weiter? Lassen Sie uns über drei wichtige Punkte sprechen: Identitäts- und Zugriffsmanagement (IAM), der Terraform-Status und die Überwachung.
IAM
AWS ermöglicht es Ihnen, Ihre Cloud-Infrastruktur auf mehrere AWS-Konten aufzuteilen. Ein Konto ist eine natürliche Grenze und Sie sollten unbedingt verschiedene Konten für z.B. Produktion, Staging und Entwicklung verwenden. Die Konten können - und sollten - mit AWS Organizations verwaltet werden. AWS Organizations ist nützlich, um die verschiedenen AWS-Konten miteinander zu verbinden. So können Sie sie automatisch auf der Grundlage der Organisationsstruktur bereitstellen und die entsprechenden Leitplanken anbringen.
Organisation Konto Zugriffsrolle
Wenn Sie ein neues AWS-Konto in der Organisation anlegen, erhält es automatisch die OrganizationAccountAccessRole. Diese Rolle verleiht jedem, der sie vom Stammkonto der Organisation übernehmen kann, Administratorrechte. So weit, so gut.
Als nächsten Schritt sollten Sie separate Rollen für Ihre Cloud-Ingenieure oder Ihr SRE-Team, Ihr DevOps-Team, Ihre Datenplattform-Teams usw. einrichten. Außerdem benötigen Sie Rollen für die CI-Runner, die sie verwenden. Einige dieser Rollen müssen möglicherweise selbst etwas Terraforming betreiben.
Es wäre einfach, die OrganizationAccountAccessRole zu verwenden und diese Vertrauensbeziehung auf SRE-Teams oder Pipelines auszuweiten. Das Risiko dabei ist, dass jeder, der eine solche Rolle übernehmen kann, so ziemlich alles mit dem AWS-Konto tun kann. Ähnlich wie bei der Verwendung von root sollten Sie OrganizationAccountAccessRole nur verwenden, wenn es wirklich notwendig ist. Stellen Sie sicher, dass Sie einen Notfallprozess für den Fall der Fälle haben. Wissen Sie, wer oder was administrative Rollen übernehmen kann. Wenn der Notfallprozess eingerichtet ist, beschränken Sie die weitere Nutzung auf Ihre privilegierte CI/CD-Pipeline.
Terraform Zustand
Ihr Terraform-Status wird von Terraform verwendet, um den Überblick über die realen Ressourcen zu behalten. Der Status dient als Grundlage, um entsprechende Änderungen an Ihrer Infrastruktur vorzunehmen.
Was im Terraform-Status schiefgehen kann
Sie (oder ein Angreifer) könnten den Terraform-Status von Hand manipulieren. Wenn Sie das tun, könnten Sie Terraform dazu verleiten, Ressourcen zu erstellen, nach denen Ihr eigentlicher Terraform-Code nie gefragt hat. Das kann Kopfzerbrechen bereiten, wenn Sie versuchen, anhand Ihrer Definitionen im Terraform-Status eine Abweichung im Cloud-Konto zu finden.
Der Terraform-Status hat seine Tücken, wenn es um Sperren und dergleichen geht, was eigene Sicherheitsherausforderungen mit sich bringen kann. Noch wichtiger ist, dass wir im Terraform-Status oft Geheimnisse finden, wie z.B. "Anfangspasswörter", die oft gleich bleiben, sowie Zugriffstokens, die von benutzerdefinierten Anbietern verwendet werden. Und was ist mit den Werten, die Sie im AWS Secrets Manager speichern möchten? Auch sie landen oft im Terraform-Status.
Im Wesentlichen gibt es ein paar Dinge, auf die Sie achten sollten, wenn Sie an eine mögliche Kompromittierung Ihres Terraform-Status denken:
- Unbeabsichtigte/unautorisierte Änderungen durch Zustandsmanipulationen können zu nicht nachvollziehbaren Änderungen der Infrastruktur führen;
- Der Explosionsradius der Zustände kann sich über mehrere Umgebungen erstrecken, was bedeutet, dass eine Kompromittierung potenziell alle Umgebungen gleichzeitig betreffen kann;
- geheime Lecks über den Status bieten zusätzliche Einstiegspunkte für Angreifer.
Wie Sie den Terraform-Status sichern
- Versuchen Sie, den Schreibzugriff auf den Terraform-Status zu verhindern, abgesehen von den bereits erwähnten privilegierten Runnern und einem "break glass"-Benutzer für Notfälle (der hinter MFA stehen sollte).
- Teilen Sie die Terraform-Status nach Umgebungen und/oder anderen Möglichkeiten auf, die für Ihr Unternehmen sinnvoll sind. Schauen Sie sich unbedingt die Workspaces an.
- Schränken Sie die Möglichkeit ein, den Status zu extrahieren und einen lokalen Plan zu erstellen. Die Entwickler sollten keinen direkten Zugriff auf die Produktion benötigen, denn das ist die Aufgabe der CI/CD-Pipeline. Verwenden Sie im Notfall die bereits erwähnte "break glass"-Rolle.
- Versuchen Sie, die Speicherung von Geheimnissen im Terraform-Status ganz zu verhindern, indem Sie die Verwaltung der Geheimnisse in eine Lösung wie HashiCorp Vault oder etwas Ähnliches verlagern. Alternativ: Sorgen Sie dafür, dass die Geheimnisse vorerst verschlüsselt im Terraform-Status landen.
Erkennung & Überwachung
Selbst wenn Sie Infrastruktur als Code verwenden, können Sie leicht Fehler machen. Sie können Rollen oder Benutzern zu weitreichende Berechtigungen zuweisen, Sie können Dinge wie Ihre S3-Speicher-Buckets zu weit öffnen, usw. Deshalb:
- Aktivieren Sie immer die Service-Kontrollrichtlinien (SCPs) von AWS Config und AWS Organizations, um Leitplanken für das gesamte Unternehmen zu schaffen. Inspirationen zu SCPs finden Sie im SCP-Repository von asecure.cloud.
- Stellen Sie als nächstes sicher, dass Sie Ihre CloudTrail-Protokolle über einen angemessenen Zeitraum speichern.
- Verwenden Sie den Access Analyzer, um andere mögliche Fehler zu erkennen.
- Stellen Sie sicher, dass Sie die Zugriffsprotokollierung für Ihre Speicherlösungen aktivieren, insbesondere für diejenigen, die den Terraform-Status speichern.
- Schließlich: Protokollierung ist gut, aber vergessen Sie nicht, die Informationen verwertbar zu machen. Richten Sie ein Warnsystem ein, das etwas und/oder jemanden alarmiert. Lassen Sie es eine Warnung ausgeben, wenn hoch privilegierte Rollen übernommen werden, der AWS-Root-Benutzer verwendet wird oder wenn etwas anderes als Ihre CI/CD-Pipeline auf den Terraform-Statusspeicher für die Produktion zugreift. Fangen Sie klein an und erweitern Sie je nach Risiko - idealerweise führen Sie regelmäßige Bedrohungsmodellierungen durch, um erkennbare Angriffswege zu entdecken.
Nächste Schritte
Damit sind unsere drei Sicherheits-Highlights für Terraform auf AWS abgeschlossen. Nachdem wir uns nun mit IAM, dem Terraform-Status und Detection & Monitoring beschäftigt haben, ist es Zeit für die nächsten Schritte.
Möchten Sie Dinge früher erkennen? Probieren Sie Tools wie Terraform Compliance, Prowler, Scoutsuite oder Inspec aus, um Ihre Sicherheitslage zu überprüfen oder sogar zu verhindern, dass Fehlkonfigurationen die Produktion erreichen. Sie können auch driftctl verwenden, um zu sehen, ob es eine Abweichung zwischen Ihrem Terraform-Code und dem, was in Ihrer Umgebung vorhanden ist, gibt. Möchten Sie einen tieferen Einblick in diese Themen erhalten? Lassen Sie es uns wissen!
Verfasst von

Ben de Haan
Contact




