Guías

Tutorial de bóveda ansible

Tutorial de bóveda ansible

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:

Requisitos y convenciones de software utilizados
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.

Perl - CGI - Formulario Enviar ejemplo
El siguiente ejemplo de formulario PERL/CGI le pide a un usuario que ingrese dos enteros y tras el envío se realiza una adición en ambos enteros envia...
GNU R - Paquete no encontrado - Cómo instalar
La mayoría de los paquetes R están disponibles en el repositorio estándar de su distribución de Linux. En caso de que falle la biblioteca de carga por...
Configuración de HP OfficeJet - Ubuntu Linux Jaunty
Aquí hay una instalación rápida de la impresora HP OfficeJet en Ubuntu Linux JAUNTU # apt-get install hplib habilita x-window a root $ xhost + # hp-se...