Home » Probando Vault en Docker

Probando Vault en Docker

Hashicorp Vault es muy sencillo levantarlo en una máquina virtual, pero esto podría tomar un tiempo y esfuerzo no menor. En cambio, con Docker y Docker Compose se puede hacer uso de Vault en menos de 10 minutos con los pasos mostrados en esta guía.

Si te has ya interesado en Hashicorp Vault y quieres practicar con él, entonces este post «Probando Vault en Docker» es seguramente lo que buscas.

En una anterior oportunidad, escribí otro artículo inicial titulado Instalación de Hashicorp Vault. Este es bastante simple y describe ya varios conceptos básicos para una instalación hecha en una máquina virtual Linux. Sin embargo, se requiere tener un equipo Linux dedicado para tal fin.

¿Y qué si solo deseo probarlo temporalmente? Una máquina virtual entera para ese propósito no lo amerita. Mejor es experimentar con Vault en un entorno de contenedores con Docker, razón por la cual preparé este artículo hoy.

1. Requerimientos

Como ya puedes adivinar, el principal requerimiento para poner en práctica lo indicado en esta guía es contar con acceso a un equipo que tenga Docker instalado.

Puedes guiarte de este enlace para instalar Docker en Windows, o este otro para instalarlo en Mac. Si estás en Linux, revisa esta página para encontrar la guía adecuada, según tu distribución en uso.

Importante: En todos los casos, asegúrate que docker-compose se instale también.

2. Configuración en Docker Compose

Como el título lo indica, instalaré Hashicorp Vault con Docker Compose, pues es la opción más sencilla.

2.1. Vault en modo Desarrollo

Crea un archivo docker-compose.yaml sencillo con un contenido como este:

---
services:
  vault:
    image: hashicorp/vault:latest
    container_name: vault
    environment:
      VAULT_DEV_ROOT_TOKEN_ID: TokenSeguroAleatorio
      VAULT_ADDR: http://localhost:8200
      VAULT_TOKEN: $VAULT_DEV_ROOT_TOKEN_ID
    ports:
      - 8200:8200

Cuando Vault arranca en modo Desarrollo, los datos no son persistentes y la conexión es solo por HTTP (sin TLS). Esto quiere decir que, mientras el contenedor de Vault esté en ejecución, puedo escribir y leer datos en Vault. Luego que el contenedor se reinicia, se pierden los datos y configuraciones hechas anteriormente.

Además, en modo Desarrollo, yo mismo puedo definir cuál será el token de root a usar. Este mismo lo he definido como TokenSeguroAleatorio, el que en realidad debería tener un valor distinto definido por ti mismo.

Luego de crear esta configuración, ya puedes iniciar Docker compose y luego conectarte al servicio vía Web UI autenticándote con el token antes configurado.

docker compose up -d
Inicio de sesión en Vault Web UI en localhost

2.2. Vault en modo No-Desarrollo

En la documentación de Hashicorp Vault, no existe un tal modo llamado «No-Desarrollo». Pero hago mención a esto para diferenciar que no usaré el modo Desarrollo en esta configuración. Esto me permite:

  • Persistir las configuraciones y datos escritos en Vault.
  • Tras el reinicio del contenedor de Vault, no se pierde lo ya creado y configurado.
  • Vault debe ser inicializado con llaves Shamir y debo guardar los archivos de datos de Vault en un volumen o ruta local de mi host.

Esta forma de configuración es ideal si deseo probar Hashicorp Vault no solo por un rato, sino durante varios días y/o semanas, sin perder lo que he ido avanzando en mis configuraciones y datos.

Para ello, creo un archivo docker-compose.yaml con un contenido similar a este:

---
volumes:
  vault:

services:
  vault:
    image: hashicorp/vault:latest
    container_name: vault
    environment:
      VAULT_ADDR: http://localhost:8200
    command:
      - server
    ports:
      - 8200:8200
    volumes:
      - vault:/vault/file
      - ./vault.hcl:/vault/config/vault.hcl

Las diferencias con el anterior son que:

  • Se crea un volumen y se monta dentro del contenedor en /vault/file
  • Solo se define la variable de entorno VAULT_ADDR
  • Se pasa el parámetro server al comando de arranque del contenedor, para que así no inicie en modo Desarrollo
  • Se monta un archivo local vault.hcl dentro de /vault/config/vault.hcl con la configuración de Vault

El último punto hace referencia al archivo vault.hcl el cual debe crearse con un contenido mínimo como este:

ui = true

storage "file" {
  path    = "/vault/file"
}

listener "tcp" {
  address     = "0.0.0.0:8200"
  tls_disable = 1
}

La configuración de Vault arriba mostrada es bastante básica. Si gustas, puedes agregarle más opciones, como las que habilitan el TLS con certificados digitales, o algunos otros valores que necesites. Pero para fines prácticos, es más que suficiente.

Importante:

  • Con esta configuración de Vault y Docker Compose, los datos de Vault se almacenan en un volumen, el cual persiste a múltiples reinicios del contenedor.
  • Vault iniciará sin estar inicializado. Esto quiere decir que hay que entrar al contenedor y correr un comando como el siguiente:
vault operator init
  • Como se explicó en un post anterior, luego de la inicialización, hay que tomar nota del token de root y las llaves Shamir. Con dichas llaves se hace el proceso de unsealing usando este comando:
vault operator unseal
  • Una vez inicializado y desbloqueado (unsealed), se puede ya iniciar sesión en Vault vía CLI o Web UI con el token de root inicial.

Conclusión

Este fue un post corto y práctico, que buscó ir directo a la explicación de cómo probar Hashicorp Vault en tu equipo con Docker en unos pocos minutos.

Personalmente, esta es la opción que prefiero para hacer pruebas o demostraciones rápidas de casos de uso de Vault con clientes o incluso para documentar algunos procesos para mí mismo.

Espero te sea de utilidad la información aquí compartida hoy.

Post navigation

Deja un comentario

Deja una respuesta

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