En esta guía, aprenderemos sobre HashiCorp Vault, cómo levantarlo usando Docker, y cómo integrarlo con una aplicación Node.js para gestionar secretos de manera segura. 😎
🤔 ¿Qué es HashiCorp Vault?
HashiCorp Vault es una herramienta para gestionar secretos y proteger datos sensibles. Permite almacenar, acceder y gestionar secretos de manera segura, centralizada y auditada. Vault se utiliza comúnmente para manejar:
- Credenciales de Bases de Datos: Almacena y rota credenciales de bases de datos.
- Tokens de API: Gestiona y revoca tokens de acceso.
- Certificados TLS: Almacena y renueva certificados digitales.
- Secretos Generales: Almacena contraseñas y otros datos sensibles.
Principales Características:
- Seguridad: Vault cifra secretos en reposo y en tránsito. 🔐
- Control de Acceso: Usa políticas detalladas para controlar quién puede acceder a qué secretos. 👮
- Auditoría: Registra todas las operaciones realizadas en Vault para auditoría y cumplimiento. 📝
🛠️ Casos Prácticos de Uso
- Gestión de Credenciales: Genera y gestiona credenciales temporales para bases de datos y servicios. 🗝️
- Autenticación Dinámica: Proporciona credenciales bajo demanda para servicios en la nube o bases de datos. ☁️
- Encriptación como Servicio: Usa Vault para cifrar datos sin necesidad de gestionar la infraestructura de cifrado. 🔒
- Rotación de Secretos: Automatiza la rotación de contraseñas y credenciales para mejorar la seguridad. 🔄
🛠️ Tipos de Ejecución de Vault
Modo de Desarrollo 🛠️
Para pruebas y desarrollo, puedes ejecutar Vault en modo de desarrollo utilizando el archivo binario. Este modo es ideal para experimentar y aprender sobre Vault sin complicaciones.
Modo VM 🖥️
En este modo, Vault se ejecuta como una máquina virtual. Es adecuado para configurar un clúster de 3 a 5 nodos, donde uno actúa como líder y los demás como seguidores. Este enfoque proporciona una configuración más robusta y escalable.
Pod de Kubernetes 🚀
Despliega Vault como un pod en Kubernetes. Dado que los secretos en Kubernetes solo están codificados en base64, Vault garantiza una gestión segura de los secretos y proporciona un nivel adicional de seguridad.
Motores de Secretos
Vault ofrece una variedad de motores de secretos ⚙️ que permiten realizar tareas como almacenar, generar y cifrar datos de manera eficiente. Estos motores proporcionan diferentes funcionalidades según las necesidades específicas de seguridad y gestión de secretos.
Motores Comunes
- kv (Key-Value): Permite almacenar y gestionar pares de clave-valor para secretos generales.
- Certificados PKI: Facilita la generación y gestión de certificados digitales.
- SSH: Administra credenciales para acceder a sistemas SSH.
- Transit: Ofrece cifrado y descifrado de datos sin necesidad de gestionar claves de cifrado directamente.
- TOTP (Time-based One-Time Password): Genera contraseñas de un solo uso basadas en tiempo para autenticación de dos factores.
- LDAP: Integra Vault con servidores LDAP para autenticar usuarios.
- Kubernetes: Administra secretos y accesos en clústeres de Kubernetes.
Categorías de Motores
Estos motores están organizados en dos categorías principales:
- Nube ☁️: Motores relacionados con servicios de nube, como AWS, Azure y Google Cloud.
- Infraestructura 🏗️: Motores que gestionan servicios y sistemas de infraestructura, como Consul, bases de datos y RabbitMQ.
Cada motor de secretos está diseñado para abordar un conjunto específico de casos de uso y proporciona herramientas poderosas para asegurar la gestión de datos sensibles en diferentes entornos.
Casos de Uso
Vault es una herramienta versátil 🔒, utilizada para almacenar de manera segura información como credenciales bancarias, puntos de recompensa y cifrado de datos sensibles.
Despliegue Empresarial
En entornos empresariales 🌐, Vault se usa para recuperación ante desastres y para mejorar el rendimiento a través de regiones y nubes. Desde la perspectiva de Kubernetes, Vault se considera una aplicación que requiere soporte para la malla de servidores y debe ejecutarse en cada nodo.
🚀 Configuración Básica de Vault con Docker 🛠️
📦 Estructura del Proyecto
Organizaremos el proyecto con la siguiente estructura:
Para comenzar, clona el repositorio desde GitHub, donde se encuentra todo lo necesario para desplegar Vault usando Docker Compose.
git clone https://github.com/francotel/vault-docker-starter.git
cd vault-docker-starter
.
├── README.md
├── config
│ └── config.json
├── docker-compose.yaml
├── vault-init.sh
└── volumes
└── vault
└── file
5 directories, 4 files
Revisar el README.md para ver los pasos a seguir, adjunto imagenes referenciales:
> vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.13.3
Build Date 2023-06-06T18:12:37Z
Storage Type inmem
Cluster Name vault-cluster-2b8faeca
Cluster ID 846ea79d-6707-a5a2-dc6b-6ebfe2ac8fd3
HA Enabled false
acceder al 127.0.0.1:8200 pass root
al ejecutar el docker compose este setea unas configuraciones iniciales
🤖 ¡Demo de aplicación!
Generamos un token que use la política myapp-policy
(ya existe en el servidor) y que tenga una duración de 1 hora (ttl=1h
):
> vault token create -policy="myapp-policy" -ttl=1h
Key Value
--- -----
token hvs.CAESIAzjqJ-2SqWthoMm0GoHw8XPk629jPaZSg5qSEQ_2gYSGh4KHGh2cy5yQ2l3OUVKM3NMbHlITE92R01vNkczYno
token_accessor xCD32UI8NAkeBRkZ6RKn43wN
token_duration 1h
token_renewable true
token_policies ["default" "myapp-policy"]
identity_policies []
policies ["default" "myapp-policy"]
Guardamos el token para la demo, nos fijamos en el repo la carpeta "app" que tiene el contenido de la aplicación:
> tree
.
├── Dockerfile
├── app.py
├── index.html
└── requirements.txt
y ejecutamos el docker para levantar la aplicación:
cd app
docker build -t py-vault .
docker run -p 5000:5000 py-vault
🚀 ¡Pronto Más Contenido sobre Vault!
Este es solo el comienzo. En futuros posts, exploraremos temas más avanzados de Vault, como:
- 🔒 Integración de Vault con Kubernetes.
- 📊 Gestión de políticas y control de acceso avanzado.
- 🛡 Automatización de secretos con Terraform y Vault.
¡No te lo pierdas! Sígueme en LinkedIn para estar al tanto de todas las actualizaciones y futuros artículos:
☕ Apóyame con un café
Si este contenido te ha sido útil y quieres apoyarme para seguir creando más, considera invitarme un café. ¡Tu apoyo hace la diferencia! 🥰
¡Gracias por leer y hasta la próxima! 👋