CodeGym /Cursos /Módulo 5. Spring /Lección 226: Protección de datos confidenciales: uso de V...

Lección 226: Protección de datos confidenciales: uso de Vault

Módulo 5. Spring
Nivel 23 , Lección 5
Disponible

En esta lección nos sumergiremos en el mundo de la protección de los "tesoros" de nuestra aplicación: secretos, tokens, claves API y otros datos confidenciales. Hoy vamos a hablar de HashiCorp Vault!

Imagina: por accidente haces push a GitHub con la contraseña de la base de datos. En 30 minutos tu producción cae — alguien está minando criptomonedas en tus servidores.

Y ahora imagina que tienes:

  • 20 microservicios
  • En cada uno — sus propias contraseñas y claves
  • Tres entornos (dev, test, prod)
  • Un equipo de 10 desarrolladores

Cómo suelen almacenarse los secretos (y por qué eso es malo)

Opción 1: En el código

String dbPassword = "super_secret_123"; // Por favor, no hagas esto!

Tarde o temprano eso llegará a Git. Y entonces... ver la historia del minado de criptomonedas arriba.

Opción 2: En archivos de configuración

database:
password: another_secret_123 # Tampoco es la mejor idea

Los mismos problemas que con el código. Además hay que repartir esos archivos entre los desarrolladores.

Opción 3: En variables de entorno

export DB_PASSWORD=yet_another_secret

¡Mejor! Pero ¿cómo gestionar cientos de variables en decenas de servidores?


HashiCorp Vault viene al rescate

Vault es como una caja fuerte para tus secretos. ¡Pero inteligente! Veamos qué hace:

  • Sabe quién y cuándo abrió la caja fuerte
  • Puede cambiar claves y contraseñas automáticamente
  • Puede trabajar con distintos tipos de secretos
  • Se integra con Spring Boot (y no sólo)

¿Qué puede hacer Vault?

1. Almacenar secretos de forma centralizada

  • Se acabaron los archivos .env en cada servidor
  • Todos los secretos en un solo lugar
  • El acceso está estrictamente controlado

2. Generar datos temporales


{
"db_credentials": {
"username": "app_1234",
"password": "temp_pass_5678",
"ttl": "1h"
}
}

En una hora esos datos dejarán de ser válidos. ¡Automáticamente!

3. Llevar auditoría

  • ¿Quién solicitó la contraseña de la base?
  • ¿Cuándo se actualizaron por última vez las API-keys?
  • ¿Qué servicio usa credenciales obsoletas?

Integración con Spring Boot

Spring Boot + Vault = ♥️

Se ve más o menos así:


spring:
cloud:
vault:
host: vault.company.com
token: my-token
Y ahora en el código:

@Value("${secret.db.password}")
private String dbPassword; // ¡Lo obtenemos mágicamente desde Vault!

Funciones principales de Vault

Vault ofrece un montón de funcionalidades, aquí algunas:

Función Descripción
Generación dinámica Generación de credenciales temporales para bases de datos, API y otros servicios
Gestión de claves Almacenamiento y rotación de claves de cifrado
Secrets como servicio Almacén centralizado de datos confidenciales
Políticas de acceso Control de acceso basado en roles
Auditoría Logs de acceso a secretos y operaciones

Vault soporta distintos backends de almacenamiento (tanto sistemas de archivos como proveedores cloud) para gestionar secretos.


Soluciones alternativas

¿Y por qué Vault? Comparemos con otras soluciones populares:

AWS Parameter Store

  • Funciona genial en AWS
  • Gratis (casi)
  • Pero está ligado a Amazon

Apache ZooKeeper

  • Probado por el tiempo
  • Escala muy bien
  • Pero es complejo de configurar
  • Y los secretos no son su objetivo principal

Etcd

  • El favorito de Kubernetes
  • Rápido y fiable
  • Pero más orientado a configuraciones que a secretos

HashiCorp Vault

  • Creado específicamente para secretos
  • Funciona bien en cualquier sitio
  • Sabe trabajar con secretos dinámicos
  • Se integra con prácticamente todo

Tipos de almacenes en Vault

Key-Value (KV)

  • Almacenamiento simple key-value
  • Ideal para contraseñas y claves API
  • Soporta versionado

Base de datos

  • Credenciales dinámicas para DB
  • Rotación automática de contraseñas
  • Soporta PostgreSQL, MySQL, MongoDB y otros

PKI

  • Generación de certificados SSL/TLS
  • Gestión de CA raíz e intermedias
  • Renovación automática

Un poco más sobre la integración de HashiCorp Vault con Spring

Spring Boot usa la configuración en application.properties o application.yml para conectarse a Vault. Tras la conexión, la aplicación puede cargar secretos como si fueran propiedades normales.

Ejemplo de uso:

  1. Secretos en Vault (por ejemplo, en la ruta secret/data/myapp):
    
    {
        "data": {
            "username": "admin",
            "password": "s3cr3t"
        }
    }
    
  2. Acceso a secretos en Spring Boot:
    
    spring:
      cloud:
        vault:
          uri: http://localhost:8200
          token: my-root-token
          kv:
            enabled: true
            backend: secret
            default-context: myapp
    

    Los secretos ahora están disponibles en la app como propiedades username y password. Por ejemplo, puedes usarlos en @Value:

    
    public class Credentials {
    
        @Value("${username}")
        private String username;
    
        @Value("${password}")
        private String password;
    
        // Getters, setters o simplemente un método para la lógica
    }
    

¿Qué problemas resuelve Vault?

1. Seguridad

  • Los secretos no se almacenan en el código
  • Cada uno recibe sólo los datos que necesita
  • Todas las acciones quedan registradas

2. Automatización

  • Cambio automático de contraseñas
  • Integración con CI/CD
  • API para todo

3. Escalabilidad

  • Funciona tanto con un servicio como con miles
  • Soporta clustering
  • Se integra con nubes

¿Qué sigue?

HashiCorp Vault es una herramienta potente que te permite gestionar datos confidenciales con la máxima seguridad. Al configurarlo en tu aplicación, no sólo protegerás los datos de forma fiable, sino que además podrás dormir tranquilo sabiendo que ninguna clave API se vaya a filtrar por accidente en tu repositorio. En la próxima lección vamos a:

  • Instalar Vault
  • Configurar la integración con Spring Boot
  • Aprender a almacenar y recuperar secretos
  • Ver todo esto en acción
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION