Probando Vault en Docker
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
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.
Deja un comentario