关于 scanning-iac-and-images-with-trivy
面向开发和安全团队的 Trivy 扫描工作流技能,用于在 CI/CD 中检查镜像、基础设施即代码和依赖项。它还涵盖 SBOM 生成、SARIF 输出及按策略阻断构建。
主要功能
- 01扫描镜像和依赖项中的漏洞
- 02检查 IaC 配置错误
- 03检测硬编码机密和软件许可证
- 04生成并重新扫描 SBOM
- 05输出 SARIF 并按策略阻断构建
适用场景
- 01在镜像推送前设置 CI/CD 安全门禁
- 02部署前审计 Terraform 或 Kubernetes 配置
- 03生成 SBOM 并随新漏洞披露重新评估
- 04检查代码仓库中的硬编码凭据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill scanning-iac-and-images-with-trivy安装后在 Claude Code 中输入/scanning-iac-and-images-with-trivy确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py详细介绍
使用 Trivy 扫描 IaC 和镜像
概述
Trivy(由 Aqua Security 开发)是一款功能全面的开源安全扫描器,可针对广泛的目标发现漏洞(CVE)、错误配置(IaC)、密钥、软件许可证以及软件供应链弱点:容器镜像、文件系统、Git 仓库、虚拟机镜像、Kubernetes 集群和 SBOM 文档。它被广泛采用为 CI/CD 管线中的“左移”门禁,因为它速度快、以单个静态二进制文件运行、无需 Agent,并支持机器可读的输出格式(JSON、SARIF、CycloneDX、SPDX),以便与代码扫描仪表盘集成。
Trivy 内置四个主要扫描器,可通过 --scanners 开关切换:
- vuln —— 操作系统软件包和语言依赖项漏洞检测(对照 Trivy 漏洞数据库进行 CVE 匹配)。
- misconfig —— 基础设施即代码和配置错误配置检测(Terraform、CloudFormation、Kubernetes 清单、Dockerfile、Helm),使用内置和自定义 Rego 策略。
- secret —— 硬编码密钥/凭据检测(API 密钥、令牌、私钥)。
- license —— 软件许可证识别与策略执行。
本技能涵盖构建基于 Trivy 的扫描工作流,为 CI/CD 管线设置门禁:在推送前扫描镜像、在应用前扫描 IaC、生成并重新扫描 SBOM,以及在违反策略时使构建失败。检测这些弱点可防御 MITRE ATT&CK 技术 T1525(植入内部镜像),即攻击者在镜像仓库中植入恶意或存在漏洞的镜像,以便在整个环境中部署。
何时使用
- 在将漏洞和错误配置扫描集成到 CI/CD 管线中,作为镜像推送或基础设施应用前的质量/安全门禁时。
- 在部署前审计镜像仓库中的容器镜像是否存在已知 CVE 时。
- 在验证 Terraform、CloudFormation、Kubernetes、Dockerfile 或 Helm IaC 是否存在安全错误配置时。
- 在生成 SBOM(CycloneDX/SPDX)以实现供应链透明度,并在之后针对新披露的 CVE 重新扫描该 SBOM 时。
- 在扫描正在运行的 Kubernetes 集群,以发现存在漏洞的工作负载和配置错误的 RBAC/资源时。
- 在对依赖项强制执行许可证合规策略时。
前提条件
- 一台 Linux/macOS/Windows 主机或 CI 运行器,且具有网络访问权限以下载 Trivy 漏洞数据库。
- 如果按名称扫描本地镜像或使用容器化 Trivy,则需要 Docker(可选)。
- 安装 Trivy(Aqua Security 官方方法):
# Debian/Ubuntu (APT repository)
sudo apt-get install -y wget gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install -y trivy
# RHEL/CentOS (YUM repository), macOS (Homebrew), and install script
brew install trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin
# Containerized usage (no install)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image python:3.10-alpine
# Verify
trivy --version
- 对于隔离网络或受限速的环境,可使用
trivy image --download-db-only预下载数据库,并按需预下载 Java/策略包。
目标
- 扫描容器镜像中的操作系统和语言漏洞,并在超过严重性阈值时使构建失败。
- 扫描 IaC(Terraform/Kubernetes/Dockerfile)中的错误配置。
- 检测仓库或文件系统中的硬编码密钥。
- 生成 CycloneDX 或 SPDX SBOM,并重新扫描其漏洞。
- 输出 SARIF 以供 GitHub 代码扫描使用,输出 JSON 以供程序化门禁使用。
- 使用
--exit-code将 Trivy 接入 CI/CD 管线以强制执行策略。
MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 | 相关性 |
|---|---|---|---|
| T1525 | 植入内部镜像 | 持久化 | Trivy 在存在漏洞或恶意的镜像/层以及嵌入的密钥被植入镜像仓库并传播到运行中的工作负载之前,即可检测到它们。 |
工作流
1. 扫描容器镜像中的漏洞
对镜像仓库中的镜像运行仅漏洞扫描,限制为高危/严重发现,并忽略没有可用修复的 CVE:
trivy image \
--scanners vuln \
--severity HIGH,CRITICAL \
--ignore-unfixed \
--format table \
python:3.10-alpine
扫描保存为 tarball 的镜像(当镜像已构建但尚未推送时很有用):
docker save myorg/app:1.4.0 -o app.tar
trivy image --input app.tar --severity CRITICAL --format json --output app-vulns.json
2. 对镜像启用多个扫描器
同时运行漏洞、错误配置、密钥和许可证扫描器:
trivy image \
--scanners vuln,misconfig,secret,license \
--severity MEDIUM,HIGH,CRITICAL \
myorg/app:1.4.0
扫描镜像内嵌的配置(等同于 Dockerfile 的构建历史及历史记录中的密钥):
trivy image --image-config-scanners misconfig,secret myorg/app:1.4.0
3. 扫描基础设施即代码(错误配置)
使用 config 目标扫描 Terraform / Kubernetes / Dockerfile / Helm / CloudFormation 目录中的错误配置:
# Scan a Terraform / IaC directory
trivy config \
--severity HIGH,CRITICAL \
--format table \
./infra
# Scan with custom Rego policies and a specific policy namespace
trivy config \
--config-policy ./policies \
--policy-namespaces user \
./infra
或者使用 fs(文件系统)目标并显式指定错误配置扫描器:
trivy fs --scanners misconfig,secret --severity HIGH,CRITICAL ./infra
4. 扫描仓库并检测密钥
扫描本地工作树(或远程仓库)中锁文件的漏洞和硬编码密钥:
# Local filesystem (dependencies + secrets)
trivy fs --scanners vuln,secret --severity HIGH,CRITICAL .
# Remote Git repository
trivy repository --scanners vuln,secret https://github.com/myorg/myrepo
5. 生成并重新扫描 SBOM
从镜像生成 CycloneDX SBOM,然后扫描该 SBOM 本身以查找漏洞(这样当新的 CVE 被披露时,可以对已存储的 SBOM 重新评估):
# Generate CycloneDX SBOM
trivy image --format cyclonedx --output sbom.cdx.json myorg/app:1.4.0
# Generate SPDX SBOM
trivy image --format spdx-json --output sbom.spdx.json myorg/app:1.4.0
# Re-scan the SBOM for vulnerabilities later
trivy sbom --severity HIGH,CRITICAL sbom.cdx.json
6. 为代码扫描仪表盘输出 SARIF
生成可供 GitHub Advanced Security / 代码扫描摄取使用的 SARIF:
trivy image \
--format sarif \
--output trivy-results.sarif \
--severity HIGH,CRITICAL \
myorg/app:1.4.0
7. 通过退出码控制 CI/CD 流水线
使用 --exit-code 1,以便在存在达到或高于所选严重级别的发现项时,让流水线步骤失败。将“全部报告”的运行(退出码 0)与“强制执行”的运行(退出码 1)分开:
# 1) Informational report (never fails the build)
trivy image --severity LOW,MEDIUM,HIGH,CRITICAL --exit-code 0 --format table myorg/app:1.4.0
# 2) Enforcement gate (fails build on HIGH/CRITICAL with a fix available)
trivy image \
--severity HIGH,CRITICAL \
--ignore-unfixed \
--exit-code 1 \
--format json --output gate.json \
myorg/app:1.4.0
使用官方 action 的 GitHub Actions 步骤示例:
- name: Run Trivy image scan (gate)
uses: aquasecurity/trivy-action@master
with:
image-ref: 'myorg/app:1.4.0'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'HIGH,CRITICAL'
ignore-unfixed: true
exit-code: '1'
8. 管理误报和数据库
使用 .trivyignore 文件抑制已接受风险的发现项,并保持数据库为最新:
# .trivyignore — one CVE/AVD/secret rule ID per line
echo "CVE-2023-12345" >> .trivyignore
echo "AVD-AWS-0089" >> .trivyignore
# Refresh DBs explicitly (useful for caching layers in CI)
trivy image --download-db-only
trivy image --download-java-db-only
# Scan a Kubernetes cluster (summary report)
trivy k8s --report summary --severity HIGH,CRITICAL cluster
工具与资源
| 工具 / 资源 | 用途 | 链接 |
|---|---|---|
| Trivy | 核心扫描器命令行 | https://github.com/aquasecurity/trivy |
| Trivy Documentation | 官方文档(目标、扫描器、标志) | https://trivy.dev/latest/docs/ |
| trivy-action | GitHub Actions 集成 | https://github.com/aquasecurity/trivy-action |
| Trivy Operator | 集群内 Kubernetes 持续扫描 | https://github.com/aquasecurity/trivy-operator |
| Trivy vulnerability DB | 开源漏洞数据源 | https://github.com/aquasecurity/trivy-db |
| CycloneDX | Trivy 输出的 SBOM 标准 | https://cyclonedx.org/ |
验证标准
- 已安装 Trivy,且
trivy --version报告有效版本。 - 已对容器镜像进行漏洞扫描并应用严重级别过滤。
- 已使用多个扫描器(漏洞、错误配置、密钥、许可证)扫描镜像。
- 已使用
trivy config扫描 IaC 目录并审查错误配置。 - 已对仓库运行密钥扫描。
- 已生成 CycloneDX/SPDX SBOM 并使用
trivy sbom成功重新扫描。 - 已为代码扫描仪表盘生成 SARIF 输出。
- CI/CD 门禁通过
--exit-code 1在 HIGH/CRITICAL 发现项上使构建失败。 - 已为已接受风险的发现项配置
.trivyignore并记录理由。