Sensible Daten verschlüsseln mit Ansible-Vault

Datum

Wenn man mit Ansible neue Benutzer anlegt und diesen auch gleich ein entsprechendes Passwort mit einrichten möchten, so werden diese normalerweise im Klartext in das entsprechende Playbook eingetragen.

Das ist nicht immer wünschenswert, z.B. wenn das entsprechende Playbook im Gitlab der Firma liegt und jeder der einen Zugang dazu hat diese Informationen einsehen kann.
Ansible bietet mit der Funktion Ansible-Vault die Möglichkeit an einzelne Passagen oder auch ganze Playbooks mit AES256 zu verschlüsseln.

Verschlüsseln einer Datei mit sensiblen Inhalt

Um nun einen Benutzer mit Passwort anzulegen, wobei das Passwort per Ansible-Vault verschlüsselt werden soll, legen wir eine rudimentäre Dateistruktur an:

└── roles
        └── users
        ├── tasks
        │   └── main.yml
        └── vars
            └── main.yml

Hierbei enthält die Datei roles/users/vars/main.yml die sensiblen Daten (Passwörter) und wird verschlüsselt.
Um die Datei zu verschlüsseln gibt es mehrere Möglichkeiten:

Erstellen einer verschlüsselten Datei

Sofern die entsprechende Datei noch nicht vorhanden ist, kann man diese direkt verschlüsselt erstellen.
Hierzu verwendet man:

$ ansible-vault create roles/users/vars/main.yml
New Vault password:
Confirm New Vault password:

nachdem man das Passwort für die Verschlüsselung eingegeben hat öffnet sich der voreingestellte Editor und man kann hier die gewünschten Eingaben tätigen.

Verschlüsseln einer vorhandenen Datei

Möchte man eine bereits vorhandene Datei verschlüsseln verwendet man:

$ ansible-vault encrypt test.yml
New Vault password: 
Confirm New Vault password: 
Encryption successful
$ cat test.yml 
$ANSIBLE_VAULT;1.1;AES256
63346563343436636266346636383463656635666565346634633336633638353931613635643062
3030376533376237313939653234323237393063316263350a656463616163653366626162326632
39633137333833306430383633623030653364303165313962346163613733353535396130396535
6535643861646565380a313539633839323434326262323630616539613137323531653635633134
36666231643932656266663662316166373462613135323463383964636135653865333439616236
30333033396465363530663337386336643839656431393137613038363264326136356461666535
38353032633439346430343065643165383138653662356234353464326337346465636163393036
34363262663736333661633632316461303538386162313631633132333436333532386133613434
63333062363366613965356566373333636133643663356236366663306235663733633834373762
38663438343338373334366635636566356237303462326463366466636331316661643063303131
30373338653665346532353738653437623464396434643232663861356262303637343332653461
37613831306439393730393532383332343838653662633636636137343533376661613531616337
37356561393261636138646364363166383466393033363362373462653161323462326433313062
30353536383261616533363133393266353362623166366162376435393264646465633032376265
66323565636235353266353636386265326236376665653734313531363736616464336563303434
63656432356435343264663163326435303562313630373461653733303137353639643766653432
64656232646462366366303933386635343665653030366634643561306133313232333063373334
36336461343633326137376435643436343935613139656435316436666638666161363532626139
61663732353739663937353030653565343234303033383937643862646432386437653733363364
38336464653330396361323964363263343662373062326439333064386262646465623232333661
63383530393065323839656130356531383163656239386465393039323536326466363162616337
38613738373464343738346132643634353761313162346334613938633765373361633861356235
66386366396238333535643138313437643366383834383536613634373638313661366663666135
64396533343563306437366464373232393139623337666234663365393238316430323632336632
38643434353461376637376630646339613766613662323065383035323534393464316338316563
37346666333762366365323635326362303136393333306135353365613737316334343638353764
34333536666166363932633137396631376237356139623762353261616538633264333135373062
36373963646366376634336664313030633532373166363636366239646334343435623666343730
61366631323537393839313337326237386137346231353561303734663833626631633530353331
6132613838313237656637623832666637653030326231303365
Bearbeiten einer verschlüsselten Datei

Um eine bereits verschlüsselte Datei zu bearbeiten verwendet man:
ansible-vault edit <Dateiname>

Inhalt einer verschlüsselten Datei anzeigen lassen

Die allgemeine Syntax um sich eine per ansible-vault verschlüsselte Datei anzeigen zu lassen lautet:
ansible-vault view <name>.yml

Ändern des Passwortes
Will man das bestehende Verschlüsselungspasswort ändern verwendet man die Option rekey:
$ ansible-vault rekey test.yml 
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful

Hierbei gibt man als erstes das bestehende Passwort ein und dann das neue.

Ausführen des Playbooks

Wenn man nun das entsprechende Playbook ausführen oder auch nur die Syntax checken möchten, muss man immer den Parameter --ask-vault-pass anhängen um das Vault-Passwort zum entschlüsseln im Terminal einzugeben.
Alternativ kann man sein Vault-Passwort zum entschlüsseln auch in einer Datei ablegen und diese per
--vault-password-file=<Pfad zur Datei> angeben.

vault-id

Seit der Ansible Version 2.4 wird angeraten anstatt --vault-password-file=<Pfad zur Datei>
lieber
--vault-id /Pfad/zur/vault-passwort-datei
zu verwenden.
Möchte man das Passwort zur Entschlüsselung lieber im Terminal eingeben verwendet man:

--vault-id @prompt

Des weiteren kann auch mit Labels gearbeitet werden:

--vault-id dev@dev-password

Um bei der Verschlüsselung ein Label mit anzugeben verwendet man:

ansible-vault encrypt --vault-id dev@password 'foooodev' --name 'the_dev_secret' <name>.yml

Es können mit vault-id auch mehrere Passwörter angegeben werden.

ansible-playbook --vault-id dev@dev-password --vault-id prod@prompt <name>.yml

Verschlüsseln eines Strings

Möchte man nicht das gesamte Playbook verschlüsseln sondern nur die sensiblen Daten, so kann man dies mit der Option encrypt_string realisieren.

$ ansible-vault encrypt_string 'das sind sensible Daten!' --name 'ein_string'
New Vault password: 
Confirm New Vault password: 
ein_string: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          34663539303332636437646535383630393264663232666135383632336265663335363166643066
          3631363433343533366232303131343664646232636662340a316661303038343266353861636137
          35633630393430393063653139633565373937316363356232343064303835646665343861393964
          3135336539613339340a313965336430313461653933623632343665646439616663323462356139
          64663335333661623736616438336431363463623365356439306637356438613162
Encryption successful

Dies kann man nun an die entsprechende Stelle in das Playbook einsetzen.

[Hinweis] Verwenden von Passwort-Hashes

Man kann beim anlegen des Benutzer Passwortes auch direkt einen Hash angeben. Auf die Weise lässt sich das Passwort auch unkenntlich machen.

Um den Hash für das Passwort zu erzeugen verwendet man das Tool mkpasswd, welches unter Debian/Ubuntu z.B. im Paket whois enthalten ist.

$ mkpasswd --method=SHA-512
Passwort: 
$6$zrRxxO/BP$b3q6nsvVVzyKJ3DmFKcM2QVjOL2nhnB3ks74CU3yyyawpIXN93fqwQBUxewnvsr7BkH0MQifLc6fher3DDFke0

Diesen Wert kann man nun direkt als Variable in die entsprechenden Ansible-Dateien eintragen:

$ cat vars.yml
---
admin_password: $6$zrRxxO/BP$b3q6nsvVVzyKJ3DmFKcM2QVjOL2nhnB3ks74CU3yyyawpIXN93fqwQBUxewnvsr7BkH0MQifLc6fher3DDFke0
deploy_password: $6$FZ1qePd8qaK8Hd$a4jz8qIr2ekKAaDbKN8eT/UZEPWd9XBwtVLOC9ppYUkGUirg5qUcneO6RTZUJxe1xX/Pw2atLePy

Autor
Kategorien Automatisierung, Ansible

PRTG Map