Terraform unterstützt das Hinzufügen einer zusätzlichen Datei mit Variablen während des Aufrufs.
Dokumentation: https://www.terraform.io/intro/getting-started/variables.html#from-a-file
Wir verwenden diese Funktion, um secrets.tfvars
bei jedem Aufruf von Terraform eine Datei bereitzustellen . Wir verwenden auch ein Skript, um den Befehl so zu verpacken, dass sein Aufruf konsistent ist und alle Teammitglieder nicht dieselben Fehler machen müssen. Der Wrapper wird .tfstate
vor einer Ausführung mit S3 synchronisiert und .tfstate
am Ende auf S3 zurückgesetzt. Ich höre auch von Leuten, die dasselbe mit dem in Consul gespeicherten Status tun und sogar eine Art Semaphor in Consul einfügen, um zu verhindern, dass zwei Leute gleichzeitig Terraform starten.
Wenn Sie vermeiden, einen Standardwert in einer variables.tf
Datei festzulegen, wird der Benutzer gezwungen, den Wert einzugeben. Sie kann entweder manuell oder mit der -var-file
oben beschriebenen Befehlsoption eingegeben werden . Wenn Sie keine Standardeinstellungen für Ihre Geheimnisse festlegen, können Sie Änderungen erzwingen, die eine Änderung der Geheimnisse erfordern.
Die secrets.tfvars
Datei ist eine symbolische Verknüpfung zu einer der Dateien mit Geheimnissen, die nicht in der Versionskontrolle gespeichert sind. Wir haben mehrere, je eine pro - Umgebung, wie so secrets-prod.tfvars
, secrets-dev.tfvars
, secrets-stg.tfvars
usw ...
Eine noch bessere Methode wäre, diese geheimen Dateien während des Wrapper-Skripts auf der Grundlage von Daten in Vault oder auf andere Weise zu generieren, um Geheimnisse freizugeben. Da sich derzeit das Format von Geheimnissen oder Geheimnissen selbst ändert, müssen wir es dem Team außerhalb des Versionskontrollkanals mitteilen - und das funktioniert, um ehrlich zu sein, nicht immer gut. Aber Geheimnisse ändern sich selten.
Wir vermeiden es Terraform mit unseren Geheimnissen umzugehen. Selbst wenn Sie es schaffen, Geheimnisse durch eine var-Datei "secrtes.tfvars" zu injizieren, werden diese Geheimnisse in Ihrem Terraform- (Remote-) Status gespeichert.
Sie können Remote-Status-Dateien mit z. B. S3-Autorisierung schützen oder lokale Status-Dateien gitignore, aber wir haben uns entschieden, nicht auf diese Art von Schutz zu vertrauen.
quelle
Wenn Sie AWS nutzen, lesen Sie im AWS-Blog "Der richtige Weg, um Geheimnisse zu verwalten" von Segment.io . Wir empfehlen
chamber
, alle unsere Kunden für die Verwaltung von Geheimnissen zu nutzen. Dazu wird der AWS Systems Manager-Parameterspeicher (SSM) zusammen mit KMS-Schlüsseln verwendet. Dies stellt sicher, dass Geheimnisse im Ruhezustand (und während der Übertragung) verschlüsselt, mit IAM gesichert, mit CloudTrails überwacht und nur zur Laufzeit als Umgebungsvariablen verfügbar gemacht werden.Nachdem wir die Kammer konfiguriert und den KMS-Schlüssel eingerichtet haben, schreiben wir die Geheimnisse in den Parameterspeicher.
Verwenden Sie dann diese Geheimnisse, wenn Sie terraform aufrufen.
Dies setzt voraus, dass Sie eine Variable mit dem Namen
DB_USER
undDB_PASS
in Ihrem HCL-Code definiert haben.Zum Beispiel könnten Sie dies hinzufügen
variables.tf
HINWEIS:
chamber
Umgebungsvariablen werden immer in Großbuchstaben exportiertWir bieten ein Terraform-Modul
terraform-aws-kms-key
an, das die Bereitstellung des KMS-Schlüssels vereinfacht. In unserer ausführlichen Dokumentation finden Sie Beispiele für die Verwendungchamber
mit mehreren Namespaces sowie für die Verwendung von chamber with terraform zur Verwaltung von Geheimnissen. In unserem vollständigen Referenzbeispiel finden Sie Informationen zur Bereitstellung von Kammerabhängigkeiten.Was
.tfstate
bringen Sie einen wirklich guten Punkt über die Existenz von Klartext - Geheimnisse in der Statusdatei auf. Daran führt kein Weg vorbei. Damit terraform Änderungen berechnen kann, um einen Plan zu erstellen, muss der Zustand "Vorher" und "Nachher" bekannt sein. Aus diesem Grund empfehlen wir die Verwendung eines verschlüsselten S3-Buckets mit obligatorischer Versionierung. Verwenden Sie dasterraform-aws-tfstate-backend
Modul, um einen Bucket und eine DynamoDB-Sperrtabelle gemäß den Best Practices bereitzustellen.quelle
Um Geheimnisse in .tf-Dateien zu importieren, können Sie auch eine externe Datenquelle verwenden . Dies könnte zB ein Skript sein, das Ihre Geheimnisse entschlüsselt.
quelle
Ich habe mir ein paar verschiedene Möglichkeiten angesehen, aber ich mochte besonders Git-Crypt, um etwas Ad-hoc zu tun, bevor ich etwas Größeres wie Vault implementierte.
quelle