Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Geheimnisse aus dem Code heraushalten

Nach dieser Lektion: Ich kann ein Geheimnis aus OpenTofu-Dateien heraushalten und sagen, wo es trotzdem landet.

Lektion, 60 Min.10 BefehleOpenTofu-Lab: Infrastructure as Code mit Plan, Apply und State auf einer VM

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

BegriffWas er bedeutetBeispiel
Geheimnisein Wert, den sonst niemand sehen soll, etwa ein Schlüssel
Sensitivemarkiert, damit das Werkzeug den Wert am Bildschirm verbirgtsensitive = true
Umgebungsvariableein Wert, den die Shell an einen Befehl weitergibtTF_VAR_token
Statedie Datei, in der OpenTofu festhält, was es angelegt hat
Ignore-Dateieine 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

Befehl
mkdir -p ~/iac-demo/tresor && cd ~/iac-demo/tresor

Hier 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

Befehl
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.tf

Hier 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

Befehl
tofu init -no-color | grep successfully

Hier 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

Befehl
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

Befehl
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

Befehl
tofu output

Hier 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

Befehl
grep -c mond42 terraform.tfstate

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 Rohausgabe abfragen

Befehl
tofu output -raw gezeigt; echo

Hier 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

Befehl
printf '%s\n' 'terraform.tfstate' 'terraform.tfstate.backup' '*.tfvars' '.terraform/' > .gitignore

Hier 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

Befehl
printf '%s\n' 'locals {' '  zugangs_token = "mond42"' '}' > leck.tf; grep -nE '(token|geheimnis|passwort|schluessel)[a-z_]* *= *"' *.tf; rm leck.tf

Hier 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

Code: 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?

Über dieses Lab und seinen Quellcode: OpenTofu-Lab: Infrastructure as Code mit Plan, Apply und State auf einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.