Der Schlüssel auf der Titelseite
Eine Studentin schiebt ein Projekt in ein öffentliches Repository. Eine Datei enthält einen Zugangsschlüssel, weil damit der erste Test lief.
Programme, die den ganzen Tag öffentliche Repositories lesen, finden ihn in wenigen Minuten. Ein Schlüssel in einer Datei kann von jedem benutzt werden und bleibt in der Historie, auch wenn die Datei geändert wird.
Am Ende dieser Lektion
Notiz
Ich kann ein Geheimnis aus OpenTofu-Dateien heraushalten und sagen, wo es trotzdem landet.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Geheimnis | ein Wert, den sonst niemand sehen soll, etwa ein Schlüssel | |
| Sensitive | markiert, damit das Werkzeug den Wert am Bildschirm verbirgt | sensitive = true |
| Umgebungsvariable | ein Wert, den die Shell an einen Befehl weitergibt | TF_VAR_token |
| State | die Datei, in der OpenTofu festhält, was es angelegt hat | |
| Ignore-Datei | eine Liste von Dateien, die die Versionsverwaltung übergeht | .gitignore |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Geheimnis gehört nicht in versionierte Dateien
Ein Wert in einer .tf-Datei wird mit dem Projekt gespeichert, in jeden Klon kopiert und in der Historie behalten. Ein Geheimnis wird OpenTofu also von außen gegeben.
Der übliche Weg ist eine Umgebungsvariable. Eine Variable namens token setzt man mit TF_VAR_token. Markiert man sie als sensitive, wird sie auf dem Bildschirm verborgen.
Einen Ordner anlegen und hineingehen
mkdir -p ~/iac-demo/tresor && cd ~/iac-demo/tresorHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Projekt schreiben, das ein Geheimnis annimmt
printf '%s\n' 'variable "token" {' ' type = string' ' sensitive = true' '}' '' 'resource "terraform_data" "anmeldung" {' ' input = var.token' '}' '' 'output "gezeigt" {' ' value = terraform_data.anmeldung.output' ' sensitive = true' '}' > main.tfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Den Ordner vorbereiten
tofu init -no-color | grep successfullyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Mit dem Geheimnis in der Umgebung planen
TF_VAR_token=mond42 tofu plan -no-color | grep -E "input|^Plan"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Es anwenden
TF_VAR_token=mond42 tofu apply -auto-approve -no-color | grep -E "Apply complete|gezeigt"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Ausgaben auflisten
tofu outputHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Sensitive verbirgt einen Wert nur
sensitive ändert nur, was ausgegeben wird. Der State hält jeden Wert weiterhin im Klartext, weil OpenTofu ihn beim nächsten Mal zum Vergleichen braucht.
Die State-Datei ist also so geheim wie das Geheimnis. Halten Sie sie aus der Versionsverwaltung heraus und bewahren Sie sie in echter Arbeit in einem verschlüsselten Speicher mit beschränktem Zugriff auf.
Zählen, wo der State den Wert hält
grep -c mond42 terraform.tfstateHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Rohausgabe abfragen
tofu output -raw gezeigt; echoHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, sensitive verschlüssele einen Wert. Das tut es nicht. Es verbirgt den Wert in Plan und Ausgabe, und wer den State liest oder tofu output -raw ausführt, sieht ihn trotzdem. Schützen Sie auch den State.
Eine Ignore-Datei hält den State heraus
Eine .gitignore listet Dateien, die die Versionsverwaltung nie aufnimmt. Vier Zeilen decken ein OpenTofu-Projekt ab: den State, seine Sicherung, jede .tfvars-Datei und den Ordner .terraform.
Lässt man eine weg, wird ein State mit einem Geheimnis hochgeschoben.
Eine Ignore-Datei schreiben
printf '%s\n' 'terraform.tfstate' 'terraform.tfstate.backup' '*.tfvars' '.terraform/' > .gitignoreHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Geheimnis einpflanzen und danach suchen
printf '%s\n' 'locals {' ' zugangs_token = "mond42"' '}' > leck.tf; grep -nE '(token|geheimnis|passwort|schluessel)[a-z_]* *= *"' *.tf; rm leck.tfHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Eine Suche nach Geheimnissen in Python
# Zeilen finden, die einem Geheimnis in der Datei selbst einen Wert geben.
zeilen = [
'region = "eu-west-2"',
'zugangs_token = "mond42"',
'zugangs_token = var.zugangs_token',
]
woerter = ["token", "geheimnis", "passwort", "schluessel"]
for nummer, zeile in enumerate(zeilen, 1):
name = zeile.split("=")[0].strip().lower()
wert = zeile.split("=")[1].strip()
if any(wort in name for wort in woerter) and wert.startswith('"'):
print("Zeile", nummer, "gibt", name, "einen Wert")
# Machen Sie die dritte Zeile zu einem Wert in Anführungszeichen und schauen Sie noch einmal.
Weiterführend: eine Variablendatei
Schreiben Sie die Zeile token = "sonne7" in eine Datei namens secret.tfvars. Führen Sie tofu plan -no-color -var-file=secret.tfvars | grep -E "input|^Plan" aus und löschen Sie die Datei danach.
Warum steht *.tfvars in der Ignore-Datei, und zeigt der Plan den neuen Wert?