Trivy v roku 2026: Skenovanie zraniteľností kontajnerov, IaC a SBOM v CI/CD pipeline
Praktický návod, ako Trivy 0.58 integrovať do CI/CD pipeline pre skenovanie kontajnerov, IaC manifestov a generovanie SBOM v CycloneDX a SPDX. Vrátane GitHub Actions, GitLab CI, Trivy Operatora a porovnania s Grype a Snyk.
Trivy je open-source skener zraniteľností od Aqua Security, ktorý v roku 2026 dokáže v jedinom binárnom súbore zoskenovať kontajnerové obrazy, súborové systémy, Git repozitáre, Kubernetes klastre a infraštruktúru ako kód (IaC), pričom súčasne generuje SBOM vo formátoch CycloneDX a SPDX. V tomto sprievodcovi vám ukážem, ako Trivy integrovať do CI/CD pipeline tak, aby ste včas zachytili kritické CVE skôr, než sa dostanú do produkcie. A to bez spomalenia tímu a bez nutnosti platenej SaaS licencie.
Trivy 0.58+ v roku 2026 podporuje skenovanie kontajnerov, IaC, Git repozitárov, Kubernetes klastrov, tajomstiev aj licencií jedným binárom.
Integrácia s GitHub Actions cez aquasecurity/[email protected] zaberie menej než 10 riadkov YAML a typicky beží 30–90 sekúnd.
SBOM v CycloneDX 1.6 alebo SPDX 2.3 formáte spĺňa požiadavky NIS2 smernice a US Executive Order 14028 na transparentnosť dodávateľského reťazca.
Trivy Operator pre Kubernetes kontinuálne sleduje bežiace workloady a hlási nálezy ako natívne VulnerabilityReport CRD objekty.
V porovnaní s Grype má Trivy širšie pokrytie (IaC, secrets, K8s), zatiaľ čo Grype býva o niečo presnejší pre čisto kontajnerové CVE skeny.
Čo je Trivy a prečo ho používať v roku 2026
Trivy je multifunkčný bezpečnostný skener. Začal v roku 2019 ako jednoduchý nástroj na hľadanie CVE v Docker obrazoch a dnes patrí medzi CNCF Incubating projekty. V roku 2026 ho rovnako úspešne používajú malé tímy na lokálnom Macu i veľké podniky v GitOps pipeline pre tisíce mikroservisov. Hlavnou výhodou oproti komerčným riešeniam je fakt, že celý nástroj je distribuovaný ako jeden statický binár (~80 MB) bez nutnosti server-side komponentu, agenta či cloudového účtu.
Z pohľadu DevSecOps je kľúčové, že Trivy v jednom skenovacom behu pokrýva päť hlavných oblastí: zraniteľnosti v OS balíkoch (Alpine, Debian, RHEL, SUSE, Amazon Linux), zraniteľnosti v jazykových knižniciach (npm, pip, Cargo, Go modules, Maven, Composer), tajomstvá v zdrojákoch (AWS kľúče, tokeny GitHubu, súkromné kľúče), nesprávne konfigurácie v IaC manifestoch a licenčné riziká. Takže namiesto integrácie troch či štyroch rôznych nástrojov stačí spustiť trivy fs alebo trivy image a získate konsolidovaný report.
V kontexte európskej smernice NIS2 a amerického Executive Order 14028 sa SBOM (Software Bill of Materials) stáva povinnou súčasťou dodávky softvéru pre kritickú infraštruktúru. Trivy generuje SBOM zadarmo, čo z neho robí praktický minimum-viable nástroj pre splnenie týchto regulácií. Ak ste si v predošlej fáze nasadili OpenSCAP audit s CIS benchmarkmi, Trivy logicky dopĺňa pohľad na aplikačnú vrstvu a kontajnery.
Inštalácia Trivy na Ubuntu, RHEL a ako statického binára
Trivy podporuje tri hlavné spôsoby inštalácie. Pre dlhodobú produkčnú prevádzku odporúčam oficiálne APT/DNF repozitáre, pre CI/CD prostredie statický binár, a pre lokálny vývoj prípadne Homebrew (macOS) alebo Scoop (Windows). Na Ubuntu 22.04 a 24.04 LTS pridajte oficiálne repozitárium:
Na RHEL 9, RHEL 10 a Rocky Linux použite DNF s analogickým repo súborom v /etc/yum.repos.d/trivy.repo. Pre Air-gapped prostredia alebo CI bežce stiahnite priamo statický binár z GitHub releases. Ide o jediný spustiteľný súbor bez externých závislostí:
Najčastejším použitím Trivy je skenovanie kontajnerových obrazov. Pre rýchly test stačí jediný príkaz, ktorý dokáže skenovať obraz priamo z registra bez nutnosti ho pullovať lokálne:
# Základný sken s výpisom všetkých CVE
trivy image nginx:1.27-alpine
# Zameranie len na vysoké a kritické zraniteľnosti, JSON výstup
trivy image \
--severity HIGH,CRITICAL \
--format json \
--output nginx-report.json \
nginx:1.27-alpine
# Zlyhanie pipeline pri náleze CRITICAL (exit kód 1)
trivy image \
--severity CRITICAL \
--exit-code 1 \
--ignore-unfixed \
myregistry.example.com/api:v2.3.1
Príznak --ignore-unfixed filtruje zraniteľnosti, pre ktoré ešte neexistuje opravený balík. Je to pragmatické nastavenie pre CI, kde nechcete blokovať vývoj kvôli CVE, na ktoré sa nedá reagovať. Pre staršie obrazy odporúčam doplniť --scanners vuln,secret, čo Trivy povie, aby okrem zraniteľností hľadal aj zabudnuté API kľúče či súkromné kľúče v Docker vrstvách.
Pre obrazy postavené z multi-stage Dockerfilov je užitočný príznak --list-all-pkgs, ktorý vypíše aj balíky bez známej zraniteľnosti. Dostanete tak kompletný inventár, ktorý sa neskôr zíde pri SBOM generovaní. Ak váš obraz obsahuje Java aplikáciu, pridajte --java-db-repository ghcr.io/aquasecurity/trivy-java-db pre presnejšiu detekciu Maven a Gradle CVE z Trivy Java databázy.
Ako Trivy skenuje infraštruktúru ako kód (Terraform, Dockerfile, Kubernetes)
IaC misconfig skenovanie je funkcia, ktorá Trivy odlišuje od čistých CVE skenerov ako Grype. Trivy dokáže analyzovať Terraform (.tf, .tfvars), Dockerfile, Kubernetes manifesty (.yaml), Helm šablóny, CloudFormation, Ansible playbooky a AWS CDK kód. Detekuje cca 200+ vstavaných pravidiel, napríklad nešifrovaný S3 bucket, root užívateľ v Docker kontajneri, alebo Kubernetes pod bez readOnlyRootFilesystem.
# Sken celého Git repozitára (vuln + secret + misconfig)
trivy fs --scanners vuln,secret,misconfig .
# Cielený sken Kubernetes manifestov
trivy config --severity HIGH,CRITICAL ./k8s/
# Príklad výstupu pre Dockerfile bez USER direktívy:
# avd-id: AVD-DS-0002
# severity: HIGH
# title: Image user should not be 'root'
# message: Specify at least 1 USER command in Dockerfile
Pravidlá pochádzajú z trivy-policies repozitára, ktorý je open-source. Vlastné pravidlá môžete napísať v jazyku Rego (rovnaký ako pri OPA) a pripojiť ich príznakom --config-policy /path/to/policies. Pre tímy, ktoré už používajú Conftest, je migrácia priamočiara. Trivy umie spustiť rovnaké .rego politiky.
V kombinácii s rootless Podman a seccomp profilmi tvorí Trivy misconfig sken prvú obrannú líniu. Zachytí porušené best practices skôr, ako sa kontajner vôbec dostane do registra. Pre tímy, ktoré pracujú s Helm chartmi, je užitočný trivy config --helm-set image.tag=v1.2.3 ./chart/, ktorý vyhodnotí render-out šablóny s konkrétnymi hodnotami.
Generovanie SBOM v CycloneDX a SPDX
SBOM (Software Bill of Materials) je strojovo čitateľný zoznam všetkých komponentov v softvérovej dodávke. V roku 2026 ho NIS2 vyžaduje pre prevádzkovateľov základných služieb a smernica Cyber Resilience Act rozširuje povinnosť na výrobcov softvéru s digitálnym prvkom. Trivy generuje SBOM v dvoch hlavných formátoch:
Posledný príkaz je dôležitý. SBOM môžete podpísať pomocou cosign, uložiť do OCI registra ako attestation a v ľubovoľnom budúcom čase ho znovu skenovať proti aktuálnej CVE databáze. Rieši to reálny problém: keď za pol roka vyjde nový CVE pre knižnicu, ktorú ste použili pri build-e, viete spätne zistiť, ktoré artefakty sú zasiahnuté, bez nutnosti znovu stavať image. (Túto presnú situáciu som zažil pri Log4Shell, keď sme týždeň hľadali, kde všade tá knižnica reálne sedí.)
Integrácia Trivy do GitHub Actions a GitLab CI
Trivy má oficiálnu GitHub Action aquasecurity/trivy-action, ktorá obaľuje binár a poskytuje výstupy v SARIF formáte pre GitHub Code Scanning. Minimálna integrácia pre PR check vyzerá takto:
Pre GitLab CI použite obraz aquasec/trivy:0.58.2 a Trivy nálezy pošlite vo formáte gl-container-scanning-report.json, ktorý GitLab natívne integruje do MR diskusií:
Cachovanie .trivycache/ medzi behmi skráti čas druhého skenu z približne 60 sekúnd na 10, pretože sa preskočí stiahnutie vulnerability DB. V Jenkinse použite trivy CLI priamo v sh stepe a publikujte XML/JSON cez Warnings NG plugin.
Trivy Operator pre kontinuálne skenovanie Kubernetes
Trivy Operator je Kubernetes operátor, ktorý automaticky skenuje všetky bežiace workloady v klastri a publikuje výsledky ako natívne CRD objekty. Inštaluje sa cez Helm chart a po nasadení sám nájde každý Pod, Deployment, StatefulSet, CronJob a otestuje ich proti vulnerability DB každú hodinu (predvolené).
helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo update
helm install trivy-operator aqua/trivy-operator \
--namespace trivy-system \
--create-namespace \
--version 0.24.0 \
--set trivy.severity=HIGH\,CRITICAL \
--set operator.scanJobTimeout=5m
# Po niekoľkých minútach zobrazte nálezy
kubectl get vulnerabilityreports -A
kubectl get configauditreports -A
kubectl get exposedsecretreports -A
Operator paralelne vytvára aj ConfigAuditReport (Kubernetes misconfig) a ExposedSecretReport (zabudnuté Secret-y v ConfigMaps). Reporty sa dajú scrapovať Prometheusom cez trivy-operator-metrics service a vizualizovať v Grafana dashboardu. Autori publikujú hotový dashboard ID 17813. Pre tímy, ktoré už používajú Wazuh ako SIEM, ide o prirodzený upstream zdroj alertov.
Trivy vs Grype vs Snyk: porovnanie nástrojov
Trivy, Grype a Snyk zdieľajú rovnaký high-level use case (hľadanie CVE v softvéri), ale líšia sa filozofiou, pokrytím a cenovým modelom. Nasledujúca tabuľka zhŕňa kľúčové rozdiely v stave k roku 2026:
Kritérium
Trivy 0.58
Grype 0.85
Snyk (komerčný)
Licencia
Apache 2.0
Apache 2.0
Freemium / komerčná
Container scan
Áno
Áno
Áno
IaC misconfig
Áno (Terraform, K8s, CFN, Helm)
Nie
Áno (Snyk IaC)
Secret detection
Áno (vstavané)
Nie
Áno (Snyk Code)
SBOM generovanie
CycloneDX, SPDX
CycloneDX, SPDX, Syft
CycloneDX
Kubernetes operator
Áno (Trivy Operator)
Nie (Anchore Enterprise)
Áno
Zdroj CVE
NVD, GHSA, OSV, vendor DB
NVD, GHSA, vendor DB
Vlastná Snyk DB
Air-gapped podpora
Áno (offline DB)
Áno
Obmedzená
V praxi mnoho tímov používa Trivy aj Grype paralelne. Trivy pre IaC a SBOM, Grype pre druhý overovací sken kontajnerov, pretože Grype má reputáciu nižších false-positive v Go a Rust ekosystémoch. Snyk má najlepší dashboard a developer experience, no na úrovni open-source projektov je Trivy v roku 2026 de facto štandard, ako potvrdzuje aj CNCF Cloud Native Landscape.
Najčastejšie chyby a tipy na ladenie výkonu
Prvý problém, na ktorý tímy narazia, je pomalá rýchlosť pri prvom spustení. Trivy stiahne vulnerability DB (~50 MB) a Java DB (~150 MB) z GHCR a uloží ich do ~/.cache/trivy/. V CI bez cache to znamená asi 30 sekúnd pridaného času na každý beh. Riešením je perzistentný cache adresár alebo Trivy Server (trivy server --listen 0.0.0.0:4954), ktorý slúži DB klientom. V Kubernetes klastri stačí jedna replika a desiatky bežcov.
Druhý častý problém sú false-positive nálezy v starších CVE pre balíky, kde distribučný backport opravil zraniteľnosť bez zmeny verzie. Pre RHEL a Debian Trivy túto situáciu spravidla rozumie, ale pre Alpine a niektoré jazykové ekosystémy nie vždy. Použite .trivyignore súbor s jedným CVE ID na riadok a komentárom prečo:
# .trivyignore
# Zraniteľná knižnica nie je v runtime ceste, použitá len pri buildovaní
CVE-2024-12345
# Backport potvrdený Red Hat-om, fixed-in upstream zatiaľ nie
CVE-2025-67890 exp:2026-12-31
Príznak exp: na konci nastaví dátum expirácie ignore pravidla. Po jeho prekročení Trivy znovu nahlási nález, takže ignore sa nestane permanentnou dierou. Tretí tip, ktorý mi reálne ušetril hodiny pri jednom monorepe: pri skenovaní veľkých repozitárov použite --skip-dirs node_modules,vendor,.git a --scanners vuln namiesto kompletného skenu. Typicky znížite čas zo 4 minút na 40 sekúnd. Pre Kubernetes Trivy Operator zase vypnite skenovanie systémových namespaces (--excluded-namespaces kube-system,kube-public), inak operator vytvára desiatky redundantných Job-ov pri každej hodine.
Často kladené otázky
Je Trivy zadarmo?
Áno. Trivy je open-source pod Apache 2.0 licenciou a celá funkcionalita (vrátane skenovania kontajnerov, IaC, SBOM aj Trivy Operatora) je bez poplatkov pre komerčné aj nekomerčné použitie. Aqua Security ponúka komerčný Aqua Platform, no ten nie je vyžadovaný.
Aký je rozdiel medzi Trivy a Grype?
Trivy je multifunkčný nástroj: okrem kontajnerov skenuje aj IaC, tajomstvá a Kubernetes klastre, pričom má vlastný operator. Grype sa zameriava výhradne na CVE v softvérových artefaktoch a SBOM, no má reputáciu o niečo nižšieho false-positive ratio pre Go a Rust. Mnoho tímov používa oba paralelne.
Ako pridám Trivy do GitHub Actions?
Použite oficiálnu akciu aquasecurity/[email protected] s príznakmi image-ref, format: sarif a exit-code: '1', aby pipeline zlyhala pri kritickom náleze. Výsledný SARIF súbor potom pošlite cez github/codeql-action/upload-sarif@v3 do GitHub Code Scanning.
Dokáže Trivy skenovať bežiaci Kubernetes klaster?
Áno, dvoma spôsobmi. Príkaz trivy k8s cluster spustí jednorazový sken pripojený cez aktuálny kubeconfig. Pre kontinuálne monitorovanie nainštalujte Trivy Operator cez Helm chart. Automaticky vytvára VulnerabilityReport objekty pre každý Pod v klastri a obnovuje ich každú hodinu.
Aký SBOM formát mám zvoliť, CycloneDX alebo SPDX?
Pre väčšinu európskych regulácií (NIS2, CRA) a OWASP nástroje je odporúčaný CycloneDX 1.6, ktorý má lepšiu podporu pre kontajnerové komponenty. SPDX 2.3 je preferovaný v projektoch Linux Foundation a US federálnych dodávkach. Trivy vie generovať oba bez problémov, takže môžete vyprodukovať obidva pri jednom skenovaní.
Detekuje Trivy zabudnuté API kľúče a tajomstvá?
Áno. S príznakom --scanners secret Trivy prehľadá vrstvy Docker obrazu aj zdrojový kód a hľadá približne 70 typov tajomstiev: AWS prístupové kľúče, GitHub tokeny, súkromné SSH kľúče, Slack webhooky a ďalšie. Pravidlá sú regex-based a dajú sa rozšíriť cez vlastný secret.yaml konfiguračný súbor.
Praktický sprievodca spevnením systemd unitov v roku 2026: sandbox direktívy, systemd-analyze security, drop-in overrides a walkthrough nginx z 9.6 UNSAFE na 3.1 OK.
Praktický návod ako keyless podpisovať kontajnery cez Sigstore Cosign 2.x. Zahŕňa GitHub Actions OIDC, Fulcio, Rekor, SLSA provenance, overenie podpisov a vynútenie v Kubernetes cez Kyverno admission controller, s príkladmi z pentestov.