Skip to main content

3 Tipps zum Umgang mit Drift durch manuelle Änderungen in Terraform

Artikel von
Headshot of Stephane Jourdan

Stephane Jourdan

feature synk iac terraform magenta

22. Mai 2020

0 Min. Lesezeit

Anmerkung der Redaktion: Dieser Beitrag erschien ursprünglich auf CloudSkiff.com. CloudSkiff wurde im Oktober 2021 Teil von Snyk.‹

Wie gehen Sie mit Drift durch manuelle Änderungen in Terraform um? Wenn jemand etwas manuell an der Infrastruktur ändert, wie gehen Sie in Terraform damit um und wie führen Sie beim nächsten Mal Terraform plan aus? Je nach Situation gibt es verschiedene Möglichkeiten, mit Drift durch manuelle Änderungen an Ihrer Infrastruktur in Terraform umzugehen.

Hier sind 3 Möglichkeiten:

  • Code manuell ändern, um Ihren State zu aktualisieren

  • Die neue bestehende Umgebung mit einem Tool rückwärts in Terraform-Code umwandeln

  • Bestimmte Teile Ihres neuen Codes mit dem Terraform-import-Unterbefehl importieren

1. Code manuell ändern, um Ihren State zu aktualisieren

Am besten beginnen wir mit einem Beispiel. Nehmen wir an, ein Teammitglied hat eine Sicherheitsgruppe manuell geändert, etwa indem es einen HTTP-Port für ein bestimmtes Subnetz geöffnet hat, und Sie entdecken dies beim nächsten terraform apply. (Das ist ein einfacher Fall.)

Nach dieser Aktion sehen Sie einen Unterschied in Ihrer terraform output (in CI oder auf Ihrem Laptop). Das bedeutet, dass Sie diesen Unterschied als Code-Snippet direkt in Ihren Terraform-Code aufnehmen und anwenden können. Im Grunde müssen Sie den Code also nach der Bereitstellung manuell hinzufügen. Wenn Sie das nächste Mal terraform apply ausführen, erkennt Terraform, dass dieser neue Eintrag im State fehlt (in unserem Beispiel die Freigabe von HTTP für ein Subnetz), und weist Ihren Cloud-Anbieter (zum Beispiel AWS) an, die Änderung vorzunehmen. AWS wird daraufhin zurückmelden: „Das ist bereits vorhanden.“

In diesem einfachen Fall erscheint der Unterschied nur in der TFstate-Datei, und Sie haben das Problem manuell behoben. Das ist ein wenig so, als würden Sie einen Konflikt bei einem Git-Merge lösen.

Die wichtigsten Schritte sind also:

  • Den fehlenden Code schreiben

  • Ihn pushen

  • Ihn anwenden

  • Die Abweichung verschwindet

  • Und der endgültige Zustand wird in der State-Datei aktualisiert

2. Die neue bestehende Umgebung rückwärts in Terraform-Code umwandeln

Bei einem deutlich komplexeren Fall, etwa einer vollständigen VM oder, noch schwieriger, einem vollständig manuell ausgeführten Kubernetes-Cluster mit 10.000 Knoten, werden Sie den Code natürlich nicht wie eben für einen sehr einfachen Fall manuell schreiben. Ich empfehle Ihnen ein Tool wie Terraformer oder Terraforming.

Solche Tools durchsuchen Ihre Cloud-Anbieter-Konten nach Ressourcen und Parametern. Sobald das Tool alle Parameter erfasst hat (nehmen wir als Beispiel eine VM: Festplatte, IP-Adresse, Betriebssystemtyp usw.), wandelt es diese Elemente in gültigen Terraform-Code um und erstellt aus dem Code einen TFState.

Terraformer stammt vom Waze-SRE-Team bei Google in Tel Aviv. Das Tool erledigt etwa 80 % der Arbeit, und Sie müssen nur noch hier und da ein paar Dinge anpassen.

Mit diesem Tool erhalten Sie also drei Elemente:

  • Den Code, den Sie gerade extrahiert haben

  • Eine bestehende manuelle Bereitstellung

  • Eine State-Datei

Das Problem ist nun, dass diese Elemente nicht wirklich in Ihr bestehendes Infrastruktur-Repository integriert sind. Darum geht es im nächsten Abschnitt: Wählen Sie aus, was Sie importieren.

3. Bestimmte Teile Ihres neuen Codes mit dem Terraform-import-Unterbefehl importieren

Sobald Ihr Code vorliegt, können Sie ihn mit dem Unterbefehl terraform import importieren und dabei genau auswählen, was Sie importieren.

Nehmen wir an, Sie haben manuell eine bestimmte IP-Adresse für einen alten Load Balancer eingerichtet. Die Produktion muss diese IP-Adresse jedoch weiterhin verwenden, und Sie möchten sicherstellen, dass sie in Terraform verwaltet wird. Sie können den entsprechenden Terraform-Code schreiben und die zugehörige ID in AWS importieren.

Das unterscheidet sich deutlich davon, einfach Code zu pushen und anzuwenden und anschließend zu prüfen, ob es auf der anderen Seite „funktioniert“. Sie haben diesen Code und wissen, dass er bei einer sofortigen Ausführung Duplikate erzeugen würde (in diesem konkreten Beispiel, weil es Hunderte von IP-Adressen mit einem Namen geben kann; beim vorherigen Beispiel mit der Sicherheitsgruppe war das anders, da nur ein Port 80 geöffnet werden kann).

In diesem Beispiel würde ich diese ganz bestimmte IP-Adresse mithilfe eines Import-Tools wie Terraformer definieren und in meinen bestehenden Code kopieren. Dann würde ich den Code nicht direkt anwenden, sondern ihn mit dem Unterbefehl terraform import importieren.

Hier sehen Sie ein Beispiel für den Befehl terraform import.

Terminal-Screenshot mit dem Terraform-Befehl `import --help` und den verfügbaren Optionen.
`import --help`-Befehl
Herangezoomtes Terminal mit Terraform-Hilfetext und Befehlen zum Importieren vorhandener Infrastruktur in den State.
Vergrößert

Abschließende Gedanken zum Umgang mit Drift durch manuelle Änderungen in Terraform

Je nach Situation empfehle ich Ihnen eine der folgenden drei Methoden, um manuelle Änderungen an Ihrer Infrastruktur mit Terraform zu verwalten:

  1. Schreiben Sie den Code und wenden Sie ihn bei kleinen Änderungen an, die nicht erneut importiert werden müssen. Lassen Sie ihn automatisch mit der State-Datei abgleichen.

  2. Importieren Sie Ihre neue Umgebung und wandeln Sie sie mit einem Tool wie Terraformer rückwärts in Terraform-Code um.

  3. Und/oder importieren Sie ganz gezielt einzelne Teile manuell mit dem Terraform-import-Unterbefehl.

Sichern Sie Ihren Terraform-Code

Snyk IaC schützt Ihre Terraform-Konfigurationen (sowie Kubernetes-, CloudFormation- und ARM-Vorlagen!) während der Entwicklung und bietet Ihnen Anleitungen zur Behebung, damit Sie Änderungen mergen und direkt weitermachen können. Sie können während des Schreibens testen, Änderungen in Ihren Git-Repositorys überwachen und Tests in Ihren Build-Pipelines vor der Bereitstellung automatisieren. Die Einrichtung eines kostenlosen Plans dauert nur wenige Minuten – eine Sicherheitsverletzung aufgrund einer IaC-Fehlkonfiguration kann hingegen lebenslangen Schaden anrichten. Registrieren Sie sich und schützen Sie Ihre Konfigurationen noch heute. In diesem Artikel erfahren Sie mehr darüber, wie Sie Konfigurationsdrift erkennen und verhindern.

Sichern Sie Ihre Infrastruktur an der Quelle

Snyk automatisiert die IaC-Sicherheit und Compliance in Workflows und erkennt abweichende sowie fehlende Ressourcen.

Weiterlesen

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

Blog

Evo ADS Govern Agent Behavior ist allgemein verfügbar: MCP-Nutzung unter Kontrolle bringen

Evo ADS Govern Agent Behavior ist jetzt allgemein verfügbar und startet mit MCP Governance. Entdecken, genehmigen, überwachen, protokollieren und blockieren Sie die MCP-Server-Nutzung in führenden KI-Coding-Agenten.

illustration hero ai
Blog

Was ist Agentic AppSec?

Erfahren Sie, wie Agentic AppSec fundierte, klar begrenzte und unabhängig überprüfte KI-Agenten einsetzt, um den Application-Security-Kreislauf zu steuern.