Módulo 5: Scanning Iac And Dependencies
3. Manos a la obra: instalando Trivy
Descripción
Esta lección es corta a propósito: Trivy ya está instalado en tu máquina desde el Módulo 3, lección 7, donde corriste trivy fs --scanners secret sobre un repositorio desechable para detectar una credencial de prueba. Lo que esta lección agrega es lo que el Módulo 3 no necesitó documentar entonces — el método de instalación completo, para que este módulo sea reproducible incluso si llegas directo aquí sin haber pasado por el Módulo 3, y la confirmación, con salida literal, de que la versión sigue siendo la misma que fija el diseño completo de esta guía.
Conexión con el módulo
La lección 2 explicó por qué esta guía usa Trivy. Esta lección confirma que la herramienta está lista, con la versión exacta que vas a necesitar para que los hallazgos de la lección 4 sean deterministas y reproducibles.
Paso 1 — Confirmando que ya está instalado
Antes de instalar nada, verifica lo que ya tienes:
trivy --version
Qué esperar (literal — ejecutado para escribir esta lección):
Version: 0.74.0
Si tu terminal muestra esta misma línea, ya terminaste esta lección — Trivy 0.74.0, la misma versión confirmada en el Módulo 3, publicada el 14 de agosto de 2026, es la que corrió cada comando de este módulo. Puedes saltar directo a la lección 4.
Paso 2 — Instalando Trivy desde cero (si no lo tienes)
Si tu terminal respondió command not found, esta sección documenta las tres formas oficiales de instalación, según tu sistema.
macOS, con Homebrew
brew install trivy
Homebrew resuelve la versión más reciente publicada en el tap oficial de Aqua Security — normalmente, la misma que acabas de ver confirmada arriba, o una más reciente si pasó tiempo desde que se escribió esta lección.
Linux, con el script oficial de instalación
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.74.0
Este script descarga el binario precompilado correcto para tu arquitectura (amd64 o arm64) directamente desde los releases de GitHub, y lo instala en /usr/local/bin — el mismo patrón que ya usarás en la lección 7 de este módulo, dentro de un runner de GitHub Actions bajo act. El argumento v0.74.0 pinea la versión exacta; omitirlo instala la más reciente disponible.
Cualquier sistema, con Docker
docker run --rm -v "$(pwd)":/project aquasec/trivy:0.74.0 config /project
Sin instalar ningún binario en tu máquina — útil si prefieres no agregar otra herramienta más a tu PATH, al costo de que cada corrida descarga y arranca un contenedor.
Paso 3 — Por qué la versión pineada importa para este módulo
Recuerda la tabla de honestidad del diseño de esta guía: los resultados de trivy config sobre el mismo HCL, con la misma versión pineada de la herramienta, son deterministas — el mismo HCL produce, siempre, el mismo conjunto de hallazgos, con los mismos IDs. Eso deja de ser cierto si dos personas del mismo equipo corren versiones distintas de Trivy: una regla nueva, agregada en una versión más reciente, puede aparecer para una persona y no para la otra, sobre exactamente el mismo código. Es la misma razón por la que terraform-and-iac-guide pineó Terraform a 1.15.8, y por la que cicd-and-gitops-on-aws-guide pineó las Actions por SHA — un pipeline de seguridad que produce resultados distintos según quién lo corra no es un pipeline confiable.
trivy --version | grep -o '[0-9]*\.[0-9]*\.[0-9]*' | head -1
Qué esperar (literal):
0.74.0
Un patrón simple de verificación, útil si más adelante quieres agregar un chequeo de versión mínima a un script de CI —comparar contra 0.74.0 o superior, antes de confiar en la salida de un job.
Errores comunes
Confundir el paquete trivy de un gestor de paquetes genérico de Linux (apt, yum sin el repositorio oficial agregado) con el binario oficial actualizado. Qué pasa: alguien corre apt install trivy sin haber agregado el repositorio oficial de Aqua Security primero, y termina con una versión mucho más vieja que la que trae el repositorio genérico de su distribución. Cómo detectarlo: si tu trivy --version muestra algo notablemente menor a 0.74.0 justo después de una instalación "limpia". Cómo corregirlo: sigue el método del Paso 2 —script oficial o Homebrew—, o agrega explícitamente el repositorio APT oficial de Aqua Security documentado en trivy.dev, nunca asumas que el paquete genérico de tu distribución está al día.
Instalar Trivy en un directorio que no está en el PATH, y concluir que la instalación falló. Qué pasa: alguien usa el script de instalación con un flag de destino distinto a /usr/local/bin (por ejemplo, ~/bin), sin haber agregado ese directorio al PATH de su shell. Cómo detectarlo: el script termina sin error, pero trivy --version sigue devolviendo command not found. Cómo corregirlo: confirma con echo $PATH que el directorio de destino está incluido, o reinstala apuntando a /usr/local/bin, que casi siempre ya está en el PATH por defecto.
Instalar Trivy dos veces, con dos métodos distintos, y terminar con dos versiones distintas en el PATH. Qué pasa: alguien instaló Trivy con Homebrew hace meses, y ahora corre el script de instalación del Paso 2 apuntando a /usr/local/bin, sin darse cuenta de que Homebrew ya instaló otro binario en una ruta distinta con más prioridad en el PATH. Cómo detectarlo: which trivy muestra una ruta, pero trivy --version muestra una versión distinta a la que instalaste más recientemente. Cómo corregirlo: usa which -a trivy para listar todas las instalaciones encontradas en el PATH, y desinstala o reordena hasta que quede una sola, inequívoca.
Ejercicios
Ejercicio 1 — Verifica de memoria por qué el Módulo 3 no necesitó una lección de instalación separada. Sin volver a mirar, explica en una frase por qué cicd-and-gitops-on-aws-guide y esta guía pudieron usar Trivy en el Módulo 3 sin haber dedicado antes una lección completa a instalarlo.
Ver solución
Porque el diseño de esta guía asume Trivy ya instalado desde el momento en que aparece por primera vez (Módulo 3, lección 7) — la instalación en sí no era el foco de esa lección, que trataba sobre detección de secretos filtrados, no sobre cómo instalar la herramienta. Este módulo es el primero cuyo tema es, en parte, el ecosistema de escáneres —por eso es el lugar correcto para documentar el método de instalación completo, aunque la herramienta ya estuviera presente desde antes.
Ejercicio 2 — Explica por qué pinear la versión de Trivy en CI es distinto de pinear la versión de Terraform. ¿Cuál es la diferencia real, si la hay, entre pinear terraform_version: "1.15.8" en un workflow (cicd-and-gitops-on-aws-guide, Módulo 3) y pinear Trivy a v0.74.0 en el script de instalación de esta lección?
Ver solución
Conceptualmente son el mismo mecanismo con el mismo propósito —determinismo entre corridas—, pero la consecuencia de NO pinear es distinta en severidad. Con Terraform, una versión nueva puede cambiar comportamiento de sintaxis o incluso del formato del state; con Trivy, una versión nueva típicamente agrega reglas nuevas sin cambiar el comportamiento de las reglas existentes — el riesgo principal de no pinear Trivy es que el número de hallazgos crezca sin previo aviso entre una corrida y la siguiente (un hallazgo nuevo que antes no existía), no que un hallazgo existente cambie de comportamiento. Ambos casos justifican pinear, pero por razones ligeramente distintas.
Ejercicio 3 — Diseña el paso de instalación para un runner de GitHub Actions bajo act. Sin mirar la lección 7 todavía, escribe el step YAML que instalaría Trivy 0.74.0 dentro de un job de ci.yml, usando el método del Paso 2 de esta lección.
Ver solución
- name: Install Trivy
run: |
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.74.0
Es, literalmente, el mismo comando de instalación de Linux del Paso 2 de esta lección, envuelto como un step con run: — el mismo patrón que ya usaste para instalar awslocal/tflocal como steps de pip3 install en cicd-and-gitops-on-aws-guide, Módulo 3. La lección 7 confirma esto corriendo de verdad, con act, contra un runner real.
Resumen y siguiente paso
Esta lección confirmó que Trivy 0.74.0 sigue instalado desde el Módulo 3, y documentó, para que este módulo sea reproducible de forma independiente, los tres métodos oficiales de instalación (Homebrew, script oficial, Docker). Confirmaste por qué pinear la versión importa exactamente para el mismo tipo de determinismo que ya exigió esta guía con Terraform y con las Actions por SHA.
Antes de avanzar deberías poder: confirmar tu versión de Trivy con un solo comando; instalarlo desde cero en macOS o Linux sin buscar documentación; y explicar por qué una versión sin pinear puede hacer que dos corridas del mismo HCL produzcan resultados distintos.
La lección 4 corre, por primera vez en este módulo, trivy config contra el andes-cargo-infra/ completo — la salida real, con cada hallazgo clasificado por severidad y su ID exacto.
Recursos
- trivy.dev — Installation — documentación oficial de instalación, con todos los métodos soportados.
- GitHub — aquasecurity/trivy releases — historial completo de versiones, incluida
v0.74.0. - Este curso, Módulo 3, lección 7 — el primer uso real de Trivy en esta guía, con la misma versión confirmada entonces.