🎉 Das neue Waldheim Customer Portal ist live – Zentrale Verwaltung für alle unsere Produkte!
Wir stellen vor: Das Customer Portal – Ihre zentrale Plattform zur Verwaltung von Lizenzen, Abonnements und Support für Ecodrive, Socialverse und Silvacore. Mit vollständiger Stripe-Integration, Multi-User-System und 2FA-Sicherheit. 

Infrastructure as Code (IaC) Security: Risiken in Terraform und Co. absichern


Ein Leitaden für DevOps-Teams, um häufige Sicherheitslücken in IaC-Skripten wie Terraform zu identifizieren und zu schließen, bevor sie die Produktion erreichen.

Infrastructure as Code (IaC) Security: Der blinde Fleck in Ihrer Cloud-Strategie?

Infrastructure as Code (IaC) hat die Art und Weise, wie wir Cloud-Infrastrukturen bereitstellen und verwalten, revolutioniert. Mit Tools wie Terraform, AWS CloudFormation oder Azure Bicep definieren wir Server, Netzwerke und Datenbanken in deklarativen Skripten. Das Ergebnis ist eine schnelle, reproduzierbare und versionierbare Infrastruktur. Doch diese Effizienz birgt ein oft übersehenes Risiko: Sicherheitslücken, die direkt im Code verankert sind.

Ein kleiner Fehler in einem Terraform-Skript kann sich unbemerkt durch alle Umgebungen ziehen und in der Produktion ein Scheunentor für Angreifer öffnen. Die Frage ist also nicht ob, sondern wie wir Sicherheit direkt in den IaC-Lebenszyklus integrieren. Genau hier setzt DevSecOps an: Sicherheit wird zur gemeinsamen Verantwortung und von Anfang an in den Prozess eingebettet – nicht erst am Ende als Bremser. In diesem Beitrag zeige ich Ihnen die häufigsten Sicherheitsrisiken in IaC-Skripten und wie ich sie proaktiv absichere, bevor sie zu einem Problem werden.

Risiko 1: Zu weit geöffnete Security Groups

Eine der häufigsten und gefährlichsten Fehlkonfigurationen ist eine zu permissive Firewall-Regel. Oft wird aus Bequemlichkeit der Zugriff von 0.0.0.0/0 (dem gesamten Internet) auf sensible Ports wie SSH (22) oder RDP (3389) freigegeben.

Unsicheres Beispiel (Terraform):

resource "aws_security_group" "bad_example" {
  name        = "allow_all_ssh"
  description = "Allow SSH inbound traffic from anywhere"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"] # ACHTUNG: Jeder kann auf den SSH-Port zugreifen!
  }
}

Meine Best Practice: Das “Principle of Least Privilege” ist hier entscheidend. Geben Sie nur den IP-Adressen Zugriff, die ihn wirklich benötigen, wie zum Beispiel dem VPN-Gateway Ihres Unternehmens.

Sichere Lösung (Terraform):

resource "aws_security_group" "good_example" {
  name        = "allow_vpn_ssh"
  description = "Allow SSH inbound traffic from company VPN"

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["198.51.100.0/24"] # Nur Zugriff aus dem definierten IP-Bereich
  }
}

Risiko 2: Hartcodierte Secrets im Code

API-Schlüssel, Passwörter oder Zertifikate direkt im IaC-Code zu speichern, ist ein absolutes No-Go. Sobald dieser Code in ein Git-Repository eingecheckt wird, sind diese sensiblen Daten für jeden mit Lesezugriff einsehbar und bleiben oft für immer in der Git-Historie.

Unsicheres Beispiel (Terraform):

resource "aws_db_instance" "bad_example" {
  allocated_storage    = 10
  engine               = "mysql"
  engine_version       = "5.7"
  instance_class       = "db.t3.micro"
  name                 = "mydb"
  username             = "admin"
  password             = "SuperGeheimesPasswort123!" # ACHTUNG: Secret im Klartext!
  parameter_group_name = "default.mysql5.7"
  skip_final_snapshot  = true
}

Meine Best Practice: Lagern Sie Geheimnisse immer in einen dedizierten Secret Manager wie AWS Secrets Manager, Azure Key Vault oder HashiCorp Vault aus. Im Terraform-Code wird dann nur noch eine Referenz auf das Secret verwendet.

Sichere Lösung (Terraform):

data "aws_secretsmanager_secret_version" "db_password" {
  secret_id = "database/credentials/password"
}

resource "aws_db_instance" "good_example" {
  allocated_storage    = 10
  engine               = "mysql"
  engine_version       = "5.7"
  instance_class       = "db.t3.micro"
  name                 = "mydb"
  username             = "admin"
  password             = data.aws_secretsmanager_secret_version.db_password.secret_string
  parameter_group_name = "default.mysql5.7"
  skip_final_snapshot  = true
}

Risiko 3: Fehlende Verschlüsselung

Daten sollten sowohl im Ruhezustand (at rest) als auch während der Übertragung (in transit) verschlüsselt sein. Viele Cloud-Ressourcen, wie z.B. S3-Buckets oder Datenbanken, bieten Verschlüsselungsoptionen an, die aber explizit aktiviert werden müssen.

Unsicheres Beispiel (Terraform):

resource "aws_s3_bucket" "bad_example" {
  bucket = "my-unencrypted-data-bucket"
  # ACHTUNG: Keine serverseitige Verschlüsselung konfiguriert
}

Meine Best Practice: Aktivieren Sie die Verschlüsselung standardmäßig für alle Ressourcen, die sensible Daten speichern.

Sichere Lösung (Terraform):

resource "aws_s3_bucket" "good_example" {
  bucket = "my-encrypted-data-bucket"

  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }
}

Wie ich Sicherheit automatisiere: Shift-Left mit statischer Code-Analyse

Manuelle Code-Reviews sind gut, aber nicht skalierbar. Um IaC-Sicherheit systematisch zu gewährleisten, integriere ich automatisierte Security-Checks direkt in die CI/CD-Pipeline. Tools wie Checkov, Terrascan oder tfsec scannen Terraform-Code vor dem apply und schlagen bei Verstößen gegen vordefinierte Sicherheitsrichtlinien Alarm.

Ein solcher Check hätte alle oben genannten unsicheren Beispiele gefunden und das Deployment verhindert. Dies ist der Kern von “Shift-Left-Security”: Sicherheitsprobleme so früh wie möglich im Entwicklungsprozess zu finden, wenn sie am einfachsten und kostengünstigsten zu beheben sind.

Fazit: Sicherheit als Fundament, nicht als nachträglicher Gedanke

Infrastructure as Code ist ein mächtiges Werkzeug, aber es überträgt auch mehr Verantwortung auf die DevOps-Teams. Die Sicherheit Ihrer gesamten Cloud-Umgebung hängt von der Qualität Ihres Codes ab.

Zusammenfassend sind hier meine wichtigsten Sicherheitspraktiken:

  1. Least Privilege anwenden: Geben Sie nur die absolut notwendigen Berechtigungen frei.
  2. Secrets zentral verwalten: Niemals Zugangsdaten im Code speichern.
  3. Alles verschlüsseln: Aktivieren Sie Verschlüsselung für Daten “at rest” und “in transit”.
  4. Sicherheit automatisieren: Integrieren Sie IaC-Scanner in Ihre CI/CD-Pipeline.

Indem Sie diese Prinzipien befolgen, verwandeln Sie IaC von einem potenziellen Risiko in einen starken Hebel für eine sichere, konforme und widerstandsfähige Cloud-Infrastruktur.


Benötigen Sie Unterstützung bei der Absicherung Ihrer IaC-Pipelines? Als Ihr Partner für DevSecOps analysiere und härte ich Ihre bestehenden Terraform-Konfigurationen, baue sichere CI/CD-Prozesse auf und schule Ihre Teams in den Best Practices der IaC-Sicherheit. Kontaktieren Sie mich für eine unverbindliche Erstberatung und lassen Sie uns gemeinsam Ihre Cloud-Infrastruktur absichern.