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_file
y 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
ovars_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.
- Deshabilite los archivos de intercambio que actúan como un guardado automático en caso de bloqueo o interrupción.
set noswapfile
- Deshabilite la creación de archivos de respaldo.
set nobackup set nowritebackup
- Inhabilite el archivo viminfo para que no copie datos de su sesión actual.
set viminfo=
- 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.
- No copie datos al portapapeles del sistema.
(setq x-select-enable-clipboard nil)
- Deshabilite la creación de archivos de respaldo.
(setq make-backup-files nil)
- 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 (;
).
- 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 ()). - 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). - El algoritmo de cifrado utilizado para cifrar los datos (
AES256
). En la actualidadAES256
es el único algoritmo de cifrado compatible. El formato de Vault 1.0 usaba ‘AES’, pero el código actual siempre usa ‘AES256’. - 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 esdev
.
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)