Guía del comando tcpdump
Estrategias de deployment

Gestión de secretos con Ansible Vault

ansible vault

Ansible Vault ayuda a gestionar información sensible como contraseñas, claves API y claves SSH. Almacenar estos datos en texto plano puede plantear riesgos de seguridad.

Para gestionar eficazmente dicha información sensible, Ansible ofrece Ansible Vault como una función integrada. Tiene varios comandos para ayudar en esta tarea.

Apuntes de curso completo de Ansible

Chef vs Puppet vs Ansible vs Saltstack

Índice:

Ansible Vault

¿Qué es Ansible Vault?

Ansible Vault es una función que ayuda a proteger los datos confidenciales de los proyectos de Ansible. Permite a los usuarios cifrar archivos enteros o variables individuales, protegiéndolos con una contraseña. Esto asegura que incluso si el código base se ve comprometido, la información sensible permanece segura e inaccesible a usuarios no autorizados. Puedes colocar estos archivos vault en el control de código fuente o distribuirlos tal y como están cifrados.

Documentación Ansible Vault

Creando fichero Ansible Vault

ansible-vault create variables.yml

Create variables

He añadido 3 teclas como las de arriba. ( Botón ESC +:wq para guardar y salir)

Ansible vault

Si intentas ver el archivo verás que está encriptado.

La primera línea del archivo denota que está encriptado usando Ansible Vault y usando AES256 para la encriptación.

Ver el archivo Ansible Vault

ansible-vault view variables.yml

Ansible view

Se pedirá una contraseña para ver los datos del archivo.

Editar archivo Ansible Vault

ansible-vault edit variables.yml

Edit variables

Se pedirá una contraseña para editar el archivo.

Descifrar archivos cifrados

ansible-vault decrypt variables.yml

Se pedirá una contraseña para entrar  y ver el archivo descifrado con sólo abrirlo. Para cifrarlo de nuevo es con el siguiente comando.

ansible-vault encrypt variables.yml

Ansible encrypt

Cambiar contraseña

ansible-vault rekey variables.yml

Cambiar password

Se pedirá la antigua contraseña y, a continuación, una contraseña nueva a establecer. Después de un cambio de contraseña con éxito se obtiene un output como el de arriba.

Usando Variables Encriptadas en Playbook

Digamos que usted quiere encontrar los detalles de la ubicación del servidor utilizando su IP. vamos a utilizar ipgeolocation API para eso.

Crear playbook location.yml

- name: Get IP Location Details
  hosts: localhost
  connection: local
  gather_facts: no
  vars_files:
      - secrets.yml
  tasks:
    - name: Install Requests Library
      pip:
        name: requests
        state: present

    - name: Get IP location details
      uri:
        url: "https://api.ipgeolocation.io/ipgeo?apiKey={{ ipgeolocation_api_key }}&ip={{ external_ip }}"
        method: GET
        return_content: yes
      register: location_details

    - name: Print location details
      debug:
        msg: "{{ location_details.content }}"

Ahora cree un nuevo archivo de Ansible llamado secrets.yml y añada una variable como la siguiente

ansible-vault create secrets.yml
external_ip: 
ipgeolocation_api_key: ""

create secrets

Puedes ver que estamos utilizando ambas variables definidas en secrets.yml en location.yml mediante el uso de «{{ variable_name }}» notación. también hemos definido variables utilizando «vars_files».

Ahora ejecuta nuestro Playbook usando el siguiente comando

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

Se pedirá una contraseña y, a continuación, se verán los detalles del output.

Ansible location

Detalles location

De este modo, puede utilizar contraseñas de vault dentro de los playbooks.

Proporcionar Secretos desde un archivo externo

Si no quieres que se te pida la contraseña cada vez que ejecutes el playbook. puedes proporcionar una contraseña utilizando un archivo externo.

Crea un archivo llamado password.txt e introduce tu contraseña en él. como a continuación

password.txt

Ahora ejecuta Playbook utilizando el siguiente comando

ansible-playbook --vault-password-file ./password.txt location.yml

Puedes ver que funcionó y ni siquiera pidió una contraseña

ansible-playbook --vault-password-file

Incluso puedes utilizar un archivo ejecutable de Python para obtener la contraseña de la bóveda como la siguiente

ansible-playbook --vault-password-file ./password.py location.yml

Usando vault-id para crear múltiples vaults de Ansible

Crear dos vaults, uno para la dirección IP y otra para la clave API. Mantener las contraseñas para ambos vaults diferentes.

Crear un archivo llamado ipaddress.yml

ansible-vault create ipaddress.yml --vault-id ip@prompt
external_ip: 15.207.85.110

Crear otro archivo llamado apikey.yml

ansible-vault create apikey.yml --vault-id api@prompt
ipgeolocation_api_key: ""

Ahora vamos a editar el location.yml playbook como a continuación. (Sólo estamos actualizando el campo «vars_files»).

- name: Get IP Location Details
  hosts: localhost
  connection: local
  gather_facts: no
  vars_files:
      - ipaddress.yml
      - apikey.yml
  tasks:
    - name: Install Requests Library
      pip:
        name: requests
        state: present

    - name: Get IP location details
      uri:
        url: "https://api.ipgeolocation.io/ipgeo?apiKey={{ ipgeolocation_api_key }}&ip={{ external_ip }}"
        method: GET
        return_content: yes
      register: location_details

    - name: Print location details
      debug:
        msg: "{{ location_details.content }}"

Ahora para ejecutar playbook location.yml, necesita valores variables de ambos archivos. Como ambos archivos tienen diferentes contraseñas necesitamos proporcionar dos contraseñas. podemos hacer esto usando un comando como el siguiente.

ansible-playbook location.yml --vault-id ip@prompt --vault-id api@prompt

Ansible múltiples vaults

Puedes ver que el Playbook de arriba fue exitoso. y pidió dos contraseñas.

si pasa solo una contraseña fallará como abajo

Ansible

De este modo, al utilizar Ansible Vault, puede gestionar de forma segura información confidencial, como nombres de usuario y contraseñas de bases de datos, claves de API y archivos de configuración.

Publicado originalmente en https://anujdube.com/

Más apuntes

Invítame a un café con bitcoins:
1QESjZDPxWtZ9sj3v5tvgfFn3ks13AxWVZ

Bitcoins para café
También puedes invitarme a algo para mojar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena este campo
Rellena este campo
Por favor, introduce una dirección de correo electrónico válida.
Tienes que aprobar los términos para continuar