Gestión del Cifrado en Archivos YAML con Ansible Vault

Ansible Vault es una utilidad integrada en Ansible que permite cifrar y descifrar archivos de datos, como los YAML utilizados en inventarios, playbooks y roles. Esto es esencial para proteger información sensible como contraseñas, claves API o configuraciones confidenciales.

Comandos Básicos de Ansible Vault

La herramienta se ejecuta mediante el comando ansible-vault y ofrece varias subcomandos para gestionar el cifrado. A continuación, se detallan los más comunes:

[admin@controlador ~]$ ansible-vault --help
usage: ansible-vault [-h] [--version] [-v]
                     {create,decrypt,edit,view,encrypt,encrypt_string,rekey} ...

Utilidad de cifrado/descifrado para archivos de datos de Ansible

argumentos posicionales:
  {create,decrypt,edit,view,encrypt,encrypt_string,rekey}
    create              Crea un nuevo archivo cifrado con Vault
    decrypt             Descifra un archivo cifrado con Vault
    edit                Edita un archivo cifrado con Vault
    view                Muestra el contenido de un archivo cifrado con Vault
    encrypt             Cifra un archivo YAML existente
    encrypt_string      Cifra una cadena de texto
    rekey               Cambia la contraseña de un archivo cifrado con Vault

argumentos opcionales:
  --version             Muestra la versión del programa y otras ubicaciones
  -h, --help            Muestra este mensaje de ayuda y sale
  -v, --verbose         Incrementa la verbosidad de Ansible para depuración

Operaciones Fundamentales de Cifrado

1. Crear y Cifrar un Archivo Nuevo

El subcomando create genera un archivo cifrado directamente. Se solicita una contraseña y luego se ingresa el contenido.

[admin@controlador proyecto]$ ansible-vault create inventario_seguro.yml
Nueva contraseña de Vault: 
Confirmar nueva contraseña de Vault: 
# Se escribe el contenido en el editor abierto, por ejemplo:
# all:
#   hosts:
#     servidor1:
#       ansible_host: 192.168.1.10
[admin@controlador proyecto]$ cat inventario_seguro.yml
$ANSIBLE_VAULT;1.1;AES256
... (contenido cifrado en formato hexadecimal) ...

2. Cifrar un Archivo YAML Existente

Para cifrar un archivo ya creado, se usa encrypt. También es posible emplear un archivo de contraseña para automatizar el proceso.

[admin@controlador proyecto]$ echo "configuracion" > configuracion.yml
[admin@controlador proyecto]$ ansible-vault encrypt configuracion.yml
Nueva contraseña de Vault: 
Confirmar nueva contraseña de Vault: 
Cifrado exitoso
[admin@controlador proyecto]$ cat configuracion.yml
$ANSIBLE_VAULT;1.1;AES256
... (contenido cifrado) ...

# Alternativamente, usando un archivo de contraseña:
[admin@controlador proyecto]$ echo "clave_segura" > clave_vault.txt
[admin@controlador proyecto]$ ansible-vault encrypt playbook_adicional.yml --vault-password-file=./clave_vault.txt
Cifrado exitoso

3. Visualizar Contenido Cifrado

El comando view permite leer el contenido descifrado temporalmente sin modificar el archivo.

[admin@controlador proyecto]$ ansible-vault view configuracion.yml
Contraseña de Vault: 
configuracion
# Otro ejemplo:
[admin@controlador proyecto]$ ansible-vault view inventario_seguro.yml
Contraseña de Vault: 
all:
  hosts:
    servidor1:
      ansible_host: 192.168.1.10

4. Editar Archivos Cifrados

Con edit, se abre el archivo en un editor después de ingreasr la contraseña, permitiendo modificaciones seguras.

[admin@controlador proyecto]$ ansible-vault edit inventario_seguro.yml
Contraseña de Vault: 
# Se edita el contenido, por ejemplo, añadiendo un host
[admin@controlador proyecto]$ ansible-vault view inventario_seguro.yml
Contraseña de Vault: 
all:
  hosts:
    servidor1:
      ansible_host: 192.168.1.10
    servidor2:
      ansible_host: 192.168.1.11

5. Descifrar Archivos

El subcomando decrypt elimina el cifrado, dejando el archivo en texto plano. Se debe usar con precaución.

[admin@controlador proyecto]$ ansible-vault decrypt inventario_seguro.yml
Contraseña de Vault: 
Descifrado exitoso
[admin@controlador proyecto]$ cat inventario_seguro.yml
all:
  hosts:
    servidor1:
      ansible_host: 192.168.1.10
    servidor2:
      ansible_host: 192.168.1.11

6. Cambiar la Contraseña de Cifrado

Para actualizar la contraseña sin descifrar el archivo, se utiliza rekey.

[admin@controlador proyecto]$ ansible-vault rekey configuracion.yml
Contraseña de Vault: 
Nueva contraseña de Vault: 
Confirmar nueva contraseña de Vault: 
Cambio de clave exitoso

Ejecución de Playbooks con Contenido Cifrado

Cuando un playbook o archivo de inventario está cifrado, se debe proporcionar la contraseña durante la ejecución. Hay dos métodos principales:

1. Entrada Interactiva de Contraseña

Al ejecutar un playbook cifrado, se utiliza --ask-vault-pass para solicitar la contraseña manualmente.

# Primero, se cifra un playbook
[admin@controlador proyecto]$ ansible-vault create despliegue.yml
Nueva contraseña de Vault: 
Confirmar nueva contraseña de Vault: 
# Se ingresa contenido, por ejemplo: un playbook simple

# Luego, se ejecuta con entrada interactiva
[admin@controlador proyecto]$ ansible-playbook despliegue.yml --ask-vault-pass
Contraseña de Vault: 

PLAY [servidores] *****************************************************************************

TAREA [Recopilar hechos] *********************************************************************
ok: [servidor1]

TAREA [mostrar mensaje] **********************************************************************
ok: [servidor1] => {
    "msg": "Ejecución segura"
}

RESUMEN DE EJECUCIÓN *************************************************************************
servidor1                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

2. Uso de Archivo de Contraseña

Para automatización, se puede cifrar el playbook con un archivo de contraseña y luego usar ese mismo archivo al ejecutarlo.

# Cifrar el playbook usando un archivo de contraseña
[admin@controlador proyecto]$ echo "mi_clave_secreta" > secret.txt
[admin@controlador proyecto]$ ansible-vault encrypt --vault-password-file=secret.txt despliegue.yml
Cifrado exitoso

# Ejecutar el playbook proporcionando el archivo de contraseña
[admin@controlador proyecto]$ ansible-playbook despliegue.yml --vault-password-file=secret.txt

PLAY [servidores] *****************************************************************************

TAREA [Recopilar hechos] *********************************************************************
ok: [servidor1]

TAREA [mostrar mensaje] **********************************************************************
ok: [servidor1] => {
    "msg": "Ejecución segura"
}

RESUMEN DE EJECUCIÓN *************************************************************************
servidor1                : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Etiquetas: Ansible Ansible Vault cifrado YAML automatización de infraestructura

Publicado el 7-23 10:16