Die Geheimhaltung Ihrer Geheimnisse vor dem Zugriff Unbefugter hat oberste Priorität. Aber wie sichern Sie Ihre Geheimnisse genau? Auf einer lokalen Textdatei speichern? Ohne Verschlüsselung ist diese Option zu riskant. Warum verwenden Sie nicht Ansible Vault, um Ihre Variablen und Dateien zu verschlüsseln?
In diesem Tutorial erfahren Sie, wie Sie sensible Inhalte wie Ihre Passwörter oder Schlüssel mit Ansible Vault sichern können.
Lesen Sie weiter und halten Sie neugierige Blicke von Ihren Geheimnissen fern!
Voraussetzungen
Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben.
- A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
- Ansible auf Ihrem Rechner installiert.
Konfigurieren des Standard-Editors für Ansible Vault
Als Systemadministrator arbeiten Sie möglicherweise an verschiedenen Ansible-Playbooks, die verschiedene Benutzernamen und Passwörter für verschiedene Server enthalten. Diese Dateien können nicht im Klartext in das Versionskontrollsystem übernommen werden, da sie ungesichert sind. Aus diesem Grund ist Ansible Vault nützlich.
Ansible Vault ist darauf ausgelegt, in Ihren vorhandenen Arbeitsablauf integriert zu werden, um Ihre Daten in einer verschlüsselten Datei zu speichern. Bevor Sie jedoch Ihren ersten Ansible Vault erstellen, müssen Sie Ihren Standard-Editor für Ansible Vault einstellen.
1. Öffnen Sie Ihr Terminal und SSH zu Ihrem Rechner.
2. Öffnen Sie als Nächstes die Datei ~/.bashrc mit einem Texteditor. Die Datei ~/.bashrc ist ein Shell-Skript, das jedes Mal ausgeführt wird, wenn eine neue Terminal-Sitzung gestartet wird. Dieses Shell-Skript initialisiert eine interaktive Shell-Sitzung und definiert Umgebungsvariablen.
3. Fügen Sie am Ende der Datei ~/.bashrc die folgende Zeile hinzu, speichern Sie die Änderungen und beenden Sie den Editor.
Diese Zeile legt die EDITOR-Variable für den aktuell angemeldeten Benutzer fest. Die EDITOR-Variable stellt sicher, dass Ihr bevorzugter Texteditor jedes Mal verwendet wird, wenn Sie eine neue Terminal-Sitzung öffnen.
Sie können jeden anderen Texteditor Ihrer Wahl verwenden, aber in diesem Tutorial wird der Nano-Texteditor verwendet.

4. Führen Sie abschließend die folgenden Befehle aus, um die Änderungen (source) ohne erneutes Ab- und Anmelden anzuwenden und Ihren aktuellen Standardtexteditor (echo) zu drucken.
Überprüfen Sie, ob die EDITOR-Variable wie unten gezeigt auf Ihren bevorzugten Editor festgelegt ist.

Erstellen und Verschlüsseln Ihrer ersten Ansible-Vault
Sie haben Ihren Standard-Tresoreditor festgelegt, also ist es Zeit, Ihren ersten Tresor zu erstellen. Sie werden eine Datei erstellen und verschlüsseln, die sensible Informationen wie Benutzernamen, Passwörter, geheime Zugriffsschlüssel usw. enthält.
Sie werden den Befehl ansible-vault ausführen, die Hauptschnittstelle für die Interaktion mit Ansible Vaults.
1. Führen Sie den folgenden Befehl aus, um die Datei secret.yml zu erstellen. Ansible verwendet YAML, ein menschenlesbares Format im Vergleich zu anderen Datenformaten wie JSON.
Sie werden aufgefordert, ein Passwort für die Datei einzugeben und zu bestätigen. Sie werden dieses Passwort später verwenden, um die Datei secret.yml zu verschlüsseln und zu entschlüsseln. Wählen Sie also ein starkes Passwort, an das Sie sich erinnern können.

2. Nachdem Sie das Passwort des Tresors festgelegt haben, öffnet Ihr Standard-Texteditor eine leere Datei. Geben Sie sensible Informationen ein, die Sie in der Datei speichern möchten, speichern Sie sie und schließen Sie den Editor.
In diesem Tutorial werden die Variablen aws_access_key und aws_secret_key in der Datei secret.yml gespeichert. Zu diesem Zeitpunkt verschlüsselt Ansible die Datei secret.yml, und niemand außer Ihnen kann den Inhalt des Tresors lesen, es sei denn, er kennt das Passwort des Tresors.

3. Führen Sie den Befehl cat aus, um zu versuchen, den Inhalt der Datei secret.yml ohne das Passwort anzuzeigen.
Sie können überprüfen, ob der Inhalt der Datei verschlüsselt ist, wenn Sie zufällige Zahlen sehen, wie unten gezeigt. Der $ANSIBLE_VAULT;1.1;AES256-Header oben in der Datei zeigt an, dass die Datei mit Ansible Vault unter Verwendung des AES256-Algorithmus verschlüsselt ist.
Der Advanced Encryption Standard (AES) ist ein symmetrischer Algorithmus, der denselben Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwendet.

Verschlüsselung vorhandener Dateien
Sie haben eine Datei von Grund auf erstellt, die automatisch verschlüsselt wird. Aber wie sieht es mit der Verschlüsselung vorhandener Dateien aus? Ansible bietet auch den Unterbefehl encrypt an, um eine bestimmte Datei zu verschlüsseln. Um zu sehen, wie man eine vorhandene Datei verschlüsselt, verschlüsseln Sie eine spezifische Datei, die Ansible-Variablen enthält.
Führen Sie den folgenden Befehl aus, um eine Datei (vars.yml
) zu verschlüsseln.
Wie beim ersten Mal, als Sie die Datei secret.yml erstellt haben, werden Sie aufgefordert, ein Passwort für die Datei vars.yml anzugeben.
Der Standard-Editor wird dieses Mal nicht geöffnet, da die Datei vars.yml bereits existiert. Stattdessen erhalten Sie die Meldung Verschlüsselung erfolgreich, die anzeigt, dass Ansible die Datei verschlüsselt hat, wie unten gezeigt.

Führen Sie nun den folgenden Befehl aus, um zu überprüfen, ob Ansible die Datei vars.yml verschlüsselt hat.

Entschlüsseln von Daten aus dem Ansible-Vault
Sie haben gesehen, wie man Dateien verschlüsselt, um sie sicher zu machen. Aber wenn Sie den Inhalt Ihrer Dateien anzeigen müssen, wie entschlüsseln Sie Ihre Dateien? Das Entschlüsseln einer Datei ist nützlich, wenn Sie eine verschlüsselte Datei bearbeiten oder deren Inhalt lesen möchten, ohne jedes Mal das Passwort eingeben zu müssen. Und der Ansible-Befehl decrypt wird Ihnen dabei helfen.
1. Führen Sie den folgenden Befehl aus, um die Datei secret.yml zu entschlüsseln.
Der Befehl „decrypt“ erwartet den Pfad einer verschlüsselten Datei als einzigen Argument.
Geben Sie das Passwort für die Datei ein, und der Inhalt der Datei wird entschlüsselt und im Klartext auf die Festplatte geschrieben.

2. Führen Sie anschließend den Befehl „cat“ aus, um den entschlüsselten Inhalt der Datei secret.yml anzuzeigen.
Sie können unten den Inhalt der Datei secret.yml ohne Verschlüsselung auf dem Terminal gedruckt sehen. Zu diesem Zeitpunkt können Sie beliebige Zeilen in der Datei hinzufügen, bearbeiten oder löschen, wie Sie möchten.

3. Führen Sie abschließend den folgenden Befehl aus, um die Datei secret.yml zu verschlüsseln und ein Passwort bereitzustellen, um den Inhalt der Datei sicher zu halten.

Aktualisieren des Passworts des Ansible Vault
Sie haben gesehen, dass Sie jedes Mal ein Passwort eingeben müssen, wenn Sie Dateien verschlüsseln und entschlüsseln. Aber vielleicht möchten Sie nur das Passwort der Datei aktualisieren, ohne die Datei zu entschlüsseln. Wenn ja, müssen Sie den Befehl rekey
verwenden. Mit diesem Befehl können Sie das Passwort Ihrer Datei nach Belieben ändern.
Führen Sie den folgenden Befehl aus, um das Passwort für die Datei secret.yml
zu aktualisieren.
Der Befehl „rekey“ nimmt den Pfad einer verschlüsselten Datei als sein einziges Argument an.
Geben Sie das aktuelle Passwort für die Datei gefolgt vom neuen Passwort wie unten gezeigt an.
An diesem Punkt wird das alte Passwort nicht mehr funktionieren, um die Datei zu entschlüsseln.

Führen Sie nun den unten stehenden Befehl aus, um zu versuchen, die secret.yml
zu entschlüsseln.
Geben Sie das alte Passwort ein, wenn Sie dazu aufgefordert werden, und Sie sehen eine Fehlermeldung, die besagt, dass die Entschlüsselung fehlgeschlagen, wie unten gezeigt. Diese Ausgabe bestätigt, dass das Passwort für die Datei erfolgreich aktualisiert wurde.

Verwenden von sicheren Daten in Playbooks und Modulen
Sie haben gesehen, dass das Ausführen von Befehlen zum Verschlüsseln und Entschlüsseln von Dateien funktioniert. Wenn Sie jedoch den Prozess sicher für Ihre Anwendung automatisieren möchten, müssen Sie Playbooks und Module verwenden.
1. Öffnen Sie die Ansible-Konfigurationsdatei (~/.ansible.cfg) in Ihrem Editor, die die Einstellungen für Ansible enthält.
Kopieren und fügen Sie den folgenden Code am Ende der Datei ~/.ansible.cfg ein, speichern Sie die Änderungen und schließen Sie den Editor. Dieser Code teilt Ansible mit, dass es nach der Inventardatei (~/.ansible-hosts) suchen soll.
2. Öffnen Sie als Nächstes die Datei ~/.ansible-hosts, die das Inventar der Hosts enthält, die Ihr Ansible-Verwaltungsnode verwalten kann.
Füllen Sie die Datei ~/.ansible-hosts mit der folgenden Codezeile aus, speichern Sie die Änderungen und schließen Sie die Datei. Dieser Code teilt Ansible mit, dass es den localhost über den lokalen Verbindungstyp verwalten kann.
3. Führen Sie den unten stehenden Befehl aus, um eine neue verschlüsselte Datei zu erstellen. Sie können die Datei nach Belieben benennen, aber in diesem Tutorial wird die Datei als helloworld.yml bezeichnet.

Füllen Sie den folgenden Code in die Datei helloworld.yml ein, speichern Sie die Änderungen und schließen Sie den Editor.
Dieser Code ist ein grundlegendes Ansible-Playbook, das die Hello World-Nachricht auf allen Hosts in Ihrer Inventarliste ausgibt. Das Symbol — oben im Codeblock kennzeichnet den Beginn eines YAML-Dokuments.
4. Führen Sie abschließend den unten stehenden ansible-playbook-Befehl mit den Optionen –ask-vault-pass aus, um das Helloworld.yml-Playbook auf allen Hosts in Ihrem Inventar auszuführen.
Geben Sie das Passwort für die Datei helloworld.yml ein, wenn Sie dazu aufgefordert werden. Wie Sie unten sehen können, war der Ablauf Ihres Playbooks erfolgreich.
- ok=2 – zeigt an, dass beide Ihrer Aufgaben erfolgreich ausgeführt wurden.
- changed=1 – zeigt an, dass Ihre Aufgabe eine Änderung am Zustand Ihres Systems vorgenommen hat. In diesem Fall hat es eine Hello World-Nachricht in die Shell geschrieben.
- unreachable und failed sind beide 0 – zeigt an, dass keine Hosts während des Ablaufs unerreichbar oder fehlgeschlagen waren.

Verwenden von Ansible Vault mit einer Passwortdatei
Während das manuelle Eingeben eines Passworts bei der Ausführung von einmaligen Aufgaben funktioniert, ist es für den praktischen Einsatz in der realen Welt nicht praktikabel.
A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.
1. Führen Sie den unten stehenden Befehl aus, um das Ansible Vault-Passwort in einer Datei namens .vault_pass zu speichern. Ersetzen Sie my_vault_password durch Ihr tatsächliches Vault-Passwort.
2. Führen Sie anschließend jeden Befehl unten aus, um den Besitz (chown) der Datei auf root zu ändern und die Berechtigungen der Datei .vault_pass zu ändern. Diese Befehle stellen sicher, dass nur Sie (der Root-Benutzer) die Datei lesen und schreiben können.
3. Führen Sie abschließend den unten stehenden ansible-playbook-Befehl aus, gefolgt von der Option –vault-password-file, um ein Playbook (helloworld.yml) unter Verwendung einer Passwortdatei (.vault_pass) auszuführen.
Beachten Sie unten, dass Ansible das Playbook ohne Aufforderung nach dem Passwort für die verschlüsselte Datei ausgeführt hat.

Abschluss
In diesem Tutorial haben Sie gelernt, wie Sie Ansible Vault zum Verschlüsseln und Entschlüsseln sensibler Daten für Ansible-Playbooks und Aufgaben verwenden. Sie haben das Ansible Vault-Passwort an einem sicheren Ort mithilfe einer Passwortdatei gespeichert. Dieses Verhalten ist praktisch, um weniger Benutzereingriffe bei der Ausführung eines Playbooks zu ermöglichen.
Mit diesem neu gewonnenen Wissen können Sie jetzt vertrauensvoll sensible Daten verschlüsseln und Ihre Spielpläne mit anderen teilen, ohne sich um die Sicherheit Ihrer Daten sorgen zu müssen.
Wenn Sie LastPass zur Passwortverwaltung verwenden, warum nicht Ihr Ansible Vault-Passwort in LastPass speichern und es automatisch von Ansible abrufen lassen, wenn nötig?