Todo sobre Apple, Android, Juegos Apks y Sitios de Peliculas

Cómo utilizar Ansible Vault para almacenar claves secretas

En la mayoría de los casos de automatización, se necesitan credenciales para autenticar y utilizar recursos seguros. Lo que siempre ha sido un desafío es cuál es la mejor manera de almacenar esas credenciales de forma segura. ansible es un sistema de automatización que proporciona aprovisionamiento de software, gestión de configuración e implementación de aplicaciones.

Como ocurre con cualquier sistema de automatización, Ansible necesita una forma segura de almacenar secretos. En el caso de Ansible, ese sistema se llama Bóveda ansible. Ansible Vault proporciona una solución multiplataforma para almacenar credenciales de forma segura.

Presentamos Ansible Vault

Ansible Vault se puede utilizar para cifrar cualquier archivo, o las propias variables, desde un libro de estrategias. De forma predeterminada, se utiliza AES, que es un cifrado basado en secreto compartido. Tanto los métodos de cifrado de archivos como de variables tienen sus ventajas e inconvenientes.

Cifrado de archivos

Para crear un nuevo archivo cifrado llamado

 secrets.yml 

simplemente use el siguiente comando ansible-vault.

 ansible-vault create secrets.yml

Después de solicitar una contraseña, el comando ansible-vault iniciará el editor de archivos del sistema predeterminado, lo que dará como resultado un archivo cifrado al guardarlo.

De manera similar, para cifrar un archivo previamente no cifrado, utilice el siguiente comando ansible-vault. Note que esto utiliza el parámetro de cifrado en lugar del parámetro de creación.

 ansible-vault encrypt secrets.yml

La desventaja de utilizar el cifrado de archivos es la legibilidad. Si abre el archivo, encontrará que sin descifrarlo es imposible descifrar el contenido.

Cifrado de variables

Dentro de un libro de jugadas, es posible utilizar una variable cifrada anteponiendo a los datos cifrados la etiqueta !vault. La ejecución del argumento encrypt_string del comando ansible_vault dará como resultado una cadena cifrada que puede usar en sus guías.

 ansible-vault encrypt_string 'secret_data' --name 'my_secret'

Después de solicitarle una contraseña, obtendrá la siguiente cadena cifrada.

 my_secret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          37636561366636643464376336303466613062633537323632306566653533383833366462366662
          6565353063303065303831323539656138653863353230620a653638643639333133306331336365
          62373737623337616130386137373461306535383538373162316263386165376131623631323434
          3866363862363335620a376466656164383032633338306162326639643635663936623939666238
          3161

El cifrado variable es excelente para la legibilidad, pero la capacidad de utilizar la recodificación de claves en la línea de comandos se sacrifica al utilizar este método.

Uso de Ansible Vault en la práctica

Quizás se dé cuenta de que utilizar Ansible Vault en producción es un desafío. Para utilizar Ansible Vault de forma eficaz, las siguientes técnicas facilitan este proceso.

  • Descifrado no solicitado
  • Múltiples bóvedas
  • Cambio de clave

Descifrado no solicitado

Una opción para descifrar de forma transparente un archivo o variable mientras se usa Ansible es almacenar la contraseña dentro de un archivo de contraseña protegido y sin versión. Para hacer referencia a esta contraseña almacenada, simplemente pase la ubicación del archivo utilizando el parámetro vault-password-file.

 ansible-playbook 

Esto descifrará cualquier archivo o variable cifrado incluido utilizando la contraseña incluida.

Es muy importante no enviar su archivo de contraseña en texto plano a su sistema de control de versiones. De manera similar, proteja este archivo solo para el usuario o grupo que necesita acceso a la contraseña almacenada en el sistema de archivos mediante listas de control de acceso (ACL).

Múltiples bóvedas

Aunque es conveniente tener una única bóveda con todos los secretos cifrados, una mejor práctica de seguridad es separar las credenciales seguras en bóvedas relevantes independientes. Un ejemplo de esto sería separar un entorno de producción y desarrollo. Afortunadamente, Ansible Vault nos permite crear múltiples bóvedas y referencias de las cuales provienen los datos cifrados mediante una etiqueta.

 ansible-vault create 

El código anterior creará una bóveda de productos y le solicitará su contraseña en tiempo de ejecución (como lo indica la cadena @prompt). Si ya tiene un archivo de contraseña que le gustaría usar, simplemente ingrese la ruta al archivo.

 ansible-vault create 

Digamos que queremos cifrar la misma variable my_secret, pero esta vez almacenarla en nuestra bóveda de productos. Al igual que antes, usando encrypt_string pero con la bóveda relevante-id permite almacenar el secreto en la ubicación especificada.

 ansible-vault encrypt_string --vault-id prod@/path/prod-vault-password-file 'secret_data' --name 'my_secret'

Notarás que después de la cadena AES256, se muestra un nuevo fragmento de texto, prod. Esto indica la bóveda en la que se encuentra el texto cifrado.

 my_secret: !vault |
          $ANSIBLE_VAULT;1.1;AES256;prod
          37636561366636643464376336303466613062633537323632306566653533383833366462366662
          6565353063303065303831323539656138653863353230620a653638643639333133306331336365
          62373737623337616130386137373461306535383538373162316263386165376131623631323434
          3866363862363335620a376466656164383032633338306162326639643635663936623939666238
          3161

¿Qué sucede si desea incluir varias bóvedas en un solo libro de estrategias? Puedes pasar fácilmente en múltiples bóvedas.id declaraciones en una línea de comando ansible-playbook.

 ansible-playbook 

Cambio de clave

Por último, es importante cambiar periódicamente sus contraseñas. Para archivos cifrados, puede utilizar la siguiente línea de comando. Pasando por la nueva bóvedaid El parámetro facilita el cambio de la contraseña con la que se cifran los secretos.

 ansible-vault rekey --vault-id prod@/path/prod-vault-password-file-old --new-vault-id prod@/path/prod-vault-password-file-new site.yml

Como se señaló anteriormente, la recodificación de claves en la línea de comandos no funciona para variables cifradas. En este caso, deberá volver a cifrar las cadenas individualmente y reemplazarlas en un manual determinado.

Mejores prácticas

La seguridad es difícil, especialmente cuando se trata de utilizar secretos dentro de los sistemas de automatización. Teniendo esto en cuenta, a continuación se presentan varias prácticas recomendadas que se pueden utilizar al utilizar Ansible Vault. Aunque hemos cubierto algunos de estos anteriormente, es prudente reiterar esas prácticas.

  • Archivos de contraseña no versionados y protegidos por ACLLos archivos de contraseñas no deben almacenarse en sistemas de control de versiones, como GIT. Además, asegúrese de que solo los usuarios adecuados puedan acceder al archivo de contraseñas.
  • Bóvedas separadasNormalmente, se utilizan muchos entornos diferentes. Por lo tanto, es mejor separar las credenciales requeridas en las bóvedas apropiadas.
  • Cambio de contraseña regular de archivos y contraseñas variablesEn el caso de reutilización o filtración de contraseñas, es mejor volver a ingresar periódicamente las contraseñas en uso para limitar la exposición.

Conclusión

Como ocurre con cualquier sistema de automatización, es de vital importancia que los secretos estén protegidos y controlados adecuadamente. Con Ansible Vault, ese proceso se vuelve fácil y flexible. Utilizando las mejores prácticas descritas anteriormente, almacenar y usar secretos dentro de Ansible es seguro.

Para ampliar Ansible Vault aún más y llevar este proceso al siguiente nivel, puede utilizar scripts que se integren en las soluciones de administración de contraseñas. Como puede ver, Ansible Vault es una excelente manera de utilizar secretos dentro de los manuales de Ansible.