Trivy es el escáner de seguridad de código abierto más popular para contenedores y cloud native. Desarrollado por Aqua Security, escanea vulnerabilidades, configuraciones inseguras, secrets y licencias en múltiples targets.
¿Qué puede escanear Trivy?
• Imágenes Docker y container registries (Docker Hub, ECR, GCR, ACR)
• Sistemas de archivos ( filesystem mode)
• Repositorios Git (escaneo de código fuente)
• Infraestructura como código (Terraform, CloudFormation, Kubernetes manifests)
• Dependencias de código (npm, pip, Go, Maven, NuGet, etc.)
• Configuraciones inseguras (Dockerfile, Kubernetes, Azure ARM)
• Secrets expuestos (API keys, tokens, contraseñas)
• Licencias de software
¿Por qué Trivy sobre otras herramientas?
• Un solo comando escanea TODO: CVEs + configs + secrets + licencias
• Base de datos de vulnerabilidades actualizada diariamente (NVD, GitHub Advisories, etc.)
• Integración nativa con GitHub Actions, GitLab CI, Jenkins, Azure DevOps
• Soporte completo para multi-arch, SBOM, y formato CycloneDX/SPDX
• Fácil de instalar y ejecutar: trivy image nginx:latest
Flujo típico en CI/CD:
- Developer hace push a un repo
- CI construye la imagen Docker
- Trivy escanea la imagen antes del push al registry
- Si hay CRITICAL/HIGH, el pipeline falla
- Si pasa, la imagen se publica
- En producción, Trivy escanea periódicamente las imágenes desplegadas
# ── INSTALACIÓN ───────────────────────────────────────
# macOS
brew install trivy
# Ubuntu/Debian
sudo apt-get install trivy
# Docker
docker pull aquasec/trivy
# Verificar
trivy --version
# ── ESCANEO BÁSICO DE IMÁGENES ────────────────────────
# Escanear una imagen Docker
trivy image nginx:latest
# Escanear con severidad específica
trivy image --severity HIGH,CRITICAL nginx:latest
# Escanear imagen local
docker build -t mi-app:latest .
trivy image mi-app:latest
# Escanear imagen de un registry privado
trivy image registry.empresa.com/app:latest
# ── ESCANEO DE ARCHIVOS Y REPOSITORIOS ────────────────
# Escanear un directorio (filesystem mode)
trivy fs --security-checks vuln,secret,config .
# Escanear un repo Git
trivy repo https://github.com/usuario/repo
# Escanear solo configuraciones inseguras
trivy config --severity HIGH,CRITICAL .
# ── ESCANEO DE KUBERNETES ──────────────────────────────
# Escanear manifiestos de Kubernetes
trivy k8s --report summary cluster
# Escanear un namespace específico
trivy k8s --namespace production cluster
# ── INTEGRACIÓN CON CI/CD ──────────────────────────────
# GitHub Actions
cat > .github/workflows/trivy.yml << 'EOF'
name: Trivy Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'mi-app:latest'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload Trivy scan results
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'
EOF
# GitLab CI
cat > .gitlab-ci.yml << 'EOF'
trivy-scan:
stage: test
image:
name: aquasec/trivy
entrypoint: [""]
script:
- trivy image --exit-code 1 --severity CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
EOF