Featured image of post Mejores prácticas de seguridad de imágenes de contenedores DockerFeatured image of post Mejores prácticas de seguridad de imágenes de contenedores Docker

Mejores prácticas de seguridad de imágenes de contenedores Docker

Aprende cómo asegurar tus imágenes de contenedores Docker y minimizar vulnerabilidades en producción.

En el desarrollo nativo de la nube moderno, los contenedores Docker son el estándar predeterminado para desplegar aplicaciones web.

Sin embargo, los Dockerfiles genéricos a menudo producen imágenes que contienen vulnerabilidades del sistema operativo, herramientas innecesarias o privilegios de proceso root. En esta guía, cubrimos las mejores prácticas esenciales para reforzar tus imágenes de contenedores Docker para producción.


1. Aplica compilaciones de múltiples etapas

Dejar herramientas de compilación, cachés de compilador o dependencias de desarrollo (como npm o git) dentro de tu imagen de runtime final aumenta el tamaño del contenedor y amplía la superficie de ataque.

Las compilaciones de múltiples etapas te permiten compilar el binario en un entorno dedicado, luego copiar solo el artefacto estático a una capa de runtime mínima.

# Etapa 1: Entorno de compilación
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp main.go

# Etapa 2: Capa segura final
FROM alpine:3.19
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]

2. Evita ejecutar contenedores como root

Por defecto, los procesos de los contenedores Docker se ejecutan como root (superusuario). Si un atacante explota una vulnerabilidad de código, podría obtener acceso completo al kernel y sistema de archivos del host subyacente.

Mitiga esto declarando un usuario de sistema no root dentro del Dockerfile.

# Crear un usuario de sistema dedicado
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

CMD ["./myapp"]

3. Elige imágenes base seguras

En lugar de basar tu configuración en una distribución completa del sistema operativo (como Ubuntu), elige líneas base ligeras y mínimas.

  • Alpine Linux (-alpine): Un SO mínimo (aprox. 5MB) con una huella de paquetes pequeña, reduciendo las vulnerabilidades de seguridad.
  • Imágenes Distroless (Google): Contiene solo tu aplicación compilada y sus dependencias de runtime, excluyendo completamente gestores de paquetes, shells y herramientas de terminal.

4. Integra escaneo de vulnerabilidades (Trivy)

Automatiza las auditorías de seguridad escaneando tus imágenes compiladas durante tus pipelines CI/CD (ej., GitHub Actions).

Usar Trivy te permite escanear tus imágenes en busca de CVEs conocidos antes del despliegue.

# Auditando tu imagen Docker local con Trivy
trivy image myapp:latest

5. Resumen

La regla absoluta de la seguridad de contenedores es la minimización. Al enviar solo lo necesario y ejecutar con privilegios mínimos, aíslas tus cargas de trabajo de producción contra exploits externos.