Integrando Trivy en Azure DevOps: Escaneo de Seguridad en Pipelines CI/CD

David Guzman

Trivy es una herramienta para encontrar vulnerabilidades en aplicaciones. Escanea imágenes de contenedores, código fuente y configuraciones para detectar problemas de seguridad. Es fácil de usar, no requiere configuración complicada y es ideal para integrar en procesos de desarrollo y despliegue.

Crear repositorio en Azure repos y subir cambios

Descargar proyecto comms

1. Ingresar al proyecto donde se va a crear el repositorio, en este caso a prueba java.

2.seleccionar el menú repos

3.Seleccionar new repository

4.Ingresar el nombre del repositorio en este caso comms y seleccionar el lenguaje que en este caso es Java

5. Clonar el repositorio, subir los cambios con los comandos git:

5.1 git add .
5.2 git commit -m “feat: primer comit”
5.3 git push

Crear Pipeline

1.Seleccionar el menú Pipeline

2.Click New pipeline

3.Click en Azure repos git

4.Seleccionar el repositorio, en este caso comms

5.Para este caso seleccionamos Maven ya que el proyecto es un proyecto que compila con Maven

6.Modificar el pipeline, agregar la etapa de análisis con trivy



Instalar Trivy

yamlCopiar- script: |
    curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
  displayName: 'Instalar Trivy'
  • Se descarga el script de instalación desde el repositorio oficial de Trivy.
  • Se ejecuta el script, instalando trivy en /usr/local/bin, para que esté disponible globalmente.

Compilar el Proyecto Maven

yamlCopiar- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'package'
  • Usa Maven para compilar el proyecto definido en pom.xml.
  • Asigna 3GB de RAM (-Xmx3072m) para evitar problemas de memoria en la compilación.
  • Usa Java 11 como versión del JDK (jdkVersionOption: '1.11').
  • Ejecuta pruebas unitarias con JUnit, y publica los resultados si están en **/surefire-reports/TEST-*.xml.
  • El objetivo (goals) es package, lo que generará un archivo JAR o WAR en target/.

Escanear el Proyecto con Trivy

yamlCopiar- script: |
    trivy fs --severity HIGH,CRITICAL . --format json -o trivy-results.json
    if grep -q '"Severity": "CRITICAL"' trivy-results.json; then
      echo "Vulnerabilidades críticas encontradas"
      exit 1
    fi
  displayName: 'Escanear Sistema de Archivos con Trivy y Fallar si hay Vulnerabilidades Críticas'
  1. Escanea el sistema de archivos con Trivy (trivy fs), buscando vulnerabilidades de alta y crítica gravedad en archivos y dependencias.
  2. Guarda los resultados en formato JSON en trivy-results.json.
  3. Si encuentra vulnerabilidades críticas, falla el pipeline (exit 1).

Esto significa que si hay una vulnerabilidad CRÍTICA, el pipeline se detiene y marca la ejecución como fallida.


Publicar los Resultados del Escaneo

yamlCopiar- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: 'trivy-results.json'
    ArtifactName: 'TrivyResults'
    publishLocation: 'Container'
  • Publica el archivo trivy-results.json como un artefacto del pipeline bajo el nombre TrivyResults.
  • Esto permite que otros pasos o usuarios puedan descargar y revisar el informe de vulnerabilidades.

7.Ejecucion del pipeline

David Guzmán López

Ingeniero Electrónico

Electronic Engineer | DevOps Engineer | SRE | Cloud Engineer | Infrastructure Engineer