DEV Community

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

Posted on

5 1

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

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! 👋

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more