¿Cuáles son las mejores prácticas para estructurar variables de cifrado desde Ansible 2.3.0?

8

Este documento indica que desde Ansible 2.3 debería ser posible encriptar ciertos vars usando un !vault |prefijo en lugar de colocar una variable y claves en un archivo de almacén y encriptarlo completamente.

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

Por el momento la estructura es la siguiente:

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

Cuando una variable cifrada se mueve de la bóveda al directorio vars y ansible-vault decrypt ansible/group_vars/testing/varsse ejecuta, devuelve:

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

Esta variable abovedada se descifrará con el secreto de la bóveda suministrada y se utilizará como una variable normal. La línea de comando ansible-vault admite stdin y stdout para cifrar datos sobre la marcha, que se pueden usar desde su editor favorito para crear estas variables abovedadas; solo tiene que asegurarse de agregar la etiqueta! vault para que tanto Ansible como YAML sean conscientes de la necesidad de descifrar. El | también es necesario, ya que el cifrado de bóveda da como resultado una cadena de varias líneas.

Preguntas

  1. ¿Deberían las variables que necesitan ser encriptadas, encriptarse una por una usando la línea de comando?
  2. ¿Cuáles son las mejores prácticas para reestructurar la antigua estructura de Ansible? Por ejemplo, ¿eliminar los archivos de bóveda y poner todos los vars cifrados en el archivo vars?
030
fuente

Respuestas:

2

Después de haber estado trabajando recientemente con Ansible Vault (específicamente con respecto a qué cifrar y cómo cifrar esas cosas sin hacer que el código sea ilegible), he encontrado muy pocos incentivos para cambiar mis hábitos en 2.3.

Si voy a tener una serie de variables o archivos encriptados, manténgalos separados (los prefijo con todos vault_) y déjelos así.

Algunas veces he usado la función! Vault, pero no me sorprendo, ya que parece más fácil ser muy explícito sobre lo que proviene y no proviene de un archivo de secretos. De esa forma, nadie que edite mis juegos hace suposiciones sobre qué es y qué no es información confidencial.

hvindin
fuente
1

He decidido eliminar el ansible/group_vars/testingdirectorio y reemplazarlo con un archivo, es decir, ansible/group_vars/testingque contiene los vars cifrados:

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

En lugar de ejecutar ansible-vault edit ansible/group_vars/testing/vaultuno, podría canalizar los valores que deben cifrarse a ansible-vault, es decir printf mysecret | ansible-vault encrypt. Este último cifrará mysecrety la salida podría agregarse al ansible/group_vars/testingarchivo. Cuando ansible-playbookse ejecutará, las variables cifradas se descifrarán si, por supuesto, se especifica el archivo de depósito ansible.

Si el valor cifrado necesita ser depurado, entonces se podría usar el siguiente código:

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