Was sind Best Practices für die Strukturierung von Verschlüsselungsvariablen seit Ansible 2.3.0?

8

In diesem Dokument wird angegeben, dass es seit Ansible 2.3 möglich sein sollte, bestimmte !vault |Variablen mit einem Präfix zu verschlüsseln, anstatt eine Variable und Schlüssel in eine Tresordatei einzufügen und diese vollständig zu verschlüsseln.

notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue

Im Moment ist die Struktur wie folgt:

ansible/group_vars/testing/vars
ansible/group_vars/testing/vault

Wenn eine verschlüsselte Variable aus dem Tresor in das Verzeichnis vars verschoben und ausgeführt ansible-vault decrypt ansible/group_vars/testing/varswird, wird Folgendes zurückgegeben:

ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars

Diese Tresorvariable wird mit dem angegebenen Tresorgeheimnis entschlüsselt und als normale Variable verwendet. Die ansible-vault-Befehlszeile unterstützt stdin und stdout zum schnellen Verschlüsseln von Daten, die in Ihrem bevorzugten Editor zum Erstellen dieser vaultierten Variablen verwendet werden können. Sie müssen nur das! vault-Tag hinzufügen, damit sowohl Ansible als auch YAML sich der Notwendigkeit der Entschlüsselung bewusst sind. Die | ist ebenfalls erforderlich, da die Tresorverschlüsselung zu einer mehrzeiligen Zeichenfolge führt.

Fragen

  1. Sollten Variablen, die verschlüsselt werden müssen, einzeln über die Befehlszeile verschlüsselt werden?
  2. Was sind Best Practices zur Umstrukturierung der alten Ansible-Struktur? ZB die Tresordateien entfernen und alle verschlüsselten Vars in die Vars-Datei einfügen?
030
quelle

Antworten:

2

Nachdem ich in letzter Zeit ziemlich viel mit ansible vault gearbeitet habe (insbesondere was die Verschlüsselung betrifft und wie diese Dinge verschlüsselt werden können, ohne den Code unlesbar zu machen), habe ich in 2.3 kaum einen Anreiz gefunden, meine Gewohnheiten zu ändern.

Wenn ich eine Reihe von verschlüsselten Variablen oder Dateien haben möchte, halten Sie sie getrennt (ich stelle ihnen alle voran vault_) und belassen Sie es einfach dabei.

Einige Male habe ich die! Vault-Funktion verwendet, bin aber deutlich unbeeindruckt, da es einfacher zu sein scheint, nur sehr genau zu sagen, was aus einer Geheimdatei stammt und was nicht. Auf diese Weise macht niemand, der meine Stücke bearbeitet, Annahmen darüber, was sensible Daten sind und was nicht.

hvindin
quelle
1

Ich habe beschlossen, das ansible/group_vars/testingVerzeichnis zu entfernen und durch eine Datei zu ersetzen ansible/group_vars/testing, die die verschlüsselten Variablen enthält:

mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136

Anstatt zu laufen ansible-vault edit ansible/group_vars/testing/vault, könnte man die Werte, die verschlüsselt werden müssen, an ansible-vault weiterleiten, d printf mysecret | ansible-vault encrypt. H. Letzteres wird verschlüsselt mysecretund die Ausgabe könnte der ansible/group_vars/testingDatei hinzugefügt werden. Wann ausgeführt ansible-playbookwird, werden die verschlüsselten Variablen entschlüsselt, wenn die ansible Vault-Datei natürlich angegeben ist.

Wenn der verschlüsselte Wert debuggt werden muss, kann der folgende Code verwendet werden:

- debug: msg="Decrypted value: {{ encrypted_var }}"
030
quelle