En tutoriales anteriores, discutimos Ansible, una gran herramienta que podemos usar para la automatización y el aprovisionamiento. Hablamos sobre conceptos básicos de Ansible, vimos algunos de los módulos Ansible más utilizados, cómo administrar las variables y cómo realizar bucles básicos en los libros de jugadas; Ahora es el momento de ver cómo proteger la información confidencial que a veces puede ser necesaria para realizar algunas tareas. Para proteger la información confidencial al usar Ansible, las cifre con bóveda ansible.
En este artículo discutimos los conceptos básicos de Ansible Vault, y vemos cómo podemos usarlo para cifrar variables o libros de jugadas completos.
En este tutorial aprenderás:
- ¿Qué es la bóveda ansible?
- Cómo cifrar y descifrar variables individuales
- Cómo cifrar y descifrar los libros de jugadas completos
Categoría | Requisitos, convenciones o versión de software utilizada |
---|---|
Sistema | Independiente de la distribución |
Software | Bóveda |
Otro | Ninguno |
Convenciones | # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo Comando $: requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado |
Introducción
Ansible Vault es una herramienta que podemos usar para cifrar y descifrar valores variables únicos o libros de jugadas completos para proteger la información confidencial, que de lo contrario sería visible como texto sin formato. Se llama a la aplicación UserSpace con la que trabajamos para realizar tales operaciones bóveda
, y se incluye en cada instalación de Ansible estándar.
Variables de encriptación
Por qué podemos querer cifrar el valor de las variables individuales cuando podemos cifrar libros de jugadas completas? Las variables de encriptación tienen una gran ventaja: dado que el archivo en el que se usan permanece en formato de texto sin formato, es fácil de leerlo y modificarlo. Para cifrar el valor de una variable, invocamos el bóveda
utilidad y use el comando "cifrypt_string". Aquí hay un ejemplo: supongamos que en un libro de jugadas queremos usar una variable llamada "contraseña", pero queremos, por razones obvias, para evitar almacenar su valor en texto plano. Para cifrarlo usando Ansible Vault, podríamos ejecutar el siguiente comando:
$ Ansible-Vault CiCrypt_String "Secret_value_to_encrypt"-Nombre de la contraseña
Utilizamos el comando "CiCrypt_String" de Ansible -Vault: este comando encripta la cadena proporcionada (el contenido confidencial que queremos proteger - "Secret_value_to_encrypt", en este ejemplo), y la protege usando una contraseña. El nombre de la variable se especifica a través del
--nombre
opción. Tan pronto como iniciamos el comando, se nos solicita que proporcionemos y confirmemos la contraseña de cifrado. Se solicitará a la misma contraseña para descifrar el contenido: Nueva contraseña de bóveda: confirme una nueva contraseña de bóveda:
Tan pronto como proporcionemos la contraseña, el contenido se encriptará. El resultado del comando se imprimirá en la pantalla:
contraseña: !bóveda | $ Ansible_Vault; 1.1;AES256 64313761333061643861656539643036396538363063343736316362333736313035386636396536 6564356435343135643161363033626535393832343733320a323633393637643462643866393536 38363435336539353532356530373033663862363234343035643632306665343165656634303563 6636613562396531360a333861356337346536323063653964373833633739346664363664396537 35346537353930316535613638626233343433323039386262363232376230353131
Si no queremos proporcionar la contraseña de cifrado de manera interactiva, podemos escribirla en un archivo y hacer referencia al archivo, en su lugar. Suponiendo que escribimos nuestra contraseña en un archivo llamado "Contraseña.txt ”, por ejemplo, ejecutaríamos:
$ Ansible-Vault encrypt_string-Vault-password-archivo contraseña.txt "secret_value_to_encrypt" -Nombre de la contraseña
La contraseña debe escribirse en una sola línea. Como puede ver en el ejemplo anterior, el archivo que contiene la contraseña se hace referencia a través del --Vault-Password-File
opción. El resto del comando sigue siendo el mismo.
Otra opción potencialmente más segura, es crear un script que interactúe con nuestra aplicación favorita del Administrador de contraseñas. La identificación que se recuperará del Administrador de contraseñas se puede especificar a través del --ida de bóveda
opción, por lo que el script debe aceptar dicha opción. Si se requiere una contraseña para acceder al Administrador de contraseñas, el script debe solicitarlo en el terminal, y una vez que la contraseña necesaria para cifrar/descifrar la variable o el archivo con Ansible-Vault se recupere, debe imprimirla en salida estándar. El nombre del script debe terminar en "-Client" o "-Client.extensión ”(E.G "-Cliente.py "). Veamos un ejemplo.
En un artículo anterior vimos cómo podemos organizar nuestra contraseña utilizando el Administrador de contraseñas "pasar". Dicho administrador se basa en el uso de teclas GPG, y se puede usar directamente desde la línea de comando, a través de la aprobar
utilidad. Aquí hay un ejemplo de un script de Python que interactúa con este Administrador de contraseñas, y puede usarse con Ansible-Vault:
#!/usr/bin/env python3 import argparse import sys de la ejecución de importación de subprocesos, llamado ProcessError def parse_args (): parser = argparse.ArgumentParser (descripción = "Obtener contraseña de Pass Password Manager") analizador.add_argument ('-Vault-id', ayuda = 'La contraseña para recuperar', default = 'bóveda') return anal.parse_args () def main (args): try: complete_process = run (['pase', args.Vault_id], captura_output = true, check = true) excepto llamado ProcessError: SYS.stderr.escribir ('Hubo un error recuperando la contraseña') return 1 sys.stdout.escribir (completado_process.stdout.decode ('utf8')) return 0 si __name__ == '__main__': sys.Salir (Main (parse_args ()))
Copiar El script anterior, según lo solicitado, acepta el --ida de bóveda
Opción, que se utiliza para comunicar el "nombre" de la ID que se recuperará utilizando el Administrador de contraseñas. En este caso, establecemos el valor predeterminado de "bóveda" para la opción: se usará cuando el usuario no proporcione una identidad explícitamente. La llamada a "pasar" se realiza usando la pitón subproceso
Módulo (eche un vistazo a nuestro tutorial sobre subprocesos si no está familiarizado con él). Aquí usamos el correr
método, y establecer el captura_output
y controlar
parámetros Verdadero
, de modo que se captura la salida estándar del comando (se puede acceder más tarde en el atributo "stdout" del Proceso completo
objeto devuelto por el método) y un Llamado Processerror
Se plantea la excepción si el estado de salida del comando no es 0.
En este caso, el script no necesita solicitar al usuario la contraseña por sí solo, porque la utilidad de pase lo hará. Por cierto, para asegurarse de que se solicite la contraseña en la línea de comando, debemos instalar el
Pinentry-Tty
paquete y escriba la siguiente línea en el ~/.gnupg/gpg-agente.confusión
archivo: Pinentry-Program/USR/bin/Pinentry-Tty
Así es como podemos recuperar la contraseña de cifrado utilizando el script:
$ Ansible-Vault CiCrypt_String --Vault-ID [email protected] 'Secret_Value_To_Encrypt' -Nombre contraseña
Observe que usamos el --ida de bóveda
opción para especificar la identidad para usar, que en este caso es la que está a la izquierda del @
; A la derecha del símbolo, en cambio, está el camino del script que se invocará. Como se dijo antes, si omitimos proporcionar una identidad, se utilizará la predeterminada que usamos en el script:
$ Ansible-Vault CiCryPT_String-Vault-id Vault-Client.Py 'Secret_Value_To_Encrypt' -Nombre contraseña
Si proporcionamos explícitamente la identidad, se informará en la salida generada, por ejemplo:
contraseña: !bóveda | $ Ansible_Vault; 1.2; AES256;bóveda 39393237653832393365366436353734343736366263366232656265313763623739346565653837 3065656639616432646435393466633463336262353231330a633739633336633939333731643538 63386462323561346334376633366134623862366462333066333563656464373633303533323439 3038643639373966350a303065663830643635386630616263666636386537356233656330666239 66393939633833643066643931326435633631626138373363303430626539356564
Descifrar una variable
Para realizar la operación inversa, por lo que para verificar el valor original de una variable, podemos usar el Ansible depurar módulo. Imagina que almacenamos la variable en el variable.YML
archivo. Para leer su contenido original, recuperando la contraseña utilizando el script que usamos anteriormente, ejecutaríamos:
$ ansible localhost -m debug -a var = "contraseña" -e @variable.YML-Vault-id bó[email protected]
En el ejemplo anterior, especificamos "localhost" como la máquina donde se debe ejecutar la tarea y, como argumento al
-metro
Opción, pasamos el nombre del módulo que queremos usar. El -a
La opción se utiliza para pasar argumentos al módulo, en el formato de par "Key = Value" (var = "contraseña"), y -mi
se usa para pasar variables adicionales (es el corto para -Varos extra
): También se deben proporcionar variables adicionales en pares de clave/valor; En este caso, sin embargo, dado que estamos pasando la ruta de un archivo (en el que almacenamos la variable), simplemente lo preparamos con un @
(Eche un vistazo al manual de Ansible para obtener más instrucciones). Finalmente, como puede ver, al igual que en el ejemplo anterior, usamos el llanta de bóveda.py
Script para recuperar la contraseña de cifrado/descifrado. El comando devuelve el siguiente resultado: Localhost | Éxito => "Password": "Secret_value_to_encrypt"
Cifrado de archivos
Ansible-Vault también se puede usar para cifrar libros de jugadas completos u otro tipo de archivos. Supongamos que queremos cifrar un libro de jugadas llamado jugar.YML
. Para lograr nuestra misión, usaríamos el comando "CIRYPT":
$ Ansible-Vault Cicrypt Play.YML
En este caso, la contraseña se le preguntaría de manera interactiva. Al igual que lo hicimos en los ejemplos anteriores, sin embargo, podemos almacenarlo en un archivo o usar un script para recuperarlo:
$ Ansible-Vault CiCrypt --Vault-Password-File = contraseña.Txt Play.YML
Con el comando anterior, encriptamos un archivo existente, “Juega.YML ". Si queremos crear un archivo encriptado desde cero, simplemente podemos usar el comando "Crear". Cuando lo hagamos, se abrirá el editor de texto predeterminado para permitirnos escribir el contenido del archivo. Tan pronto como lo guardemos, el archivo se encriptará con la contraseña proporcionada. Del mismo modo, para crear un archivo encriptado llamado libro de jugadas.YML
, Corríamos:
$ Ansible-Vault crea Playbook.YML --Vault-Password-File = contraseña.TXT
Observe que el archivo está encriptado en el lugar. Si queremos editarlo, no necesitamos descifrarlo manualmente; Podemos usar convenientemente el comando "editar", que hace el trabajo por nosotros, y lo abre en nuestro editor de texto favorito:
$ Ansible-Vault Edit Playbook.YML --Vault-Password-File = contraseña.TXT
Para descifrar el archivo, usamos el comando "Decrypt", en su lugar::
$ Ansible-Vault Decrypt Playbook.YML --Vault-Password-File = contraseña.TXT
Proporcionar la contraseña de cifrado al ejecutar un libro de jugadas
Cuando queremos ejecutar un libro de jugadas cifrado, o un libro de jugadas que contenga una o más variables cifradas, podemos usar uno de los métodos que vimos anteriormente, o incluso dejar que Ansible solicite la contraseña utilizando interactivamente el --Pasada de ask-Vault
opción. Supongamos que queremos ejecutar las tareas contenidas en el cifrado libro de jugadas.YML
libro de jugadas. Podríamos correr:
$ Ansible-Playbook --Bail-Vault-Password Playbook.YML
Para dejar que la contraseña se lea de un archivo, en su lugar:
$ Ansible-playbook --Vault-Password-File = contraseña.Libro de jugadas de txt.YML
Para recuperar la contraseña usando un script, al igual que antes:
$ Ansible-Playbook-Vault-id [email protected] Playbook.YML
Conclusiones
En este artículo aprendimos a usar Ansible-Vault para proteger el contenido sensible en los libros de jugadas. Vimos cómo cifrar y descifrar el valor de las variables únicas y los archivos completos. Si desea saber más sobre Ansible-Vault, eche un vistazo a la documentación oficial.