Marcio Cunha

Cómo gestionar secretos en Kubernetes con Vault paso a paso

Aprende a integrar HashiCorp Vault en Kubernetes usando External Secrets Operator para garantizar inyección dinámica y segura de credenciales en producción.

Marcio Cunha•5 min
También disponible en:PortuguêsEnglish
Resumen
  • El almacenamiento estándar de credenciales en Kubernetes es inseguro porque usa solo codificación Base64 y queda vulnerable a brechas en etcd.
  • HashiCorp Vault centraliza la custodia de datos sensibles, permitiendo la generación dinámica de accesos con tiempo de vida reducido.
  • External Secrets Operator actúa como puente en el clúster, sincronizando información desde el cofre externo hacia recursos nativos.
  • La rotación automatizada de credenciales elimina la intervención manual y reduce drásticamente la superficie de ataque en producción.
  • La inyección basada en memoria efímera evita que las llaves sensibles queden grabadas permanentemente en discos de nodos comprometidos.

Por qué el modelo predeterminado de secretos falla en producción

Gestionar datos sensibles, como contraseñas de bases de datos y certificados SSL, es uno de los mayores desafíos al operar sistemas modernos distribuidos. En el ecosistema nativo de la nube, Kubernetes utiliza un recurso llamado Secret para almacenar esta información. En la práctica, esto significa que cualquier llave que tu aplicación necesite para funcionar se guarda en texto plano, disfrazada únicamente por una codificación básica llamada Base64, que cualquier persona puede revertir en segundos. Para empeorar el escenario, estas credenciales se guardan en una base de datos central del clúster llamada etcd, generalmente sin cifrado en reposo por defecto en instalaciones estándar. Si un atacante logra leer esta base de datos o vulnera un pod vecino con amplios permisos, obtendrá acceso total a toda tu infraestructura.

Para blindar entornos productivos contra este tipo de vulnerabilidades, las empresas adoptan herramientas dedicadas de gestión de identidad y cifrado, siendo HashiCorp Vault el estándar de la industria más robusto. Vault funciona como una caja fuerte digital altamente blindada que centraliza la custodia de contraseñas, llaves de API y certificados. Hace mucho más que solo guardar datos: es capaz de generar credenciales bajo demanda, proporcionando un usuario y contraseña temporales para la base de datos que expiran automáticamente tras unos minutos. Este enfoque minimiza drásticamente el impacto si un token es interceptado en la red. Si quieres aprender a estructurar aplicaciones modernas con alta confiabilidad operativa, te recomendamos revisar nuestra guía sobre cómo diseñar microservicios desacoplados con Domain-Driven Design.

Cómo External Secrets Operator conecta el cofre al clúster

Aunque Vault es excelente para almacenar secretos, no habla directamente el lenguaje nativo de la API de Kubernetes. Aquí es exactamente donde entra External Secrets Operator, un controlador inteligente instalado dentro de tu clúster que actúa como un puente de comunicación. En la práctica, monitorea los recursos que defines y busca los datos protegidos directamente en el cofre externo, inyectándolos de forma automatizada en el ecosistema local. Esto te permite seguir usando la estructura estándar de configuración de tu aplicación sin necesidad de reescribir código de inicialización para comunicarte con APIs complejas de terceros.

El funcionamiento de este puente se basa en dos conceptos principales: el SecretStore, que define dónde debe conectarse el operador y cómo autenticarse en el cofre, y el ExternalSecret, que especifica exactamente qué datos buscar y en qué secreto local deben transformarse. Al aplicar estos archivos de configuración en tu clúster, el operador realiza una solicitud segura mediante protocolos cifrados, obtiene la contraseña actualizada y crea el objeto correspondiente en Kubernetes. Para asegurar que este flujo de automatización funcione perfectamente junto al resto de tu infraestructura, también puedes explorar las recomendaciones de nuestro artículo sobre cómo usar GitOps para gestionar clusters Kubernetes.

Implementando la inyección dinámica paso a paso

Para llevar esta arquitectura a la práctica, el primer paso consiste en configurar la autenticación entre tu clúster de Kubernetes y Vault, utilizando normalmente las cuentas de servicio nativas (Service Accounts) para garantizar que solo los pods autorizados obtengan tokens. A continuación, debes instalar el operador de sincronización utilizando administradores de paquetes o manifiestos directos. A continuación, observa un ejemplo práctico de configuración de un recurso que instruye al operador a buscar una llave de API en el cofre externo y guardarla localmente.

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: database-secret
  namespace: produccion
spec:
  refreshInterval: '1h'
  secretStoreRef:
    name: vault-backend
    kind: SecretStore
  target:
    name: app-db-credentials
    creationPolicy: Owner
  data:
    - secretKey: password
      remoteRef:
        key: secret/data/produccion/postgres
        property: password

Tras aplicar este manifiesto, el operador ejecuta el ciclo de búsqueda de forma periódica, garantizando que cualquier cambio realizado en el cofre central se refleje en el entorno de ejecución sin requerir reinicios manuales de la aplicación. No obstante, es importante monitorear los registros del controlador para identificar posibles fallas de permisos o indisponibilidad temporal de red entre los servidores.

Buenas prácticas de seguridad para entornos productivos

Operar secretos a gran escala exige disciplina y rigor con los permisos de acceso concedidos a cada componente del sistema. Una regla de oro fundamental es el principio de mínimo privilegio, que determina que cada microservicio debe visualizar exclusivamente las llaves estrictamente necesarias para su funcionamiento, sin tener acceso jamás a credenciales de otros módulos. Asimismo, evita almacenar secretos en variables de entorno tradicionales dentro de los archivos de manifiesto de los pods, ya que cualquier herramienta de monitoreo o proceso de diagnóstico de errores puede exponer esta información accidentalmente en los registros del sistema operativo.

Otra práctica esencial para garantizar la integridad del clúster es la rotación periódica de certificados y llaves de acceso. Con el uso combinado de Vault y External Secrets, puedes configurar políticas para que los tokens de base de datos y certificados de seguridad expiren automáticamente cada pocas horas. Cuando la credencial expira, el operador busca una versión nueva y actualiza el objeto en Kubernetes, activando un reinicio elegante de los pods afectados. Esta rutina garantiza que, incluso si una llave antigua es comprometida durante una filtración de datos, su ventana útil de explotación por agentes malintencionados sea sumamente corta.

Consideraciones finales sobre resiliencia y operación

Adoptar una estrategia robusta de gestión de credenciales transforma la postura de seguridad de cualquier organización que utiliza Kubernetes en entornos productivos. Aunque la curva de aprendizaje inicial para configurar Vault y External Secrets pueda parecer compleja, los beneficios en términos de auditoría, cumplimiento normativo y tranquilidad operativa superan ampliamente el esfuerzo de implementación. Mantener las llaves fuera del control de versiones y automatizar la inyección dinámica blinda la aplicación frente a descuidos humanos cotidianos.

En última instancia, la seguridad de la información en la nube no depende de una única herramienta milagrosa, sino de una arquitectura en capas donde las fallas puntuales se aíslan y contienen con rapidez. Al eliminar credenciales estáticas y adoptar ciclos de vida cortos para contraseñas y certificados, tu equipo de ingeniería obtiene la estabilidad necesaria para escalar sistemas complejos con absoluta confianza en el comportamiento operativo de los servicios en producción.