Zum Hauptinhalt Zur Navigation

Freie Terraform-Alternative: Opentofu ermöglicht "state encryption"

Seit über zehn Jahren klagen Terraform-Nutzer über unverschlüsselte state files. Version 1.7 der freien Alternative Opentofu bietet nun optionale Verschlüsselung an.
/ Caspar Clemens Mierau
Kommentare News folgen (öffnet im neuen Fenster)
Bei Opentofu gibt es eine kostenfreie, sichere Verschlüsselung des states. (Bild: Opentofu)
Bei Opentofu gibt es eine kostenfreie, sichere Verschlüsselung des states. Bild: Opentofu

Terraform ist ein weit verbreitetes Infrastructure-as-Code-Tool, das durch seinen modularen Aufbau die meisten Infrastrukturen wie Cloud-Umgebungen, Datenbanken, virtuelle Server und weitere managen kann. Dabei ist es in der Regel notwendig, sensible Daten wie Passwörter, Token und Zertifikate zu verwalten.

Während es möglich ist, diese nicht direkt in den Terraform-Code zu schreiben und Code-Repositories frei von geheimen Daten zu halten, wird es schwieriger beim Terraform-state. In der state-Datei speichert Terraform Metadaten über den aktuellen Status der verwalteten Infrastruktur. Dieser kann, auch unwissentlich, sensible Daten wie Standardpasswörter der verwalteten Ressourcen enthalten.

Das Sicherheitsproblem mit state files

Entwickelt nur eine Person mit Terraform, kann sie den state lokal auf dem eigenen Rechner behalten und beispielsweise mit einem verschlüsselten Dateisystem absichern. Schwieriger wird es, wenn ein Team mit Terraform arbeitet.

Hier wird in der Regel mit einem zentralen state gearbeitet, der zum Beispiel in einem Cloud-Bucket abgelegt wird. Auch wenn dieser Speicherort durch entsprechende Zugriffsrechte abgesichert werden kann, bleibt die state-Datei bis auf Cloud-eigene Verfahren unverschlüsselt. Sollte sie einem Angreifer in die Hände fallen, kann dieser gegebenenfalls wertvolle Informationen aus ihr ziehen - im schlimmsten Fall Passwörter und andere Zugangsdaten.

Hashicorp, der Hersteller von Terraform, weiß um das Problem und nutzt es als eine seiner Monetarisierungsstrategien: Während mit der kostenlosen Version von Terraform bis auf eine serverseitige Verschlüsselung in S3-Buckets(öffnet im neuen Fenster) offiziell keine state-Verschlüsselung möglich ist, wird Nutzerinnen und Nutzern der kommerziellen HCP-Terraform-Plattform und Terraform-Enterprise-Kunden die erweiterte Verschlüsselung des states angeboten.

Dabei gab es bereits Versuche, mittels GPG-verschlüsselten Dateien zu arbeiten. Hier intervenierte Hashicorp jedoch, erklärte das Vorhaben für nicht zielführend und drängte auf einen Rückbau der Funktionalität. Ein Ticket im Terraform-Bugtracker zur fehlenden state-Verschlüsselung ist nun seit fast zehn Jahren offen(öffnet im neuen Fenster) .

Anders sieht es mit der freien Terraform-Alternative Opentofu aus. Diese wurde ursprünglich als Antwort auf die von Hashicorp durchgeführte und viel kritisierte Terraform-Lizenzänderung gegründet.

Dabei platzierte sich Opentofu zunächst als reines drop-in replacement, das auf freien Open-Source-Lizenzen beruht. Die Opentofu-Versionen orientieren sich an den Terraform-Versionen. Das gerade veröffentlichte Opentofu 1.7 sollte bestehenden Terraform-1.7-Code weitgehend unverändert ausführen können. Die Migration ist in der Regel recht einfach und besteht aus dem Durchführen eines Backups, wenigen vorbereitenden Schritten und Ausführen von ''tofu'' statt ''terraform''(öffnet im neuen Fenster) .

Encrypted state files in Opentofu 1.7

Mit der am 30. April veröffentlichten Version 1.7 von Opentofu(öffnet im neuen Fenster) wandelt sich das Projekt von der reinen freien Alternative zu einem Anbieter bisher vermisster Features. Als wichtigste Funktion wird in 1.7 state encryption eingeführt. Durch wenige Zeilen Code und ein festgelegtes Kennwort wird die state-Datei lokal bei der Ausführung von Opentofu ver- und entschlüsselt. Bestehende state-Dateien können dabei migriert werden:

        

terraform {
  encryption {
    key_provider "pbkdf2" "my_passphrase" {
      passphrase = "" # Enter a passphrase here
    }

    method "aes_gcm" "my_method" {
      keys = key_provider.pbkdf2.my_passphrase
    }

    state {
      method = method.aes_gcm.my_method
      fallback{} # Remove after the migration is complete.
    }
  }
}

Die passphrase muss natürlich nicht direkt im Code stehen, sondern kann auch Terraform-typisch über eine Umgebungsvariable übergeben werden. AWS-Nutzer können den AWS Key Management Service integrieren(öffnet im neuen Fenster) , um die passphrase in der Cloud verwalten zu lassen. Dies ist ein anderer Ansatz als die von Hashicorp angebotene Verschlüsselung in S3-Buckets, da sie auch lokal erfolgt:

        

terraform {
  encryption {
    key_provider "aws_kms" "basic" {
      kms_key_id = "a4f791e1-0d46-4c8e-b489-917e0bec05ef"
      region = "us-east-1"
      key_spec = "AES_256"
    }
  }
}

Generell liegt der Vorteil in einer lokalen Verschlüsselung gegenüber einer Cloud-basierten serverseitigen Verschlüsselung in der Verschiebung des Angriffsvektors. Sollte ein von der Cloud akzeptierter Zugriff auf ein serverseitig verschlüsselten Bucket gelingen, kann der state letztlich entschlüsselt heruntergeladen werden. Bei einer lokalen Verschlüsselung ist die state-Datei auch bei einem authentifizierten Zugriff weiterhin verschlüsselt.

Sollte es Probleme beim Einsatz der Verschlüsselung geben, wird auch eine Rückmigration zu einer unverschlüsselten state-Datei offiziell unterstützt. Es empfiehlt sich, bei Experimenten mit der Verschlüsselung, vorab die aktuelle state-Datei zu sichern, zum Beispiel über den Befehl " opentofu state pull ᐳ state.backup ". Auch wenn OpenTofu 1.7 als stabile Version veröffentlicht wurde, sollten gerade größere Projekte mit Vorsicht migriert werden.

Immerhin ist es recht einfach möglich, vor der Migration ein Backup durchzuführen, und durch Befehle wie "terraform/tofu plan" vor der Ausführung sich über Änderungen an der Infrastruktur zu informieren und gegebenenfalls zeitnah auf die ursprüngliche Terraform-Version zurück zu wechseln.

Zusammenfassung

Mit der Einführung von state encryption zeigt sich Opentofu als ernstzunehmende Alternative zum offiziellen Terraform. Während bisher vor allem die Lizenzpolitik von Hashicorp als Hauptargument für einen Umstieg für Teams vielleicht nicht unbedingt schlagkräftig genug war, ist die Möglichkeit einer kostenfreien, sicheren Verschlüsselung des states ein gewichtiges Argument für Opentofu aus Sicherheitsperspektive.

Opentofu muss als Fork und drop-in replacement der offiziellen Terraform-Version vom Funktionsumfang zeitlich nachhängen. Mit der Einführung eigener Features ändert sich die Perspektive auf die freie Alternative. Es wird sich zeigen, ob Hashicorp die eigene Strategie überdenken und zumindest in Sachen state encryption eine ähnliche Funktionalität auch frei verfügbar machen wird. Es wäre ein positiver Einfluss des freien Opentofu-Projekts auf seinen Ursprung.

Caspar Clemens Mierau betreut freiberuflich seit 25 Jahren große und kleine IT-Infrastrukturen für Kunden wie ResearchGate, Superlist, Versicherungen, Moviepilot, MTV und die Software AG. Nebenberuflich promoviert er im Bereich Medien- und Kulturwissenschaft zur Geschichte des Programmierenlernens um 1970 und ist in diverse Podcasts und Blogs involviert.


Relevante Themen