Skip to content
BotServBotServ
DockerSecretsSeguridadEnvCompose

Usar Docker Secrets correctamente

Gestiona Secrets en Docker y Compose de forma segura. Archivos env, Docker Secrets, Vault y mejores prácticas.

S

schutzgeist

3 min read
Usar Docker Secrets correctamente

Gestionar correctamente los secretos en Docker

Qué cubre este artículo sobre Docker Secrets

  • Por qué los secretos en Docker necesitan protección.
  • Qué opciones existen.
  • Cómo funcionan los Docker Secrets en Swarm.
  • Cómo usar archivos .env de forma segura.
  • Alternativas como Vault, Infisical o dotenvx.

Introducción: Gestionar correctamente los secretos en Docker

Los contenedores necesitan frecuentemente contraseñas, claves de API, tokens o certificados. Estos secretos no deben acabar en la imagen, en el contexto de compilación o en el control de versiones. Docker ofrece varios mecanismos para proteger estos datos. Conocer las diferencias evita que información confidencial se exponga en imágenes, logs o backups.

Este artículo muestra cómo manejar secretos de forma segura en Docker y Compose.

Conceptos clave

  • Secret: Información confidencial como contraseña o clave de API.
  • Docker Secret: Secreto gestionado en Swarm.
  • Archivo Env: Fichero con variables de entorno.
  • Build Secret: Secreto disponible solo durante la compilación.
  • Mount: Montar un secreto en un contenedor.
  • Vault: Solución especializada para gestionar secretos.
  • Rotation: Renovación periódica de secretos.
  • Secret Injection: Proporcionar secretos en tiempo de ejecución.

Qué no hacer

Evita estos errores:

  • Establecer secretos en el Dockerfile con ENV.
  • Escribir contraseñas directamente en compose.yaml.
  • Almacenar archivos .env en el repositorio.
  • Mostrar secretos en logs.
  • Subir imágenes con secretos incrustados.

Cualquiera de estos errores puede provocar un incidente de seguridad.

Archivos Env

Un archivo .env es el forma más simple de proporcionar variables de entorno:

services:
  app:
    image: mein-image
    env_file:
      - .env

Añade .env a .gitignore y realiza copias de seguridad o encriptación regularmente.

Ejemplo de Compose con Env

services:
  db:
    image: postgres:16
    environment:
      - POSTGRES_PASSWORD_FILE=/run/secrets/db_password
    secrets:
      - db_password

secrets:
  db_password:
    file: ./db_password.txt

El archivo db_password.txt contiene la contraseña en texto plano. No debe estar en el repositorio.

Docker Secrets en Swarm

En modo Swarm, los secretos se pueden gestionar centralmente:

echo "meinpasswort" | docker secret create db_password -

En Compose:

services:
  db:
    image: postgres:16
    secrets:
      - db_password
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password

secrets:
  db_password:
    external: true

Los secretos se proporcionan como archivos en /run/secrets/.

Build Secrets

Los build secrets se utilizan durante la compilación y no permanecen en la imagen final:

# syntax=docker/dockerfile:1.7
FROM python:3.11-slim
RUN --mount=type=secret,id=pipconf \
    PIP_CONFIG_FILE=/run/secrets/pipconf \
    pip install -r requirements.txt

Compilación:

docker build --secret id=pipconf,src=./pip.conf .

Evitar secretos en logs de contenedores

  • Nunca mostres secretos en comandos print o echo.
  • Establece el nivel de logging en INFO o superior.
  • Escanea logs en busca de patrones sensibles.

Alternativas

HashiCorp Vault

Gestión centralizada, secretos dinámicos, rotación automática.

Infisical

Alternativa open-source con buena integración con Docker.

dotenvx

Archivos .env encriptados con clave compartida.

Mozilla SOPS

Encriptación de archivos de secretos en Git.

Estrategia de rotación

  • Renueva secretos periódicamente.
  • Automatiza la rotación donde sea posible.
  • Desactiva claves antiguas antes de desplegar las nuevas.
  • Ten procedimientos de emergencia ante sospechas de filtración.

Consejos prácticos

  • Protege los archivos .env en el host.
  • Principio de mínimos privilegios: solo secretos necesarios en el contenedor.
  • Restringe permisos: chmod 600 .env.
  • Nunca almacenes secretos sin encriptar en backups.
  • Mantén un registro de auditoría.
  • Usa un Vault centralizado para configuraciones mayores.

Errores comunes

  • .env en Git: Todos con acceso ven los secretos.
  • Secretos en cache de compilación: Build secrets mal configurados.
  • Logs exponen información: Contraseñas en mensajes de error.
  • Permisos incorrectos: .env es legible para todos.
  • Secretos estáticos: Contraseñas nunca rotadas.
  • Memory dumps de contenedores: Los volcados contienen secretos.

Enlaces y recursos adicionales

Preguntas frecuentes: Docker Secrets

¿Qué son Docker Secrets? Valores confidenciales gestionados especialmente, en particular en Swarm.

¿Son seguros los archivos .env? Solo si permanecen localmente, están protegidos y no llegan a Git.

¿Puedo usar Secrets en Compose sin Swarm? Sí, mediante archivos en /run/secrets y Bind Mounts.

¿Qué es un Build Secret? Un secreto disponible solo durante la compilación que no aparece en la imagen final.

¿Debería usar Vault? Para configuraciones grandes o profesionales sí, para homelabs pequeños bastan .env o SOPS.

Fuentes y lecturas recomendadas

Resumen: Gestionar correctamente los secretos en Docker

Los secretos en Docker nunca deben estar en imágenes, repositorios o logs. Para configuraciones simples, archivos .env protegidos y Swarm Secrets son suficientes; para requisitos mayores, considera Vault, Infisical o SOPS. Lo importante es mantener permisos limpios, rotar secretos regularmente y minimizar su distribución en contenedores. Mantener los secretos fuera del contexto de compilación y ejecución reduce significativamente el riesgo de filtración y hace que los entornos de contenedores sean mucho más robustos.

Volver al blog
Share:

Entradas relacionadas