66 lines
2.2 KiB
YAML
66 lines
2.2 KiB
YAML
name: "Trivy imagen — CVE de la imagen construida"
|
|
description: >-
|
|
Escanea la imagen Docker ya construida y cargada localmente (load:
|
|
true en el build, no hace falta push todavía). CRITICAL bloquea el
|
|
pipeline; HIGH es informativo. --timeout 15m0s siempre — el default
|
|
de Trivy (5m) no alcanza bajo carga real del host (visto en vivo en
|
|
commerce-backend, "context deadline exceeded" a los 4m52s).
|
|
|
|
inputs:
|
|
image_ref:
|
|
description: "Referencia completa imagen:tag a escanear (ej. \\${{ env.IMAGE_NAME }}:\\${{ steps.vars.outputs.VERSION }})."
|
|
required: true
|
|
trivy_version:
|
|
description: "Versión de Trivy a instalar."
|
|
required: false
|
|
default: "0.74.0"
|
|
ignorefile:
|
|
description: >-
|
|
Ruta a un .trivyignore con excepciones documentadas (opcional).
|
|
Cada excepción debe tener justificación y fecha en el propio
|
|
archivo — no es un mecanismo para silenciar sin revisar. Ver
|
|
devsecops-snippets/trivy-image-step/README.md.
|
|
required: false
|
|
default: ""
|
|
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- name: Instalar Trivy
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
curl -sSfL \
|
|
"https://github.com/aquasecurity/trivy/releases/download/v${{ inputs.trivy_version }}/trivy_${{ inputs.trivy_version }}_Linux-64bit.tar.gz" \
|
|
-o /tmp/trivy.tar.gz
|
|
tar -xzf /tmp/trivy.tar.gz -C /tmp trivy
|
|
chmod +x /tmp/trivy
|
|
/tmp/trivy version
|
|
|
|
- name: Escanear imagen (Trivy) — CRITICAL bloquea
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
IGNOREFILE_ARGS=()
|
|
if [ -n "${{ inputs.ignorefile }}" ]; then
|
|
IGNOREFILE_ARGS=(--ignorefile "${{ inputs.ignorefile }}")
|
|
fi
|
|
/tmp/trivy image \
|
|
--severity CRITICAL \
|
|
--exit-code 1 \
|
|
--ignore-unfixed \
|
|
--timeout 15m0s \
|
|
"${IGNOREFILE_ARGS[@]}" \
|
|
"${{ inputs.image_ref }}"
|
|
|
|
- name: Escanear imagen (Trivy) — HIGH informativo
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
/tmp/trivy image \
|
|
--severity HIGH \
|
|
--exit-code 0 \
|
|
--ignore-unfixed \
|
|
--timeout 15m0s \
|
|
"${{ inputs.image_ref }}"
|