Wir verwenden Ansible Vault , um Passwörter, private Schlüssel für Zertifikate usw. in unserem Ansible Playbook Git-Repository zu speichern. Alle unsere vorhandenen privaten Daten liegen in Textform vor, sodass wir sie in Variablen speichern können. Diese werden dann in Vorlagen oder mit dem content
Parameter des Kopiermoduls verwendet.
Jetzt haben wir eine Java KeyStore-Datei, die leider ein Binärformat hat. Als solches kann es nicht in einer Variablen gespeichert werden - oder zumindest weiß ich nicht, wie es geht. Was wäre der einfachste Weg, um unsere Datei ordnungsgemäß zu verschlüsseln, während sie in Git ruht, aber beim Ausführen verfügbar ist ansible-playbook
?
Was ich schon ohne Erfolg versucht habe:
- Codieren der Binärdatei in base64, Speichern der codierten Daten in einer Variablen und Verwenden des Vorlagenmoduls mit
{{base64_data | b64decode}}
. Führt zu vielenEF BF BD
Hex-Dumps der resultierenden Datei. Die drei Bytes codieren das Unicode-Ersetzungszeichen in UTF-8, sodass bei der Interpretation der Binärdaten als Text ein Problem auftritt. - Codieren der binären Datei in Base64, die codierten Daten in einer Variablen zu speichern und unter Verwendung des Kopiermoduls mit
content="{{base64_data | b64decode}}"
. Ansible beschwert sich mit "Eine Variable hat einen neuen Parameter in die Modulargumente eingefügt." Bei der Verwendung von einfachen Anführungszeichen anstelle von doppelten Anführungszeichen beschwert sich Ansible mit einer "Fehleranalyse-Argumentationszeichenfolge" und einer Kopie aller Binärdaten, die an das Terminal ausgegeben werden ...
Antworten:
Sie können dazu einen Shell-Befehl mit einer base64-Variablen verwenden.
Eric
quelle
Die Art und Weise, wie wir das für unser ansibles Setup tun, ist:
- Wir verschlüsseln einzelnes sensibles Material (eine kleine Teilmenge unseres Repositorys) mit https://www.agwa.name/projects/git-crypt/. - Wir alle verpflichten uns immer mit Git-Sign-Tags. - Wir überprüfen regelmäßig, ob nicht signierte Dateien vorhanden sind
Der Vorteil von Git-Crypt ist, dass die Verschlüsselung transparent ist, da sie auf Git-Filtern basiert. Außerdem können Sie Entwicklern Zugriff auf das Repository gewähren, ohne den verschlüsselten Inhalt zu beeinträchtigen (verschlüsselte Dateien werden ignoriert, wenn kein Entschlüsselungsschlüssel verfügbar ist).
quelle