Tecnología

Cómo utilizar Ansible Vault para almacenar claves secretas – CloudSavvy IT

Cómo utilizar Ansible Vault para almacenar claves secretas - CloudSavvy IT

Con la mayoría de la 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 forma de almacenar esas credenciales de forma segura. Ansible es un sistema de automatización que proporciona aprovisionamiento de software, administración de la configuración e implementaciones de aplicaciones.

Al igual que 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 variables en sí mismas, desde dentro de un libro de jugadas. De forma predeterminada, se utiliza AES, que es un cifrado basado en secretos compartidos. Tanto los métodos de cifrado de archivos como los de variables tienen sus ventajas e inconvenientes.

Cifrado de archivos

Para crear un nuevo archivo cifrado llamado secrets.yml, simplemente use lo siguiente ansible-vault mando.

ansible-vault create secrets.yml

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

De manera similar, para encriptar un archivo previamente no encriptado, use lo siguiente ansible-vault mando. Tenga en cuenta que esto usa el encrypt parámetro en lugar del create parámetro.

ansible-vault encrypt secrets.yml

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

Cifrado variable

Dentro de un libro de jugadas, es posible usar una variable encriptada anteponiendo los datos encriptados con el !vault etiqueta. Ejecutando el encrypt_string argumento de la ansible_vault El comando dará como resultado una cadena encriptada que puede usar dentro de sus libros de jugadas.

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

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

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

El cifrado variable es excelente para la legibilidad, pero se sacrifica la capacidad de usar el cambio de clave de la línea de comandos cuando se usa este método.

Uso de Ansible Vault en la práctica

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

  • Descifrado espontáneo
  • Varias bóvedas
  • Rekeying

Descifrado espontáneo

Una opción para descifrar de forma transparente un archivo o variable mientras 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 usando el vault-password-file parámetro.

ansible-playbook --vault-password-file /path/vault-password-file secrets.yml

Esto descifrará todos los archivos o variables cifrados incluidos utilizando la contraseña incluida.

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

Varias bóvedas

Aunque es conveniente tener una única bóveda con todos los secretos encriptados, 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 que provienen los datos cifrados mediante una etiqueta.

ansible-vault create --vault-id prod@prompt prod-secrets.yml

El código anterior creará un prod bóveda y solicite su contraseña en tiempo de ejecución (como se indica en el @prompt cuerda). Si ya tiene un archivo de contraseña que le gustaría usar, simplemente pase la ruta al archivo.

ansible-vault create --vault-id prod@/path/prod-vault-password-file prod-secrets.yml

Digamos que queremos cifrar lo mismo my_secret variable, pero esta vez almacene eso en nuestro prod bóveda. Al igual que antes, usando encrypt_string pero con lo relevante vault-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 AES256 cadena, una nueva pieza de texto, prod se muestra. 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 deseas incluir varias bóvedas en un solo libro de jugadas? Puede pasar fácilmente en múltiples vault-id declaraciones en un ansible-playbook línea de comando.

ansible-playbook --vault-id dev@/path/dev-vault-password-file --vault-id prod@/path/prod-vault-password-file site.yml

Rekeying

Por último, es importante realizar un ciclo regular de contraseñas. Para los archivos que están encriptados, puede usar la línea de comando a continuación. Pasando en el new-vault-id 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, el cambio de clave de la línea de comandos no funciona para las variables cifradas. En este caso, deberá volver a cifrar individualmente las cadenas y reemplazarlas en un libro de jugadas determinado.

Mejores prácticas

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

  • Archivos de contraseña protegidos y sin versión de ACLLos archivos de contraseña 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 clave regular de archivos y contraseñas variablesEn el caso de la reutilización o filtración de contraseñas, es mejor volver a introducir las contraseñas en uso con regularidad para limitar la exposición.

Conclusión

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

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

Leave a Comment

You may also like

Más