Ansible Vault cifra variables y archivos para que pueda proteger el contenido confidencial, como contraseñas o claves, en lugar de dejarlo visible como texto sin formato en libros de jugadas o roles. Para utilizar Ansible Vault, necesita una o más contraseñas para cifrar y descifrar contenido. Si almacena sus contraseñas de bóveda en una herramienta de terceros, como un administrador secreto, necesita un script para acceder a ellas. Utilice las contraseñas con el bóveda-ansible herramienta de línea de comandos para crear y ver variables cifradas, crear archivos cifrados, cifrar archivos existentes o editar, volver a introducir o descifrar archivos. A continuación, puede colocar el contenido cifrado bajo el control de la fuente y compartirlo de forma más segura.

Advertencia

  • El cifrado con Ansible Vault SOLO protege los ‘datos en reposo’. Una vez que se descifra el contenido (‘datos en uso’), los autores de juegos y complementos son responsables de evitar cualquier divulgación secreta, consulte no_log para obtener detalles sobre cómo ocultar la salida y Pasos para proteger su editor para conocer las consideraciones de seguridad de los editores que utiliza con Ansible Vault.

Puede utilizar variables y archivos cifrados en comandos y manuales ad hoc proporcionando las contraseñas que utilizó para cifrarlos. Puede modificar su ansible.cfg file para especificar la ubicación de un archivo de contraseña o para solicitar siempre la contraseña.

  • Administrar contraseñas de bóveda

    • Elegir entre una sola contraseña y varias contraseñas
    • Administrar múltiples contraseñas con ID de bóveda

      • Limitaciones de los ID de bóveda
      • Hacer cumplir la coincidencia de ID de bóveda
    • Almacenamiento y acceso a contraseñas de bóveda

      • Almacenamiento de contraseñas en archivos
      • Almacenamiento de contraseñas en herramientas de terceros con scripts de cliente de contraseñas de bóveda
  • Cifrar contenido con Ansible Vault

    • Cifrar variables individuales con Ansible Vault

      • Ventajas y desventajas de cifrar variables
      • Creando variables encriptadas
      • Ver variables cifradas
    • Cifrar archivos con Ansible Vault

      • Ventajas y desventajas de cifrar archivos
      • Creando archivos encriptados
      • Cifrar archivos existentes
      • Ver archivos encriptados
      • Editar archivos encriptados
      • Cambiar la contraseña y / o la identificación de la bóveda en archivos cifrados
      • Descifrar archivos cifrados
      • Pasos para proteger su editor

        • empuje
        • Emacs
  • Usar variables y archivos cifrados

    • Pasando una sola contraseña
    • Pasando ID de bóveda
    • Pasar varias contraseñas de bóveda
    • Utilizando --vault-id sin una identificación de bóveda
  • Configuración de valores predeterminados para usar contenido cifrado

    • Configuración de un ID de bóveda predeterminado
    • Establecer una fuente de contraseña predeterminada
  • ¿Cuándo se hacen visibles los archivos cifrados?
  • Acelerando Ansible Vault
  • Formato de archivos cifrados con Ansible Vault

    • Formato de carga útil de Ansible Vault 1.1 – 1.2

Administrar contraseñas de bóveda

Administrar su contenido cifrado es más fácil si desarrolla una estrategia para administrar sus contraseñas de bóveda. Una contraseña de bóveda puede ser cualquier cadena que elija. No hay ningún comando especial para crear una contraseña de bóveda. Sin embargo, debe realizar un seguimiento de las contraseñas de su bóveda. Cada vez que cifra una variable o archivo con Ansible Vault, debe proporcionar una contraseña. Cuando utiliza una variable o archivo cifrado en un comando o libro de jugadas, debe proporcionar la misma contraseña que se utilizó para cifrarlo. Para desarrollar una estrategia para administrar las contraseñas de la bóveda, comience con dos preguntas:

  • ¿Quieres cifrar todo tu contenido con la misma contraseña o usar contraseñas diferentes para diferentes necesidades?
  • ¿Dónde desea almacenar su contraseña o contraseñas?

Elegir entre una sola contraseña y varias contraseñas

Si tiene un equipo pequeño o pocos valores confidenciales, puede usar una sola contraseña para todo lo que cifra con Ansible Vault. Guarde su contraseña de la bóveda de forma segura en un archivo o en un administrador secreto como se describe a continuación.

Si tiene un equipo más grande o muchos valores confidenciales, puede usar varias contraseñas. Por ejemplo, puede usar diferentes contraseñas para diferentes usuarios o diferentes niveles de acceso. Según sus necesidades, es posible que desee una contraseña diferente para cada archivo cifrado, para cada directorio o para cada entorno. Por ejemplo, puede tener un libro de jugadas que incluya dos archivos vars, uno para el entorno de desarrollo y otro para el entorno de producción, cifrados con dos contraseñas diferentes. Cuando ejecute el libro de jugadas, seleccione la contraseña de bóveda correcta para el entorno al que se dirige, utilizando un ID de bóveda.

Administrar múltiples contraseñas con ID de bóveda

Si usa varias contraseñas de bóveda, puede diferenciar una contraseña de otra con ID de bóveda. Utiliza el ID de la bóveda de tres formas:

  • Pásalo con --vault-id al bóveda-ansible comando cuando crea contenido cifrado
  • Inclúyalo donde quiera que almacene la contraseña para ese ID de bóveda (consulte Almacenamiento y acceso a contraseñas de bóveda)
  • Pásalo con --vault-id al ansible-playbook comando cuando ejecuta un libro de jugadas que usa contenido que cifró con ese ID de bóveda

Cuando pasa un ID de bóveda como una opción al bóveda-ansible comando, agrega una etiqueta (una pista o un apodo) al contenido cifrado. Esta etiqueta documenta la contraseña que usó para cifrarla. La variable o archivo cifrado incluye la etiqueta de identificación de la bóveda en texto sin formato en el encabezado. El ID de la bóveda es el último elemento antes del contenido cifrado. Por ejemplo:

my_encrypted_var: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613233633461343837653833666333643061636561303338373661313838333565653635353162
          3263363434623733343538653462613064333634333464660a663633623939393439316636633863
          61636237636537333938306331383339353265363239643939666639386530626330633337633833
          6664656334373166630a363736393262666465663432613932613036303963343263623137386239
          6330

Además de la etiqueta, debe proporcionar una fuente para la contraseña relacionada. La fuente puede ser un mensaje, un archivo o una secuencia de comandos, dependiendo de cómo esté almacenando sus contraseñas de la bóveda. El patrón se ve así:

--vault-id [email protected]

Si su libro de jugadas utiliza múltiples variables cifradas o archivos que usted cifró con diferentes contraseñas, debe pasar los ID de la bóveda cuando ejecute ese libro de jugadas. Puedes usar --vault-id por sí mismo, con --vault-password-file, o con --ask-vault-pass. El patrón es el mismo que cuando crea contenido cifrado: incluya la etiqueta y el origen de la contraseña coincidente.

Consulte a continuación ejemplos de cómo cifrar contenido con ID de bóveda y cómo utilizar contenido cifrado con ID de bóveda. los --vault-id La opción funciona con cualquier comando de Ansible que interactúe con bóvedas, incluyendo bóveda-ansible, ansible-playbook, etcétera.

Limitaciones de los ID de bóveda

Ansible no aplica el uso de la misma contraseña cada vez que usa una etiqueta de identificación de bóveda en particular. Puede cifrar diferentes variables o archivos con la misma etiqueta de identificación de la bóveda pero diferentes contraseñas. Esto suele suceder cuando escribe la contraseña en un mensaje y comete un error. Es posible utilizar diferentes contraseñas con la misma etiqueta de identificación de bóveda a propósito. Por ejemplo, puede utilizar cada etiqueta como referencia a una clase de contraseñas, en lugar de una única contraseña. En este escenario, siempre debe saber qué contraseña o archivo específico usar en contexto. Sin embargo, es más probable que cifre dos archivos con la misma etiqueta de identificación de la bóveda y contraseñas diferentes por error. Si cifra dos archivos con la misma etiqueta pero contraseñas diferentes por accidente, puede volver a escribir un archivo para solucionar el problema.

Hacer cumplir la coincidencia de ID de bóveda

De forma predeterminada, la etiqueta de identificación de la bóveda es solo una sugerencia para recordarle qué contraseña usó para cifrar una variable o un archivo. Ansible no comprueba que el ID de la bóveda en el encabezado del contenido cifrado coincida con el ID de la bóveda que proporcionaste cuando usas el contenido. Ansible descifra todos los archivos y variables llamados por su comando o libro de jugadas que están encriptados con la contraseña que usted proporciona. Para verificar el contenido cifrado y descifrarlo solo cuando el ID de la bóveda que contiene coincide con el que proporcionaste --vault-id, establece la opción de configuración DEFAULT_VAULT_ID_MATCH. Cuando estableces DEFAULT_VAULT_ID_MATCH, cada contraseña solo se utiliza para descifrar los datos que se cifraron con la misma etiqueta. Esto es eficiente, predecible y puede reducir los errores cuando se cifran diferentes valores con diferentes contraseñas.

Nota

Incluso con el DEFAULT_VAULT_ID_MATCH configuración habilitada, Ansible no aplica el uso de la misma contraseña cada vez que usa una etiqueta de identificación de bóveda en particular.

Almacenamiento y acceso a contraseñas de bóveda

Puede memorizar su contraseña de la bóveda o copiar manualmente las contraseñas de la bóveda de cualquier fuente y pegarlas en una línea de comandos, pero la mayoría de los usuarios las almacenan de forma segura y acceden a ellas según sea necesario desde Ansible. Tiene dos opciones para almacenar contraseñas de bóveda que funcionan desde Ansible: en archivos o en una herramienta de terceros, como el anillo de claves del sistema o un administrador secreto. Si almacena sus contraseñas en una herramienta de terceros, necesita un script de cliente de contraseña de bóveda para recuperarlas desde Ansible.

Almacenamiento de contraseñas en archivos

Para almacenar una contraseña de la bóveda en un archivo, ingrese la contraseña como una cadena en una sola línea en el archivo. Asegúrese de que los permisos del archivo sean los adecuados. No agregue archivos de contraseña al control de código fuente.

Almacenamiento de contraseñas en herramientas de terceros con scripts de cliente de contraseñas de bóveda

Puede almacenar sus contraseñas de bóveda en el anillo de claves del sistema, en una base de datos o en un administrador secreto y recuperarlas desde Ansible utilizando un script de cliente de contraseñas de bóveda. Ingrese la contraseña como una cadena en una sola línea. Si su contraseña tiene un ID de bóveda, guárdelo de una manera que funcione con su herramienta de almacenamiento de contraseñas.

Para crear una secuencia de comandos de cliente de contraseña de la bóveda:

  • Cree un archivo con un nombre que termine en -client.py
  • Hacer que el archivo sea ejecutable
  • Dentro del propio script:
    • Imprima las contraseñas en salida estándar
    • Aceptar un --vault-id opción
    • Si la secuencia de comandos solicita datos (por ejemplo, una contraseña de base de datos), envíe las solicitudes al error estándar

Cuando ejecuta un libro de jugadas que usa contraseñas de bóveda almacenadas en una herramienta de terceros, especifique el script como fuente dentro del --vault-id bandera. Por ejemplo:

ansible-playbook --vault-id [email protected]/vault/vault-keyring-client.py

Ansible ejecuta el script del cliente con un --vault-id para que el script sepa qué etiqueta de ID de bóveda especificó. Por ejemplo, un script que carga contraseñas de un administrador secreto puede usar la etiqueta de identificación de la bóveda para elegir la contraseña ‘dev’ o ‘prod’. El comando de ejemplo anterior da como resultado la siguiente ejecución del script del cliente:

contrib/vault/vault-keyring-client.py --vault-id dev

Para ver un ejemplo de una secuencia de comandos de cliente que carga contraseñas desde el anillo de claves del sistema, consulte contrib/vault/vault-keyring-client.py.

Cifrar contenido con Ansible Vault

Una vez que tenga una estrategia para administrar y almacenar las contraseñas de la bóveda, puede comenzar a cifrar el contenido. Puede cifrar dos tipos de contenido con Ansible Vault: variables y archivos. El contenido cifrado siempre incluye el !vault , que le dice a Ansible y YAML que el contenido debe ser descifrado, y un | carácter, que permite cadenas de varias líneas. Contenido cifrado creado con --vault-id también contiene la etiqueta de identificación de la bóveda. Para obtener más detalles sobre el proceso de cifrado y el formato del contenido cifrado con Ansible Vault, consulte Formato de archivos cifrados con Ansible Vault. Esta tabla muestra las principales diferencias entre las variables cifradas y los archivos cifrados:

Variables encriptadas

Archivos encriptados

¿Cuánto está cifrado?

Variables dentro de un texto plano expediente

Todo el archivo

¿Cuándo se descifra?

A pedido, solo cuando sea necesario

Siempre que se cargue o se haga referencia a 1

¿Qué se puede cifrar?

Solo variables

Cualquier archivo de datos estructurados

1

Ansible no puede saber si necesita contenido de un archivo cifrado a menos que lo descifre, por lo que descifra todos los archivos cifrados a los que se hace referencia en sus libros de jugadas y roles.

Cifrar variables individuales con Ansible Vault

Puede cifrar valores individuales dentro de un archivo YAML usando el ansible-vault encrypt_string mando. Para ver una forma de mantener visibles las variables almacenadas de forma segura, consulte Mantenga las variables abovedadas visibles de forma segura.

Ventajas y desventajas de cifrar variables

Con el cifrado de nivel variable, sus archivos siguen siendo fácilmente legibles. Puede mezclar texto sin formato y variables cifradas, incluso en línea en una obra de teatro o un papel. Sin embargo, la rotación de contraseñas no es tan simple como con el cifrado a nivel de archivo. No se puede volver a escribir variables cifradas. Además, el cifrado de nivel variable solo funciona con variables. Si desea cifrar tareas u otro contenido, debe cifrar todo el archivo.

Creando variables encriptadas

los ansible-vault encrypt_string El comando cifra y formatea cualquier cadena que escriba (o copie o genere) en un formato que se puede incluir en un libro de jugadas, rol o archivo de variables. Para crear una variable cifrada básica, pase tres opciones al ansible-vault encrypt_string mando:

  • una fuente para la contraseña de la bóveda (solicitud, archivo o secuencia de comandos, con o sin una ID de bóveda)
  • la cadena para cifrar
  • el nombre de la cadena (el nombre de la variable)

El patrón se ve así:

ansible-vault encrypt_string <password_source> '<string_to_encrypt>' --name '<string_name_of_variable>'

Por ejemplo, para encriptar la cadena ‘foobar’ usando la única contraseña almacenada en ‘a_password_file’ y nombrar la variable ‘the_secret’:

ansible-vault encrypt_string --vault-password-file a_password_file 'foobar' --name 'the_secret'

El comando anterior crea este contenido:

the_secret: !vault |
      $ANSIBLE_VAULT;1.1;AES256
      62313365396662343061393464336163383764373764613633653634306231386433626436623361
      6134333665353966363534333632666535333761666131620a663537646436643839616531643561
      63396265333966386166373632626539326166353965363262633030333630313338646335303630
      3438626666666137650a353638643435666633633964366338633066623234616432373231333331
      6564

Para cifrar la cadena ‘foooodev’, agregue la etiqueta de ID de la bóveda ‘dev’ con la contraseña de la bóveda ‘dev’ almacenada en ‘a_password_file’, y llame a la variable cifrada ‘the_dev_secret’:

ansible-vault encrypt_string --vault-id [email protected]_password_file 'foooodev' --name 'the_dev_secret'

El comando anterior crea este contenido:

the_dev_secret: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613233633461343837653833666333643061636561303338373661313838333565653635353162
          3263363434623733343538653462613064333634333464660a663633623939393439316636633863
          61636237636537333938306331383339353265363239643939666639386530626330633337633833
          6664656334373166630a363736393262666465663432613932613036303963343263623137386239
          6330

Para cifrar la cadena ‘letmein’ read from stdin, agregue el ID de la bóveda ‘dev’ usando la contraseña de la bóveda ‘dev’ almacenada en a_password_filey nombre la variable ‘db_password’:

echo -n 'letmein' | ansible-vault encrypt_string --vault-id [email protected]_password_file --stdin-name 'db_password'

Advertencia

Escribir contenido secreto directamente en la línea de comando (sin un símbolo del sistema) deja la cadena secreta en su historial de shell. No haga esto fuera de la prueba.

El comando anterior crea esta salida:

Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a new line)
db_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          61323931353866666336306139373937316366366138656131323863373866376666353364373761
          3539633234313836346435323766306164626134376564330a373530313635343535343133316133
          36643666306434616266376434363239346433643238336464643566386135356334303736353136
          6565633133366366360a326566323363363936613664616364623437336130623133343530333739
          3039

Para que se le solicite una cadena para cifrar, cifre con la contraseña de la bóveda ‘dev’ de ‘a_password_file’, nombre la variable ‘new_user_password’ y asígnele la etiqueta de ID de la bóveda ‘dev’:

ansible-vault encrypt_string --vault-id [email protected]_password_file --stdin-name 'new_user_password'

El comando anterior activa este mensaje:

Reading plaintext input from stdin. (ctrl-d to end input, twice if your content does not already have a new line)

Escriba la cadena para cifrar (por ejemplo, ‘hunter2’), presione ctrl-d y espere.

Advertencia

No presionar Enter después de suministrar la cadena para cifrar. Eso agregará una nueva línea al valor cifrado.

La secuencia anterior crea esta salida:

new_user_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          37636561366636643464376336303466613062633537323632306566653533383833366462366662
          6565353063303065303831323539656138653863353230620a653638643639333133306331336365
          62373737623337616130386137373461306535383538373162316263386165376131623631323434
          3866363862363335620a376466656164383032633338306162326639643635663936623939666238
          3161

Puede agregar la salida de cualquiera de los ejemplos anteriores a cualquier libro de jugadas, archivo de variables o rol para uso futuro. Las variables cifradas son más grandes que las variables de texto sin formato, pero protegen su contenido confidencial mientras dejan el resto del libro de jugadas, el archivo de variables o el rol en texto sin formato para que pueda leerlo fácilmente.

Ver variables cifradas

Puede ver el valor original de una variable cifrada utilizando el módulo de depuración. Debe pasar la contraseña que se utilizó para cifrar la variable. Por ejemplo, si almacenó la variable creada por el último ejemplo anterior en un archivo llamado ‘vars.yml’, podría ver el valor sin cifrar de esa variable de esta manera:

ansible localhost -m ansible.builtin.debug -a var="new_user_password" -e "@vars.yml" --vault-id [email protected]_password_file

localhost | SUCCESS => {
    "new_user_password": "hunter2"
}

Cifrar archivos con Ansible Vault

Ansible Vault puede cifrar cualquier archivo de datos estructurados utilizado por Ansible, que incluye:

  • agrupar archivos de variables del inventario
  • archivos de variables del lenguaje principal del inventario
  • archivos de variables pasados ​​a ansible-playbook con -e @file.yml o -e @file.json
  • archivos de variables cargados por include_vars o vars_files
  • archivos de variables en roles
  • archivos predeterminados en roles
  • archivos de tareas
  • archivos de manipuladores
  • archivos binarios u otros archivos arbitrarios

El archivo completo está encriptado en la bóveda.

Nota

Ansible Vault utiliza un editor para crear o modificar archivos cifrados. Ver Pasos para proteger su editor para obtener orientación sobre cómo asegurar el editor.

Ventajas y desventajas de cifrar archivos

El cifrado a nivel de archivo es fácil de usar. La rotación de contraseñas para archivos cifrados es sencilla con la volver a escribir mando. El cifrado de archivos puede ocultar no solo valores confidenciales, sino también los nombres de las variables que utiliza. Sin embargo, con el cifrado a nivel de archivo, el contenido de los archivos ya no es fácil de acceder y leer. Esto puede deberse a un problema con los archivos de tareas cifrados. Al cifrar un archivo de variables, consulte Mantenga las variables abovedadas visibles de forma segura para una forma de mantener las referencias a estas variables en un archivo no cifrado. Ansible siempre descifra todo el archivo cifrado cuando está cargado o referenciado, porque Ansible no puede saber si necesita el contenido a menos que lo descifre.

Creando archivos encriptados

Para crear un nuevo archivo de datos cifrados llamado ‘foo.yml’ con la contraseña de la bóveda de ‘prueba’ de ‘multi_password_file’:

ansible-vault create --vault-id [email protected]_password_file foo.yml

La herramienta lanza un editor (cualquier editor que haya definido con $ EDITOR, el editor predeterminado es vi). Agrega el contenido. Cuando cierra la sesión del editor, el archivo se guarda como datos cifrados. El encabezado del archivo refleja el ID de la bóveda que se usó para crearlo:

``$ANSIBLE_VAULT;1.2;AES256;test``

Para crear un nuevo archivo de datos cifrados con el ID de la bóveda ‘my_new_password’ asignado y que se le solicite la contraseña:

ansible-vault create --vault-id [email protected] foo.yml

Nuevamente, agregue contenido al archivo en el editor y guárdelo. Asegúrese de almacenar la nueva contraseña que creó cuando se le solicite, para que pueda encontrarla cuando desee descifrar ese archivo.

Cifrar archivos existentes

Para cifrar un archivo existente, utilice el cifrado ansible-vault mando. Este comando puede operar en varios archivos a la vez. Por ejemplo:

ansible-vault encrypt foo.yml bar.yml baz.yml

Para cifrar archivos existentes con la ID del ‘proyecto’ y se le solicite la contraseña:

ansible-vault encrypt --vault-id [email protected] foo.yml bar.yml baz.yml

Ver archivos encriptados

Para ver el contenido de un archivo cifrado sin editarlo, puede utilizar el vista de la bóveda ansible mando:

ansible-vault view foo.yml bar.yml baz.yml

Editar archivos encriptados

Para editar un archivo cifrado en su lugar, utilice el ansible-vault editar mando. Este comando descifra el archivo en un archivo temporal, le permite editar el contenido, luego guarda y vuelve a cifrar el contenido y elimina el archivo temporal cuando cierra el editor. Por ejemplo:

ansible-vault edit foo.yml

Para editar un archivo cifrado con el vault2 archivo de contraseña y se le asignó el ID de la bóveda pass2:

ansible-vault edit --vault-id [email protected] foo.yml

Cambiar la contraseña y / o la identificación de la bóveda en archivos cifrados

Para cambiar la contraseña en un archivo o archivos cifrados, utilice el volver a escribir mando:

ansible-vault rekey foo.yml bar.yml baz.yml

Este comando puede cambiar la clave de varios archivos de datos a la vez y le pedirá la contraseña original y también la nueva contraseña. Para establecer una ID diferente para los archivos con clave nueva, pase la nueva ID a --new-vault-id. Por ejemplo, para cambiar la clave de una lista de archivos cifrados con el ID de la bóveda ‘preprod1’ desde el archivo ‘ppold’ al ID de la bóveda ‘preprod2’ y se le pedirá la nueva contraseña:

ansible-vault rekey --vault-id [email protected] --new-vault-id [email protected] foo.yml bar.yml baz.yml

Descifrar archivos cifrados

Si tiene un archivo cifrado que ya no desea mantener cifrado, puede descifrarlo permanentemente ejecutando el descifrar ansible-vault mando. Este comando guardará el archivo sin cifrar en el disco, así que asegúrese de no querer editar en su lugar.

ansible-vault decrypt foo.yml bar.yml baz.yml

Pasos para proteger su editor

Ansible Vault se basa en su editor configurado, que puede ser una fuente de divulgaciones. La mayoría de los editores tienen formas de evitar la pérdida de datos, pero normalmente se basan en archivos de texto sin formato adicionales que pueden tener una copia en texto claro de sus secretos. Consulte la documentación de su editor para configurar el editor y evitar revelar datos seguros. Las siguientes secciones brindan orientación sobre editores comunes, pero no deben tomarse como una guía completa para proteger su editor.

empuje

Puede configurar lo siguiente vim opciones en modo comando para evitar casos de divulgación. Es posible que deba modificar más configuraciones para garantizar la seguridad, especialmente cuando se utilizan complementos, así que consulte el vim documentación.

  1. Deshabilite los archivos de intercambio que actúan como un guardado automático en caso de bloqueo o interrupción.
set noswapfile
  1. Deshabilite la creación de archivos de respaldo.
set nobackup
set nowritebackup
  1. Inhabilite el archivo viminfo para que no copie datos de su sesión actual.
set viminfo=
  1. Desactive la copia en el portapapeles del sistema.
set clipboard=

Opcionalmente, puede agregar estas configuraciones en .vimrc para todos los archivos, o solo rutas o extensiones específicas. Ver el vim manual para más detalles.

Emacs

Puede configurar las siguientes opciones de Emacs para evitar casos de divulgación. Puede haber más configuraciones que necesite modificar para garantizar la seguridad, especialmente cuando se utilizan complementos, así que consulte la documentación de Emacs.

  1. No copie datos al portapapeles del sistema.
(setq x-select-enable-clipboard nil)
  1. Deshabilite la creación de archivos de respaldo.
(setq make-backup-files nil)
  1. Deshabilite los archivos de autoguardado.
(setq auto-save-default nil)

Usar variables y archivos cifrados

Cuando ejecuta una tarea o un libro de jugadas que utiliza variables o archivos cifrados, debe proporcionar las contraseñas para descifrar las variables o los archivos. Puede hacer esto en la línea de comandos o en el propio libro de jugadas.

Pasando una sola contraseña

Si todas las variables y archivos encriptados que su tarea o libro de jugadas necesita usan una sola contraseña, puede usar el --ask-vault-pass o --vault-password-file opciones de cli.

Para solicitar la contraseña:

ansible-playbook --ask-vault-pass site.yml

Para recuperar la contraseña del /path/to/my/vault-password-file expediente:

ansible-playbook --vault-password-file /path/to/my/vault-password-file site.yml

Para obtener la contraseña de la secuencia de comandos del cliente de contraseñas de la bóveda my-vault-password-client.py:

ansible-playbook --vault-password-file my-vault-password-client.py

Pasando ID de bóveda

También puede utilizar el --vault-id opción para pasar una única contraseña con su etiqueta de bóveda. Este enfoque es más claro cuando se utilizan varias bóvedas dentro de un único inventario.

Para solicitar la contraseña para el ID de la bóveda ‘dev’:

ansible-playbook --vault-id [email protected] site.yml

Para recuperar la contraseña del ID de la bóveda ‘dev’ del dev-password expediente:

ansible-playbook --vault-id [email protected] site.yml

Para obtener la contraseña para el ID de la bóveda ‘dev’ del script de cliente de contraseña de la bóveda my-vault-password-client.py:

ansible-playbook --vault-id [email protected]

Pasar varias contraseñas de bóveda

Si su tarea o libro de jugadas requiere varias variables cifradas o archivos que cifró con diferentes ID de bóveda, debe usar el --vault-id opción, pasando múltiples --vault-id opciones para especificar los ID de la bóveda (‘dev’, ‘prod’, ‘cloud’, ‘db’) y las fuentes de las contraseñas (indicador, archivo, script). . Por ejemplo, para usar una contraseña ‘dev’ leída de un archivo y que se le solicite la contraseña ‘prod’:

ansible-playbook --vault-id [email protected] --vault-id [email protected] site.yml

De forma predeterminada, las etiquetas de identificación de la bóveda (dev, prod, etc.) son solo sugerencias. Ansible intenta descifrar el contenido de la bóveda con cada contraseña. Primero se probará la contraseña con la misma etiqueta que los datos cifrados, luego se probará cada secreto de la bóveda en el orden en que se proporcionaron en la línea de comando.

Cuando los datos cifrados no tienen etiqueta, o la etiqueta no coincide con ninguna de las etiquetas proporcionadas, las contraseñas se probarán en el orden en que se especifiquen. En el ejemplo anterior, primero se probará la contraseña ‘dev’, luego la contraseña ‘prod’ para los casos en que Ansible no sepa qué ID de bóveda se usa para cifrar algo.

Utilizando --vault-id sin una identificación de bóveda

los --vault-id La opción también se puede utilizar sin especificar un ID de bóveda. Este comportamiento es equivalente a --ask-vault-pass o --vault-password-file por lo que rara vez se usa.

Por ejemplo, para usar un archivo de contraseña dev-password:

ansible-playbook --vault-id dev-password site.yml

Para solicitar la contraseña:

ansible-playbook --vault-id @prompt site.yml

Para obtener la contraseña de un script ejecutable my-vault-password-client.py:

ansible-playbook --vault-id my-vault-password-client.py

Configuración de valores predeterminados para usar contenido cifrado

Configuración de un ID de bóveda predeterminado

Si usa un ID de bóveda con más frecuencia que cualquier otro, puede configurar la opción de configuración DEFAULT_VAULT_IDENTITY_LIST para especificar un ID de bóveda predeterminado y una fuente de contraseña. Ansible utilizará la fuente y el ID de bóveda predeterminados siempre que no lo especifique --vault-id. Puede establecer varios valores para esta opción. Establecer varios valores equivale a pasar varios --vault-id opciones de cli.

Establecer una fuente de contraseña predeterminada

Si usa un archivo de contraseña de la bóveda con más frecuencia que cualquier otro, puede configurar el DEFAULT_VAULT_PASSWORD_FILE opción de configuración o la ANSIBLE_VAULT_PASSWORD_FILE variable de entorno para especificar ese archivo. Por ejemplo, si configura ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, Ansible buscará automáticamente la contraseña en ese archivo. Esto es útil si, por ejemplo, usa Ansible de un sistema de integración continua como Jenkins.

¿Cuándo se hacen visibles los archivos cifrados?

En general, el contenido que cifra con Ansible Vault permanece cifrado después de la ejecución. Sin embargo, hay una excepción. Si pasa un archivo cifrado como src argumento a la Copiar, plantilla, desarchivar, texto o armar módulo, el archivo no se cifrará en el host de destino (suponiendo que proporcione la contraseña de la bóveda correcta cuando ejecute la reproducción). Este comportamiento es intencionado y útil. Puede cifrar un archivo de configuración o una plantilla para evitar compartir los detalles de su configuración, pero cuando copia esa configuración a los servidores de su entorno, desea que se descifre para que los usuarios y procesos locales puedan acceder a él.

Acelerando Ansible Vault

Si tiene muchos archivos cifrados, descifrarlos al inicio puede causar una demora perceptible. Para acelerar esto, instale el paquete de criptografía:

pip install cryptography

Formato de archivos cifrados con Ansible Vault

Ansible Vault crea archivos txt codificados en UTF-8. El formato de archivo incluye un encabezado terminado en una nueva línea. Por ejemplo:

$ANSIBLE_VAULT;1.1;AES256

o:

$ANSIBLE_VAULT;1.2;AES256;vault-id-label

El encabezado contiene hasta cuatro elementos, separados por punto y coma (;).

  1. El ID de formato ($ANSIBLE_VAULT). En la actualidad $ANSIBLE_VAULT es el único ID de formato válido. El ID de formato identifica el contenido cifrado con Ansible Vault (a través de vault.is_encrypted_file ()).
  2. La versión del formato de la bóveda (1.X). Todas las versiones compatibles de Ansible se establecerán de forma predeterminada en ‘1.1’ o ‘1.2’ si se proporciona una ID de bóveda etiquetada. El formato ‘1.0’ es compatible con solo lectura (y se convertirá automáticamente al formato ‘1.1’ al escribir). La versión del formato se utiliza actualmente como una cadena de comparación exacta únicamente (los números de versión no se ‘comparan’ actualmente).
  3. El algoritmo de cifrado utilizado para cifrar los datos (AES256). En la actualidad AES256 es el único algoritmo de cifrado compatible. El formato de Vault 1.0 usaba ‘AES’, pero el código actual siempre usa ‘AES256’.
  4. La etiqueta de identificación de la bóveda utilizada para cifrar los datos (opcional, vault-id-label) Por ejemplo, si cifra un archivo con --vault-id [email protected], la etiqueta de identificación de la bóveda es dev.

Nota: En el futuro, el encabezado podría cambiar. Los campos después del ID del formato y la versión del formato dependen de la versión del formato, y las versiones futuras del formato de la bóveda pueden agregar más opciones de algoritmos de cifrado y / o campos adicionales.

El resto del contenido del archivo es el ‘texto de la bóveda’. El texto de la bóveda es una versión blindada de texto del texto cifrado. Cada línea tiene 80 caracteres de ancho, excepto la última línea que puede ser más corta.

Formato de carga útil de Ansible Vault 1.1 – 1.2

El texto de la bóveda es una concatenación del texto cifrado y un resumen SHA256 con el resultado ‘hexlifyied’.

‘hexlify’ se refiere a la hexlify() método de la biblioteca estándar de Python binascii módulo.

hexlify () ‘ed resultado de:

  • hexlify () ‘ed cadena de la sal, seguida de una nueva línea (0x0a)
  • hexlify () ‘ed cadena del HMAC encriptado, seguida de una nueva línea. El HMAC es:

    • a RFC2104 estilo HMAC

      • las entradas son:

        • El texto cifrado cifrado AES256
        • Una clave PBKDF2. Esta clave, la clave de cifrado y el IV de cifrado se generan a partir de:

          • la sal, en bytes
          • 10000 iteraciones
          • Algoritmo SHA256 ()
          • los primeros 32 bytes son la clave de cifrado
          • los segundos 32 bytes son la clave HMAC
          • 16 bytes restantes son el cifrado IV
  • hexlify () ‘ed cadena del texto cifrado. El texto cifrado es:
  • Datos cifrados AES256. Los datos se cifran mediante:

    • Cifrado de flujo AES-CTR
    • clave de cifrado
    • IV
    • un bloque contador de 128 bits sembrado a partir de un entero IV
    • el texto llano

      • el texto plano original
      • rellenando hasta el tamaño de bloque AES256. (Los datos utilizados para el relleno se basan en RFC5652)