So verwenden Sie Vault zum Schutz vertraulicher Daten unter Ubuntu 16.04

Einführung

Ansible Vault ist eine Funktion, mit der Benutzer Werte und Datenstrukturen in Ansible-Projekten verschlüsseln können. Dies bietet die Möglichkeit, vertrauliche Daten zu schützen, die für die erfolgreiche Ausführung von Ansible-Spielen erforderlich sind, jedoch nicht öffentlich sichtbar sein sollten, z. B. Kennwörter oder private Schlüssel. Ansible entschlüsselt vault-verschlüsselte Inhalte automatisch zur Laufzeit, wenn der Schlüssel bereitgestellt wird.

In diesem Handbuch wird gezeigt, wie Ansible Vault verwendet wird, und es werden einige empfohlene Vorgehensweisen erläutert, um die Verwendung zu vereinfachen. Wir werden einen Ubuntu 16.04-Server für die Ansible-Steuerungsmaschine verwenden. Es werden keine Remote-Hosts benötigt.

Voraussetzungen

Um mitzumachen, benötigen Sie einen Ubuntu 16.04-Server mit einem Nicht-Root-Benutzer mit den Rechten "+ sudo +". Sie können unserer Ubuntu 16.04 Einrichtungsanleitung für Server folgen, um einen Benutzer mit den entsprechenden Berechtigungen zu erstellen.

Auf dem Server müssen Sie Ansible installieren und konfigurieren. Sie können unserem Tutorial unter installing Ansible on Ubuntu 16.04 folgen, um das entsprechende zu installieren Pakete.

Fahren Sie mit dieser Anleitung fort, wenn Ihr Server mit den oben genannten Anforderungen konfiguriert ist.

Was ist Ansible Vault?

Vault ist ein Mechanismus, mit dem verschlüsselte Inhalte transparent in Ansible-Workflows integriert werden können. Ein Hilfsprogramm namens "+ ansible-vault " schützt vertrauliche Daten, indem es sie auf der Festplatte verschlüsselt. Um diese Geheimnisse in reguläre Ansible-Daten zu integrieren, unterstützen sowohl die Befehle " ansible " als auch " ansible-playbook +" zum Ausführen von Ad-hoc-Aufgaben bzw. strukturierten Playbooks das Entschlüsseln von vault-verschlüsseltem Inhalt zur Laufzeit.

Vault wird mit einer Granularität auf Dateiebene implementiert, was bedeutet, dass Dateien entweder vollständig verschlüsselt oder unverschlüsselt sind. Es verwendet den Algorithmus "+ AES256 +", um eine symmetrische Verschlüsselung für ein vom Benutzer angegebenes Kennwort bereitzustellen. Dies bedeutet, dass zum Ver- und Entschlüsseln von Inhalten dasselbe Kennwort verwendet wird, was aus Sicht der Benutzerfreundlichkeit hilfreich ist. Ansible kann alle vault-verschlüsselten Dateien identifizieren und entschlüsseln, die beim Ausführen eines Playbooks oder einer Aufgabe gefunden werden.

Obwohl es gibt Vorschläge, dies zu ändern, können Benutzer zum Zeitpunkt dieses Schreibens nur ein einziges Kennwort an Ansible übergeben. Dies bedeutet, dass jede der beteiligten verschlüsselten Dateien ein Passwort teilen muss.

Nachdem Sie sich ein wenig mit der Funktionsweise von Vault vertraut gemacht haben, können Sie mit den von Ansible bereitgestellten Tools und der Verwendung von Vault in vorhandenen Workflows beginnen.

Festlegen des Ansible Vault-Editors

Bevor Sie den Befehl "+ ansible-vault " verwenden, sollten Sie Ihren bevorzugten Texteditor angeben. Bei einigen Befehlen von Vault wird ein Editor geöffnet, um den Inhalt einer verschlüsselten Datei zu bearbeiten. Ansible durchsucht die Umgebungsvariable " EDITOR ", um den von Ihnen bevorzugten Editor zu finden. Wenn dies nicht gesetzt ist, wird standardmäßig " vi +" verwendet.

Wenn Sie nicht mit dem Editor "+ vi" bearbeiten möchten, sollten Sie die Variable "+ EDITOR" in Ihrer Umgebung festlegen.

Um den Editor für einen einzelnen Befehl festzulegen, müssen Sie dem Befehl die Umgebungsvariablenzuweisung voranstellen:

EDITOR= ansible-vault

Um dies dauerhaft zu machen, öffnen Sie Ihre + ~ / .bashrc + Datei:

nano ~/.bashrc

Geben Sie Ihren bevorzugten Editor an, indem Sie eine "+ EDITOR +" - Zuweisung am Ende der Datei hinzufügen:

~ / .bashrc

export EDITOR=

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Quelle die Datei erneut, um die Änderung in der aktuellen Sitzung zu lesen:

. ~/.bashrc

Zeigen Sie die Variable "+ EDITOR +" an, um zu überprüfen, ob Ihre Einstellung angewendet wurde:

echo $EDITOR
Output

Nachdem Sie Ihren bevorzugten Editor festgelegt haben, können wir die mit dem Befehl "+ ansible-vault +" verfügbaren Vorgänge erläutern.

So verwalten Sie vertrauliche Dateien mit ansible-vault

Der Befehl "+ ansible-vault +" ist die Hauptschnittstelle zum Verwalten von verschlüsseltem Inhalt in Ansible. Dieser Befehl wird zum anfänglichen Verschlüsseln von Dateien und anschließend zum Anzeigen, Bearbeiten oder Entschlüsseln der Daten verwendet.

Neue verschlüsselte Dateien erstellen

Um eine neue mit Vault verschlüsselte Datei zu erstellen, verwenden Sie den Befehl + ansible-vault create +. Übergeben Sie den Namen der Datei, die Sie erstellen möchten. Um beispielsweise eine verschlüsselte YAML-Datei mit dem Namen "+ vault.yml +" zum Speichern vertraulicher Variablen zu erstellen, können Sie Folgendes eingeben:

ansible-vault create

Sie werden aufgefordert, ein Passwort einzugeben und zu bestätigen:

OutputNew Vault password:
Confirm New Vault password:

Wenn Sie Ihr Passwort bestätigt haben, öffnet Ansible sofort ein Bearbeitungsfenster, in dem Sie die gewünschten Inhalte eingeben können.

Geben Sie zum Testen der Verschlüsselungsfunktion einen Testtext ein:

vault.yml

Secret information

Ansible verschlüsselt den Inhalt, wenn Sie die Datei schließen. Wenn Sie die Datei überprüfen, wird anstelle der eingegebenen Wörter ein verschlüsselter Block angezeigt:

cat
Output$ANSIBLE_VAULT;1.1;AES256
65316332393532313030636134643235316439336133363531303838376235376635373430336333
3963353630373161356638376361646338353763363434360a363138376163666265336433633664
30336233323664306434626363643731626536643833336638356661396364313666366231616261
3764656365313263620a383666383233626665376364323062393462373266663066366536306163
31643731343666353761633563633634326139396230313734333034653238303166

Wir können einige Header-Informationen sehen, die Ansible verwendet, um zu wissen, wie mit der Datei umgegangen wird, gefolgt von den verschlüsselten Inhalten, die als Zahlen angezeigt werden.

Verschlüsseln vorhandener Dateien

Wenn Sie bereits eine Datei haben, die Sie mit Vault verschlüsseln möchten, verwenden Sie stattdessen den Befehl + ansible-vault encrypt +.

Zum Testen können wir eine Beispieldatei erstellen, indem wir Folgendes eingeben:

echo 'unencrypted stuff' >

Jetzt können Sie die vorhandene Datei verschlüsseln, indem Sie Folgendes eingeben:

ansible-vault encrypt

Sie werden erneut aufgefordert, ein Kennwort einzugeben und zu bestätigen. Anschließend bestätigt eine Nachricht die Verschlüsselung:

OutputNew Vault password:
Confirm New Vault password:
Encryption successful

Anstatt ein Bearbeitungsfenster zu öffnen, verschlüsselt "+ ansible-vault +" den Inhalt der Datei und schreibt ihn zurück auf die Festplatte, wobei die unverschlüsselte Version ersetzt wird.

Wenn wir die Datei überprüfen, sollten wir ein ähnliches verschlüsseltes Muster sehen:

cat
Output$ANSIBLE_VAULT;1.1;AES256
66633936653834616130346436353865303665396430383430353366616263323161393639393136
3737316539353434666438373035653132383434303338640a396635313062386464306132313834
34313336313338623537333332356231386438666565616537616538653465333431306638643961
3636663633363562320a613661313966376361396336383864656632376134353039663662666437
39393639343966363565636161316339643033393132626639303332373339376664

Wie Sie sehen, verschlüsselt Ansible vorhandene Inhalte auf die gleiche Weise wie neue Dateien.

Anzeigen verschlüsselter Dateien

Manchmal müssen Sie möglicherweise auf den Inhalt einer mit einem Tresor verschlüsselten Datei verweisen, ohne sie bearbeiten oder unverschlüsselt in das Dateisystem schreiben zu müssen. Mit dem Befehl "+ ansible-vault view +" wird der Inhalt einer Datei an standard out übergeben. Standardmäßig bedeutet dies, dass der Inhalt im Terminal angezeigt wird.

Übergeben Sie die mit dem Tresor verschlüsselte Datei an den Befehl:

ansible-vault view

Sie werden nach dem Kennwort der Datei gefragt. Nach erfolgreicher Eingabe wird der Inhalt angezeigt:

OutputVault password:
Secret information

Wie Sie sehen, wird die Passwortabfrage in die Ausgabe des Dateiinhalts eingemischt. Beachten Sie dies, wenn Sie in automatisierten Prozessen "+ ansible-vault view +" verwenden.

Bearbeiten verschlüsselter Dateien

Wenn Sie eine verschlüsselte Datei bearbeiten müssen, verwenden Sie den Befehl + ansible-vault edit +:

ansible-vault edit

Sie werden aufgefordert, das Kennwort der Datei einzugeben. Nach der Eingabe öffnet Ansible die Datei in einem Bearbeitungsfenster, in dem Sie die erforderlichen Änderungen vornehmen können.

Beim Speichern werden die neuen Inhalte erneut mit dem Verschlüsselungskennwort der Datei verschlüsselt und auf die Festplatte geschrieben.

Manuelles Entschlüsseln verschlüsselter Dateien

Verwenden Sie zum Entschlüsseln einer mit Tresor verschlüsselten Datei den Befehl + ansible-vault decrypt +.

Geben Sie den Namen der verschlüsselten Datei ein:

ansible-vault decrypt

Sie werden aufgefordert, das Verschlüsselungskennwort für die Datei einzugeben. Sobald Sie das richtige Passwort eingegeben haben, wird die Datei entschlüsselt:

OutputVault password:
Decryption successful

Wenn Sie die Datei anstelle der Tresorverschlüsselung erneut anzeigen, sollten Sie den tatsächlichen Inhalt der Datei sehen:

cat
OutputSecret information

Ihre Datei ist jetzt unverschlüsselt auf der Festplatte. Entfernen Sie alle vertraulichen Informationen, oder verschlüsseln Sie die Datei erneut, wenn Sie fertig sind.

Ändern des Kennworts für verschlüsselte Dateien

Wenn Sie das Kennwort einer verschlüsselten Datei ändern müssen, verwenden Sie den Befehl + ansible-vault rekey +:

ansible-vault rekey

Wenn Sie den Befehl eingeben, werden Sie zuerst aufgefordert, das aktuelle Kennwort der Datei einzugeben:

OutputVault password:

Nach der Eingabe werden Sie aufgefordert, ein neues Tresorkennwort auszuwählen und zu bestätigen:

OutputVault password:

Wenn Sie ein neues Passwort erfolgreich bestätigt haben, erhalten Sie eine Nachricht über den Erfolg des Neuverschlüsselungsprozesses:

OutputRekey successful

Auf die Datei sollte nun mit dem neuen Kennwort zugegriffen werden können. Das alte Passwort funktioniert nicht mehr.

Ansible mit Vault-verschlüsselten Dateien ausführen

Nachdem Sie Ihre vertraulichen Informationen mit Vault verschlüsselt haben, können Sie die Dateien mit den herkömmlichen Tools von Ansible verwenden. Die Befehle "+ ansible " und " ansible-playbook +" wissen beide, wie mit dem richtigen Passwort geschützte Dateien entschlüsselt werden. Abhängig von Ihren Anforderungen gibt es verschiedene Möglichkeiten, Kennwörter für diese Befehle bereitzustellen.

Um mitzumachen, benötigen Sie eine Tresor-verschlüsselte Datei. Sie können eine erstellen, indem Sie Folgendes eingeben:

ansible-vault create secret_key

Wählen und bestätigen Sie ein Passwort. Füllen Sie die gewünschten Dummy-Inhalte aus:

geheimer Schlüssel

Speichern und schließen Sie die Datei.

Wir können auch eine temporäre "+ hosts +" - Datei als Inventar erstellen:

nano hosts

Wir werden nur den Ansible localhost hinzufügen. Um sich auf einen späteren Schritt vorzubereiten, werden wir ihn in die Gruppe "+ [Datenbank] +" einfügen:

Gastgeber

[database]
localhost ansible_connection=local

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Als nächstes erstellen Sie eine "+ ansible.cfg +" - Datei im aktuellen Verzeichnis, falls noch keine existiert:

nano ansible.cfg

Im Moment fügen Sie einfach einen Abschnitt "+ [Standardeinstellungen] +" und einen Punkt "Ansible" zu dem soeben erstellten Inventar hinzu:

ansible.cfg

[defaults]
inventory = ./hosts

Wenn Sie fertig sind, fahren Sie fort.

Verwenden einer interaktiven Eingabeaufforderung

Die einfachste Methode zum Entschlüsseln von Inhalten zur Laufzeit besteht darin, Ansible aufzufordern, die entsprechenden Anmeldeinformationen einzugeben. Sie können dies tun, indem Sie den Befehl "+ - ask-vault-pass " zu einem beliebigen " ansible " - oder " ansible-playbook +" -Befehl hinzufügen. Ansible fordert Sie zur Eingabe eines Kennworts auf, mit dem versucht wird, alle gefundenen vaultgeschützten Inhalte zu entschlüsseln.

Wenn wir beispielsweise den Inhalt einer mit einem Tresor verschlüsselten Datei auf einen Host kopieren müssen, können wir dies mit dem Modul "+ copy " und dem Flag " - ask-vault-pass +" tun. Wenn die Datei tatsächlich vertrauliche Daten enthält, möchten Sie höchstwahrscheinlich den Zugriff auf den Remote-Host mit Berechtigungs- und Eigentumsbeschränkungen sperren.

ansible  -bK -m copy -a 'src= dest=/tmp/ mode=0600 owner=root group=root'

Unsere Aufgabe gibt an, dass der Besitz der Datei in "+ root " geändert werden soll, sodass Administratorrechte erforderlich sind. Das Flag " -bK " weist Ansible an, das " sudo " - Kennwort für den Zielhost einzugeben, sodass Sie nach Ihrem " sudo +" - Kennwort gefragt werden. Sie werden dann nach dem Vault-Passwort gefragt:

OutputSUDO password:
Vault password:

Wenn das Kennwort angegeben wird, versucht Ansible, die Aufgabe unter Verwendung des Vault-Kennworts für alle gefundenen verschlüsselten Dateien auszuführen. Beachten Sie, dass alle Dateien, auf die während der Ausführung verwiesen wird, dasselbe Kennwort verwenden müssen:

Outputlocalhost | SUCCESS => {
   "changed": true,
   "checksum": "7a2eb5528c44877da9b0250710cba321bc6dac2d",
   "dest": "/tmp/secret_key",
   "gid": 0,
   "group": "root",
   "md5sum": "270ac7da333dd1db7d5f7d8307bd6b41",
   "mode": "0600",
   "owner": "root",
   "size": 18,
   "src": "/home/sammy/.ansible/tmp/ansible-tmp-1480978964.81-196645606972905/source",
   "state": "file",
   "uid": 0
}

Die Aufforderung zur Eingabe eines Kennworts ist sicher, kann jedoch insbesondere bei wiederholten Durchläufen mühsam sein und die Automatisierung behindern. Zum Glück gibt es einige Alternativen für diese Situationen.

Ansible Vault mit einer Kennwortdatei verwenden

Wenn Sie das Tresorkennwort nicht jedes Mal eingeben möchten, wenn Sie eine Aufgabe ausführen, können Sie Ihr Tresorkennwort zu einer Datei hinzufügen und während der Ausführung auf die Datei verweisen.

Zum Beispiel könnten Sie Ihr Passwort in eine + .vault_pass + Datei wie folgt schreiben:

echo '' > .vault_pass

Wenn Sie die Versionskontrolle verwenden, müssen Sie die Kennwortdatei zur Ignorierdatei Ihrer Versionskontrollsoftware hinzufügen, um ein versehentliches Festschreiben zu vermeiden:

echo '.vault_pass' >> .gitignore

Jetzt können Sie stattdessen auf die Datei verweisen. Das "+ - Vault-Passwort-Datei" -Flag ist in der Befehlszeile verfügbar. Wir könnten die gleiche Aufgabe aus dem letzten Abschnitt erledigen, indem wir Folgendes eingeben:

ansible  -bK -m copy -a 'src= dest=/tmp/ mode=0600 owner=root group=root'

Sie werden dieses Mal nicht zur Eingabe des Vault-Kennworts aufgefordert.

Passwortdatei automatisch lesen

Um überhaupt kein Flag angeben zu müssen, können Sie die Umgebungsvariable "+ ANSIBLE_VAULT_PASSWORD_FILE +" mit dem Pfad zur Kennwortdatei festlegen:

export ANSIBLE_VAULT_PASSWORD_FILE=./.vault_pass

Sie sollten nun in der Lage sein, den Befehl ohne das Flag "+ - vault-password-file" für die aktuelle Sitzung auszuführen:

ansible -bK -m copy -a 'src= dest=/tmp/ mode=0600 owner=root group=root'

Um Ansible auf den Speicherort der Kennwortdatei für mehrere Sitzungen aufmerksam zu machen, können Sie die Datei "+ ansible.cfg +" bearbeiten.

Öffnen Sie die lokale Datei "+ ansible.cfg +", die wir zuvor erstellt haben:

nano ansible.cfg

Legen Sie im Abschnitt "+ [Standardeinstellungen] " die Einstellung " vault_password_file +" fest. Zeigen Sie auf den Speicherort Ihrer Kennwortdatei. Dies kann ein relativer oder absoluter Pfad sein, je nachdem, welcher für Sie am nützlichsten ist:

ansible.cfg

[defaults]
. . .
vault_password_file = ./.vault_pass

Wenn Sie nun Befehle ausführen, die eine Entschlüsselung erfordern, werden Sie nicht mehr zur Eingabe des Tresorkennworts aufgefordert. Als Bonus wird "+ ansible-vault " nicht nur das Passwort in der Datei zum Entschlüsseln von Dateien verwenden, sondern es wird das Passwort angewendet, wenn neue Dateien mit " ansible-vault create " und " ansible-vault encrypt +" erstellt werden .

Das Passwort aus einer Umgebungsvariablen lesen

Möglicherweise haben Sie Bedenken, dass Sie Ihre Kennwortdatei versehentlich in Ihr Repository übertragen. Leider verfügt Ansible über eine Umgebungsvariable, die auf den Speicherort einer Kennwortdatei verweist, aber über keine, um das Kennwort selbst festzulegen.

Wenn Ihre Kennwortdatei jedoch ausführbar ist, wird sie von Ansible als Skript ausgeführt und die resultierende Ausgabe als Kennwort verwendet. In einem GitHub issue schlägt Brian Schwind vor, dass das folgende Skript zum Abrufen des Kennworts verwendet werden kann von einer Umgebungsvariablen.

Öffnen Sie Ihre + .vault_pass + Datei in Ihrem Editor:

nano .vault_pass

Ersetzen Sie den Inhalt durch das folgende Skript:

vault_pass
#!/usr/bin/env python

import os
print os.environ['VAULT_PASSWORD']

Machen Sie die Datei ausführbar, indem Sie Folgendes eingeben:

chmod +x .vault_pass

Anschließend können Sie die Umgebungsvariable + VAULT_PASSWORD + festlegen und exportieren, die für Ihre aktuelle Sitzung verfügbar ist:

export VAULT_PASSWORD=

Sie müssen dies zu Beginn jeder Ansible-Sitzung tun, was unpraktisch klingen kann. Dies schützt jedoch effektiv vor einer versehentlichen Eingabe Ihres Vault-Verschlüsselungskennworts, was schwerwiegende Nachteile haben kann.

Verwenden von Vault-verschlüsselten Variablen mit regulären Variablen

Ansible Vault kann zwar mit beliebigen Dateien verwendet werden, wird jedoch am häufigsten zum Schutz vertraulicher Variablen verwendet. Wir werden ein Beispiel durcharbeiten, um Ihnen zu zeigen, wie Sie eine reguläre Variablendatei in eine Konfiguration umwandeln, die Sicherheit und Benutzerfreundlichkeit in Einklang bringt.

Einrichten des Beispiels

Stellen Sie sich vor, Sie konfigurieren einen Datenbankserver. Als Sie die Datei "+ hosts " zuvor erstellt haben, haben Sie den Eintrag " localhost " in eine Gruppe mit dem Namen " database +" gestellt, um diesen Schritt vorzubereiten.

Datenbanken erfordern normalerweise eine Mischung aus sensitiven und nicht sensitiven Variablen. Diese können in einem "+ group_vars +" - Verzeichnis in einer nach der Gruppe benannten Datei zugewiesen werden:

mkdir -p group_vars
nano group_vars/database

Richten Sie in der Datei "+ group_vars / database in" einige Variablen ein. Einige Variablen, wie die MySQL-Portnummer, sind nicht geheim und können frei weitergegeben werden. Andere Variablen, wie das Datenbankkennwort, sind vertraulich:

group_vars / database

---
# nonsensitive data
mysql_port: 3306
mysql_host: 10.0.0.3
mysql_user: fred

# sensitive data
mysql_password:

Wir können testen, ob alle Variablen für unseren Host verfügbar sind, indem wir das Ansible-Debug-Modul und die Hostvars-Variable verwenden:

ansible -m debug -a 'var=hostvars[inventory_hostname]'
Outputlocalhost | SUCCESS => {
   "hostvars[inventory_hostname]": {
       "ansible_check_mode": false,
       "ansible_version": {
           "full": "2.2.0.0",
           "major": 2,
           "minor": 2,
           "revision": 0,
           "string": "2.2.0.0"
       },
       "group_names": [
           "database"
       ],
       "groups": {
           "all": [
               "localhost"
           ],
           "database": [
               "localhost"
           ],
           "ungrouped": []
       },
       "inventory_dir": "/home/sammy",
       "inventory_file": "hosts",
       "inventory_hostname": "localhost",
       "inventory_hostname_short": "localhost",




       "omit": "__omit_place_holder__1c934a5a224ca1d235ff05eb9bda22044a6fb400",
       "playbook_dir": "."
   }
}

Die Ausgabe bestätigt, dass alle von uns eingerichteten Variablen auf den Host angewendet werden. Unsere Datei "+ group_vars / database +" enthält derzeit jedoch alle unsere Variablen. Dies bedeutet, dass wir die Datei entweder unverschlüsselt lassen können, was aufgrund der Datenbankkennwortvariablen ein Sicherheitsrisiko darstellt, oder alle Variablen verschlüsseln können, wodurch Probleme bei der Benutzerfreundlichkeit und der Zusammenarbeit entstehen.

Verschieben sensibler Variablen in Ansible Vault

Um dieses Problem zu lösen, müssen wir zwischen sensitiven und nicht sensitiven Variablen unterscheiden. Wir sollten in der Lage sein, vertrauliche Werte zu verschlüsseln und gleichzeitig unsere unempfindlichen Variablen problemlos gemeinsam zu nutzen. Dazu werden wir unsere Variablen auf zwei Dateien aufteilen.

Es ist möglich, ein Variablenverzeichnis anstelle einer Ansible-Variablen file zu verwenden, um Variablen aus mehr als einer Datei anzuwenden. Wir können umgestalten, um diese Fähigkeit zu nutzen. Benennen Sie zuerst die vorhandene Datei von "+ database in" in "+ var" um. Dies wird unsere unverschlüsselte Variablendatei sein:

mv group_vars/database group_vars/vars

Erstellen Sie als Nächstes ein Verzeichnis mit demselben Namen wie die alte Variablendatei. Verschiebe die + vars + Datei in:

mkdir group_vars/database
mv group_vars/vars group_vars/database/

Wir haben jetzt ein Variablenverzeichnis für die Gruppe "+ database in" anstelle einer einzelnen Datei und wir haben eine einzelne unverschlüsselte Variablendatei. Da wir unsere vertraulichen Variablen verschlüsseln, sollten wir sie aus unserer unverschlüsselten Datei entfernen. Bearbeiten Sie die Datei + group_vars / database / vars +, um die vertraulichen Daten zu entfernen:

nano group_vars/database/vars

In diesem Fall möchten wir die Variable + mysql_password + entfernen. Die Datei sollte nun so aussehen:

group_vars / database / vars

---
# nonsensitive data
mysql_port: 3306
mysql_host: 10.0.0.3
mysql_user: fred

Erstellen Sie als Nächstes eine mit einem Tresor verschlüsselte Datei in dem Verzeichnis, das sich neben der unverschlüsselten Datei + vars + befindet:

ansible-vault create group_vars/database/vault

Definieren Sie in dieser Datei die vertraulichen Variablen, die sich früher in der Datei + vars + befanden. Verwenden Sie dieselben Variablennamen, stellen Sie jedoch die Zeichenfolge "+ vault_ +" voran, um anzugeben, dass diese Variablen in der vault-geschützten Datei definiert sind:

group_vars / database / vault

---
mysql_password:

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Die resultierende Verzeichnisstruktur sieht folgendermaßen aus:

.
├── . . .
├── group_vars/
│   └── database/
│       ├── vars
│       └── vault
└── . . .

Zu diesem Zeitpunkt sind die Variablen getrennt und nur die vertraulichen Daten werden verschlüsselt. Dies ist sicher, aber unsere Implementierung hat unsere Benutzerfreundlichkeit beeinträchtigt. Während unser Ziel darin bestand, sensible Werte zu schützen, haben wir auch die Sichtbarkeit der tatsächlichen Variablennamen unbeabsichtigt verringert. Es ist nicht klar, welche Variablen zugewiesen werden, ohne auf mehr als eine Datei zu verweisen, und obwohl Sie möglicherweise den Zugriff auf vertrauliche Daten während der Zusammenarbeit einschränken möchten, möchten Sie wahrscheinlich trotzdem die Variablennamen freigeben.

Um dies zu beheben, empfiehlt das Ansible-Projekt im Allgemeinen einen etwas anderen Ansatz.

Referenzieren von Vault-Variablen aus unverschlüsselten Variablen

Als wir unsere vertraulichen Daten in die Vault-geschützte Datei verschoben haben, haben wir den Variablennamen das Präfix "+ vault_ " vorangestellt (" mysql_password " wurde zu " vault_mysql_password "). Wir können die ursprünglichen Variablennamen (` mysql_password +`) wieder zur unverschlüsselten Datei hinzufügen. Anstatt diese direkt auf vertrauliche Werte zu setzen, können wir Jinja2-Vorlagenanweisungen verwenden, um auf die verschlüsselten Variablennamen in unserer unverschlüsselten Variablendatei zu verweisen. Auf diese Weise können Sie alle definierten Variablen anzeigen, indem Sie auf eine einzelne Datei verweisen. Die vertraulichen Werte bleiben jedoch in der verschlüsselten Datei erhalten.

Öffnen Sie zur Veranschaulichung die unverschlüsselte Variablendatei erneut:

nano group_vars/database/vars

Fügen Sie die Variable + mysql_password + erneut hinzu. Verwenden Sie dieses Mal die Jinja2-Vorlage, um auf die in der vault-geschützten Datei definierte Variable zu verweisen:

group_vars / database / vars

---
# nonsensitive data
mysql_port: 3306
mysql_host: 10.0.0.3
mysql_user: fred

# sensitive data
mysql_password:

Die Variable "+ mysql_password " wird auf den Wert der Variablen " vault_mysql_password +" gesetzt, die in der Tresordatei definiert ist.

Mit dieser Methode können Sie alle Variablen verstehen, die auf Hosts in der Gruppe "+ database " angewendet werden, indem Sie die Datei " group_vars / database / vars " anzeigen. Die sensiblen Bereiche werden durch das Jinja2-Template verdeckt. Das ` group_vars / database / vault +` muss nur geöffnet werden, wenn die Werte selbst angezeigt oder geändert werden müssen.

Sie können überprüfen, ob alle + mysql _ * + Variablen noch korrekt angewendet wurden, indem Sie die gleiche Methode wie beim letzten Mal anwenden.

ansible -m debug -a 'var=hostvars[inventory_hostname]'
Outputlocalhost | SUCCESS => {
   "hostvars[inventory_hostname]": {
       "ansible_check_mode": false,
       "ansible_version": {
           "full": "2.2.0.0",
           "major": 2,
           "minor": 2,
           "revision": 0,
           "string": "2.2.0.0"
       },
       "group_names": [
           "database"
       ],
       "groups": {
           "all": [
               "localhost"
           ],
           "database": [
               "localhost"
           ],
           "ungrouped": []
       },
       "inventory_dir": "/home/sammy/vault",
       "inventory_file": "./hosts",
       "inventory_hostname": "localhost",
       "inventory_hostname_short": "localhost",




       "omit": "__omit_place_holder__6dd15dda7eddafe98b6226226c7298934f666fc8",
       "playbook_dir": ".",

   }
}

Sowohl das "+ vault_mysql_password " als auch das " mysql_password +" sind zugänglich. Diese Vervielfältigung ist harmlos und wird Ihre Verwendung dieses Systems nicht beeinträchtigen.

Fazit

Ihre Projekte sollten alle Informationen enthalten, die für eine erfolgreiche Installation und Konfiguration komplexer Systeme erforderlich sind. Einige Konfigurationsdaten sind jedoch per Definition vertraulich und sollten nicht öffentlich zugänglich gemacht werden. In diesem Handbuch haben wir gezeigt, wie Ansible Vault vertrauliche Informationen verschlüsseln kann, damit Sie Ihre gesamten Konfigurationsdaten an einem Ort aufbewahren können, ohne die Sicherheit zu gefährden.