Container comprometido = servidor comprometido. Aprenda técnicas de segurança que impedem 99% dos ataques.
Conceitos Principais
Attack Surface
Imagem vulnerável, daemon Docker, kernel exploits, network exposure. Minimize cada camada.
Least Privilege
Non-root user, read-only filesystem, capabilities mínimas. Princípio de menor privilégio.
Image Provenance
Base images oficiais ou verified publishers. Content trust (notary). Scan de vulnerabilidades.
Runtime Security
Seccomp, AppArmor, SELinux. Syscall filtering. Container escape mitigation.
Passo a Passo
- Imagens Seguras: Use distroless ou Alpine. Scan com Trivy:
trivy image --severity HIGH,CRITICAL app. Fix CVEs antes de deploy. - Non-Root User: Dockerfile:
RUN adduser -D appuser,USER appuser. Nunca USER root. Testa:docker exec container whoami. - Read-Only Filesystem:
docker run --read-only --tmpfs /tmp app. App não pode escrever em /. Logs para stdout, dados em volumes. - Secrets Management: Docker secrets (Swarm) ou Vault. NUNCA env vars.
docker secret create db_pass pass.txt. Mount em /run/secrets. - Network Isolation: Custom networks. Expose apenas portas necessárias. Firewall rules. Use internal networks para backends.
Boas Praticas
Recomendacoes
• Content trust: DOCKER_CONTENT_TRUST=1
• Scan images no CI/CD
• Rootless Docker para dev
• AppArmor profile custom
• Audit logs do daemon
• Rotate secrets regularmente
• Principle of least privilege sempre
Erros Comuns
Evite estes erros
• ADD ao invés de COPY (executa scripts)
• curl | sh no Dockerfile
• EXPOSE 0.0.0.0 desnecessariamente
• Secrets em env vars ou layers
• --privileged mode
Checklist
- Imagens de fontes confiáveis
- Scan de vulnerabilidades zero critical
- Non-root user configurado
- Read-only filesystem quando possível
- Secrets via Docker secrets ou Vault
- Network isolation implementada
- AppArmor/SELinux profiles ativos
- Daemon em TLS mode
- Audit logging ativo