Guía Rápida: Levantar HashiCorp Vault en Docker y Acceder a Secretos desde una Aplicación Python

francotel - Sep 4 - - Dev Community

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

  1. Gestión de Credenciales: Genera y gestiona credenciales temporales para bases de datos y servicios. 🗝️
  2. Autenticación Dinámica: Proporciona credenciales bajo demanda para servicios en la nube o bases de datos. ☁️
  3. Encriptación como Servicio: Usa Vault para cifrar datos sin necesidad de gestionar la infraestructura de cifrado. 🔒
  4. Rotación de Secretos: Automatiza la rotación de contraseñas y credenciales para mejorar la seguridad. 🔄

vault

🛠️ 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.

get secret

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
Enter fullscreen mode Exit fullscreen mode
.
├── README.md
├── config
│   └── config.json
├── docker-compose.yaml
├── vault-init.sh
└── volumes
    └── vault
        └── file

5 directories, 4 files
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

acceder al 127.0.0.1:8200 pass root

vault ui

al ejecutar el docker compose este setea unas configuraciones iniciales

vault ui 2

vault ui 3

tipo de motores de secretos
vault engine

tipo de accesos
vault access

Vault Policy
vault policy

🤖 ¡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"]
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

y ejecutamos el docker para levantar la aplicación:

cd app
docker build -t py-vault .
docker run -p 5000:5000 py-vault
Enter fullscreen mode Exit fullscreen mode

py vault

app ui

mysql secrets

🚀 ¡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:

LinkedIn

☕ 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! 🥰

BuyMeACoffee


¡Gracias por leer y hasta la próxima! 👋

. . . . . . . . . . . . . . . . . . . . . .