Seguridad de nube e infraestructura

Gestión de secretos

Se lee en aproximadamente 3 minutos

Qué es la gestión de secretos

La gestión de secretos (Secret Management) es el mecanismo para almacenar, distribuir y rotar de forma segura información confidencial como contraseñas, claves API, cadenas de conexión de bases de datos, claves privadas de certificados TLS y claves de cifrado.

La filtración de secretos conduce directamente a incidentes de seguridad graves. Los casos donde claves de acceso AWS commiteadas en repositorios públicos de GitHub son detectadas por bots en minutos y utilizadas fraudulentamente ocurren cotidianamente. El propósito de la gestión de secretos es separar la información confidencial del código y archivos de configuración, y realizar de manera centralizada el control de acceso, la auditoría y la rotación automática.

Herramientas de gestión de secretos y criterios de selección

Para la gestión de secretos se utilizan herramientas y servicios dedicados. Las variables de entorno o el hardcoding en código deben evitarse por su alto riesgo de filtración y falta de auditabilidad.

  • HashiCorp Vault: Herramienta de gestión de secretos de código abierto. Generación de secretos dinámicos (credenciales desechables), políticas de acceso granulares y múltiples backends de autenticación. Adecuado para entornos multi-nube
  • AWS Secrets Manager: Servicio nativo de AWS. Fácil integración con servicios AWS como RDS y Redshift, con función de rotación automática estándar. También permite implementar lógica de rotación personalizada con funciones Lambda
  • AWS Systems Manager Parameter Store: Almacén simple de clave-valor. Más económico que Secrets Manager, permite gestión integrada de valores de configuración y secretos. Sin función de rotación automática pero suficiente para entornos pequeños

Los criterios de selección son: necesidad de rotación automática, compatibilidad multi-nube, integración con infraestructura existente y costo. La premisa es controlar el acceso a secretos con mínimo privilegio en integración con IAM.

Gestión del ciclo de vida de secretos

Los secretos no son "crear y olvidar"; es necesario gestionar todo su ciclo de vida.

  • Generación: Generar valores aleatorios con suficiente entropía. No usar contraseñas pensadas por humanos ni patrones predecibles
  • Distribución: Al pasar secretos a aplicaciones, usar inyección en variables de entorno, montaje de archivos u obtención vía API. No compartir secretos por Slack o correo
  • Rotación: Actualizar secretos periódicamente. Contraseñas de bases de datos cada 90 días, claves API según el uso. Para rotar sin tiempo de inactividad, adoptar el patrón de secreto dual que mantiene temporalmente válidos tanto el antiguo como el nuevo
  • Expiración: Desactivar y eliminar rápidamente los secretos que ya no se necesitan. Rotar inmediatamente los secretos que conocían los exempleados

No escribas secretos en código IaC; diseña para obtenerlos dinámicamente del servicio de gestión de secretos al desplegar. En entornos de contenedores, puedes integrar con almacenes de secretos externos usando External Secrets Operator de Kubernetes.

Detección y respuesta ante filtración de secretos

También es importante tener mecanismos para detectar tempranamente la filtración de secretos y minimizar el daño.

  • Escaneo de secretos en Git: Detectar la inclusión de secretos antes del commit o al hacer push con herramientas como git-secrets, truffleHog y GitHub Secret Scanning. Integrar en hooks pre-commit es lo más efectivo
  • Detección en tiempo de ejecución: Monitorear si los secretos se están emitiendo en los registros de la aplicación. Usar bibliotecas que enmascaren automáticamente los secretos al emitir registros
  • Procedimiento de respuesta ante filtración: Al detectar la filtración de un secreto, desactivar inmediatamente ese secreto y emitir uno nuevo. Investigar el alcance del impacto y verificar en los registros cifrados si hay rastros de uso fraudulento

Basándose en el enfoque de confianza cero, minimiza los permisos por secreto y establece períodos de validez cortos como defensa básica para limitar el daño incluso si un secreto se filtra.

Conceptos erróneos comunes

Si almacenas secretos en variables de entorno, están seguros
Las variables de entorno pueden filtrarse desde el sistema de archivos /proc del proceso, volcados de memoria y salida de registros. Las variables de entorno pueden usarse como medio temporal de transferencia de valores obtenidos del servicio de gestión de secretos, pero no son adecuadas como lugar de almacenamiento permanente.
Si cifras los secretos y los commiteas al repositorio, no hay problema
La gestión de la clave de cifrado se convierte en un nuevo desafío, y si la clave se filtra, todos los secretos se descifran. Además, los secretos permanecen en el historial de Git, por lo que al rotar claves también hay que abordar los commits pasados. Se deben usar servicios dedicados de gestión de secretos.

Términos relacionados

Artículos relacionados