DivisionCero

Control de Seguridad para Contenedores

Marco integral de seguridad para tecnologías de contenedores y orquestación.

Quieres aprender más?

📋 Información General

Documento: Control de Seguridad para Contenedores
Versión: 1.0.0
Fecha: Enero 2025
Clasificación: Confidencial
Audiencia: Equipos de DevOps, SRE, desarrollo y arquitectura de DivisionCero

🎯 Propósito

Establecer los controles y prácticas de seguridad obligatorias para el uso de tecnologías de contenedores en DivisionCero, incluyendo Docker, Podman, Kubernetes y otras plataformas de orquestación. Esta política garantiza que los entornos contenerizados mantengan los más altos estándares de seguridad desde el desarrollo hasta la producción.

🏢 Alcance

Esta política aplica a:

  • Todos los contenedores utilizados en entornos de desarrollo, testing, staging y producción
  • Imágenes de contenedores, tanto propias como de terceros
  • Plataformas de orquestación como Kubernetes, Docker Swarm o similares
  • Registros de contenedores públicos y privados
  • Redes y almacenamiento asociados a contenedores
  • Pipelines de CI/CD que utilicen contenedores
  • Monitoreo y logging de entornos contenerizados

📚 Definiciones

  • Contenedor: Unidad de software que empaqueta código y sus dependencias
  • Imagen de Contenedor: Plantilla inmutable para crear contenedores
  • Registro de Contenedores: Repositorio para almacenar y distribuir imágenes
  • Orquestador: Sistema para automatizar despliegue y gestión de contenedores
  • Runtime de Contenedores: Software que ejecuta contenedores (Docker, containerd, CRI-O)
  • Namespace: Mecanismo de aislamiento de recursos del kernel
  • Control Groups (cgroups): Limitación y aislamiento de recursos del sistema
  • Pod: Unidad básica de despliegue en Kubernetes que contiene uno o más contenedores

🛡️ Política

Principios Fundamentales

  • Inmutabilidad: Las imágenes de contenedores deben ser inmutables y versionadas
  • Principio de Menor Privilegio: Contenedores deben ejecutarse con privilegios mínimos
  • Aislamiento: Separación estricta entre cargas de trabajo mediante namespaces
  • Visibilidad: Monitoreo y logging completo de actividades de contenedores
  • Hardening: Configuración segura de todos los componentes del stack de contenedores

1. Seguridad de Imágenes de Contenedores

1.1 Construcción de Imágenes Seguras

Controles Obligatorios:

  • Utilizar imágenes base oficiales y actualizadas de proveedores confiables
  • Implementar builds multi-stage para reducir superficie de ataque
  • No incluir secretos, credenciales o información sensible en las imágenes
  • Ejecutar contenedores como usuario no privilegiado (non-root)
  • Minimizar componentes instalados (principio de superficie mínima)

Dockerfile Seguro:

# ✅ Usar imagen base oficial y específica
FROM node:18.19-alpine3.19

# ✅ Crear usuario no privilegiado
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nextjs -u 1001

# ✅ Instalar solo dependencias necesarias
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

# ✅ Cambiar a usuario no privilegiado
USER nextjs

# ✅ Configurar directorio de trabajo seguro
WORKDIR /app
COPY --chown=nextjs:nodejs . .

EXPOSE 3000
CMD ["npm", "start"]

1.2 Escaneo de Vulnerabilidades

Requerimientos:

  • Escaneo automático de todas las imágenes antes del despliegue
  • Uso de herramientas como Trivy, Clair, Anchore o Snyk
  • Umbral máximo de vulnerabilidades críticas: 0
  • Umbral máximo de vulnerabilidades altas: 5
  • Reporte automático de vulnerabilidades al equipo de seguridad

Herramientas Recomendadas:

# Escaneo con Trivy
trivy image --severity HIGH,CRITICAL myapp:latest

# Escaneo con Docker Scout
docker scout cves myapp:latest

# Integración en CI/CD
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  aquasec/trivy:latest image --exit-code 1 --severity HIGH,CRITICAL myapp:latest

2. Seguridad de Registros de Contenedores

2.1 Gestión de Registros

Controles Obligatorios:

  • Usar registros privados para imágenes internas
  • Implementar autenticación robusta para acceso a registros
  • Habilitar firmado digital de imágenes (Docker Content Trust)
  • Configurar políticas de retención y limpieza
  • Auditar accesos y descargas de imágenes

2.2 Políticas de Admisión

Kubernetes Admission Controllers:

apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: disallow-latest-tag
spec:
  validationFailureAction: enforce
  background: false
  rules:
    - name: require-image-tag
      match:
        any:
        - resources:
            kinds:
            - Pod
      validate:
        message: "Latest tag is not allowed"
        pattern:
          spec:
            containers:
            - image: "!*:latest"

3. Seguridad del Runtime de Contenedores

3.1 Configuración Segura

Docker/Podman Security:

# ✅ Ejecutar sin privilegios
docker run --user 1001:1001 --read-only --tmpfs /tmp myapp:latest

# ✅ Limitar capacidades
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp:latest

# ✅ Configurar límites de recursos
docker run --memory=512m --cpus=1.0 --pids-limit=100 myapp:latest

# ✅ Usar redes personalizadas
docker network create --driver bridge myapp-network
docker run --network=myapp-network myapp:latest

3.2 Aislamiento de Contenedores

Controles Requeridos:

  • Usar namespaces de usuario para aislamiento adicional
  • Configurar SELinux/AppArmor para control de acceso obligatorio
  • Implementar seccomp para filtrado de syscalls
  • Usar filesystem read-only cuando sea posible

4. Seguridad de Kubernetes

4.1 Configuración del Clúster

API Server Security:

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: https://k8s-api.divisioncero.com:6443
    certificate-authority-data: <CA_CERT>
  name: production-cluster
users:
- name: admin-user
  user:
    client-certificate-data: <CLIENT_CERT>
    client-key-data: <CLIENT_KEY>
contexts:
- context:
    cluster: production-cluster
    user: admin-user
  name: admin-context

4.2 Políticas de Seguridad de Pods

Pod Security Standards:

apiVersion: v1
kind: Namespace
metadata:
  name: production-apps
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/warn: restricted
---
apiVersion: v1
kind: Pod
metadata:
  name: secure-app
  namespace: production-apps
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1001
    fsGroup: 1001
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: app
    image: myapp:v1.2.3
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop: ["ALL"]
    resources:
      requests:
        memory: "128Mi"
        cpu: "100m"
      limits:
        memory: "512Mi"
        cpu: "500m"

4.3 Network Policies

Micro-segmentación de Red:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: production-apps
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-app-to-db
  namespace: production-apps
spec:
  podSelector:
    matchLabels:
      app: web-app
  policyTypes:
  - Egress
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: database
    ports:
    - protocol: TCP
      port: 5432

5. Gestión de Secretos

5.1 Kubernetes Secrets

Mejores Prácticas:

apiVersion: v1
kind: Secret
metadata:
  name: app-secrets
  namespace: production-apps
type: Opaque
data:
  database-password: <base64-encoded-password>
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: secure-app
spec:
  template:
    spec:
      containers:
      - name: app
        image: myapp:v1.2.3
        env:
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: app-secrets
              key: database-password

5.2 Integración con Gestores de Secretos

HashiCorp Vault Integration:

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: vault-database
spec:
  provider: vault
  parameters:
    vaultAddress: "https://vault.divisioncero.com"
    roleName: "database-role"
    objects: |
      - objectName: "database-password"
        secretPath: "secret/data/database"
        secretKey: "password"

6. Monitoreo y Logging

6.1 Observabilidad de Contenedores

Métricas Requeridas:

  • Uso de CPU, memoria y red por contenedor
  • Número de reinicios y fallos de contenedores
  • Tiempo de inicio de contenedores
  • Vulnerabilidades detectadas en runtime
  • Violaciones de políticas de seguridad

6.2 Logging de Seguridad

Eventos a Auditar:

apiVersion: v1
kind: ConfigMap
metadata:
  name: audit-policy
data:
  audit-policy.yaml: |
    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
    - level: Metadata
      namespaces: ["production-apps"]
      verbs: ["create", "update", "patch", "delete"]
      resources:
      - group: ""
        resources: ["pods", "services", "secrets"]
    - level: Request
      verbs: ["create", "update", "patch"]
      resources:
      - group: "rbac.authorization.k8s.io"
        resources: ["roles", "rolebindings", "clusterroles", "clusterrolebindings"]

7. Respuesta a Incidentes en Contenedores

7.1 Detección de Amenazas

Herramientas de Runtime Security:

  • Falco para detección de comportamiento anómalo
  • Sysdig Secure para visibilidad en runtime
  • Aqua Security para protección integral
  • Twistlock/Prisma Cloud para compliance

7.2 Procedimientos de Respuesta

Escalamiento Automático:

  1. Detección: Sistema de monitoreo detecta anomalía
  2. Aislamiento: Contenedor sospechoso se aísla automáticamente
  3. Análisis: Forense automático del contenedor
  4. Notificación: Alerta inmediata al equipo de seguridad
  5. Remediación: Reinicio con imagen limpia si es necesario

🎯 Roles y Responsabilidades

DevOps Team Lead

  • Implementar y mantener políticas de seguridad de contenedores
  • Supervisar escaneado de vulnerabilidades
  • Gestionar configuración segura de orquestadores

Site Reliability Engineers (SRE)

  • Monitorear seguridad en runtime de contenedores
  • Responder a incidentes relacionados con contenedores
  • Mantener visibilidad y observabilidad

Development Teams

  • Seguir prácticas de construcción segura de imágenes
  • Implementar principios de seguridad en aplicaciones contenerizadas
  • Participar en revisiones de seguridad de contenedores

CISO (Chief Information Security Officer)

  • Aprobar políticas de seguridad de contenedores
  • Revisar métricas y KPIs de seguridad
  • Asegurar cumplimiento con estándares de la industria

📊 Métricas y KPIs

Métricas de Seguridad

  • Tiempo Medio de Detección (MTTD): < 5 minutos para amenazas críticas
  • Tiempo Medio de Respuesta (MTTR): < 15 minutos para incidentes críticos
  • Cobertura de Escaneo: 100% de imágenes escaneadas antes del despliegue
  • Vulnerabilidades Críticas: 0 vulnerabilidades críticas en producción
  • Compliance Score: > 95% de cumplimiento con políticas de seguridad

Reportes Requeridos

  • Semanal: Reporte de vulnerabilidades detectadas y remediadas
  • Mensual: Análisis de tendencias de seguridad en contenedores
  • Trimestral: Revisión de efectividad de controles de seguridad
  • Anual: Evaluación completa de madurez de seguridad en contenedores

🔄 Procedimientos

Procedimiento de Despliegue Seguro

  1. Pre-despliegue:

    • Escaneo de vulnerabilidades de imagen
    • Validación de configuración de seguridad
    • Revisión de políticas de admisión
  2. Despliegue:

    • Aplicación de políticas de seguridad
    • Configuración de monitoreo
    • Validación de controles de runtime
  3. Post-despliegue:

    • Verificación de seguridad en runtime
    • Monitoreo continuo de amenazas
    • Actualizaciones automáticas de seguridad

Procedimiento de Gestión de Vulnerabilidades

  1. Detección: Escaneo automático identifica vulnerabilidad
  2. Evaluación: Análisis de impacto y riesgo
  3. Priorización: Clasificación según criticidad
  4. Remediación: Actualización de imagen base o aplicación de parche
  5. Validación: Verificación de corrección efectiva
  6. Despliegue: Actualización en entornos afectados

📚 Estándares y Referencias

Marcos de Referencia

  • NIST Cybersecurity Framework
  • CIS Kubernetes Benchmark
  • OWASP Container Security Top 10
  • ISO 27001/27002

Herramientas Aprobadas

  • Escaneo de Vulnerabilidades: Trivy, Snyk, Anchore
  • Runtime Security: Falco, Sysdig, Aqua Security
  • Gestión de Secretos: HashiCorp Vault, AWS Secrets Manager
  • Monitoreo: Prometheus, Grafana, ELK Stack

🚨 Incumplimiento

Clasificación de Violaciones

  • Crítico: Contenedor con vulnerabilidades críticas en producción
  • Alto: Violación de políticas de seguridad de runtime
  • Medio: Incumplimiento de mejores prácticas de construcción
  • Bajo: Falta de documentación o configuración subóptima

Consecuencias

  • Crítico/Alto: Remoción inmediata del contenedor, investigación formal
  • Medio: Corrección requerida en 48 horas
  • Bajo: Corrección requerida en 1 semana

📅 Revisión y Actualización

Esta política será revisada semestralmente o cuando ocurran cambios significativos en:

  • Tecnologías de contenedores utilizadas
  • Amenazas de seguridad identificadas
  • Regulaciones o estándares aplicables
  • Incidentes de seguridad relacionados con contenedores

Próxima revisión programada: Julio 2025


Aprobado por:
María González - CISO
Fecha: Enero 2025

Revisado por:
Carlos Mendoza - DevOps Team Lead
Ana Rodríguez - SRE Manager
Fecha: Enero 2025

¿Te ha resultado útil esta página?

Última modificación: 25 de agosto de 2025