容器安全扫描:Trivy+Harbor 镜像漏洞检测

容器安全扫描:Trivy+Harbor 镜像漏洞检测
容器安全扫描的重要性
在容器化部署普及的今天,容器安全已成为 DevOps 流程中的关键环节。2023 年 CVE 漏洞数据库新增漏洞超过 2 万个,其中容器镜像漏洞占比超过 30%。
容器安全面临的主要威胁:
- 基础镜像包含已知漏洞(CVE)
- 应用依赖库的安全风险
- 配置错误导致的暴露风险
- 镜像供应链攻击
安全扫描的价值:
- 提前发现并修复漏洞
- 满足合规要求(等保、PCI-DSS)
- 降低生产环境安全风险
- 提升镜像质量和可信度
—
Trivy 基本概念和安装配置
1. 什么是 Trivy?
Trivy 是由 Aqua Security 开发的开源安全扫描工具,支持:
- 容器镜像扫描
- 文件系统扫描
- 代码仓库扫描
- 配置即代码(IaC)扫描
- 支持 70+ 种 CVE 数据库
2. 安装 Trivy
# Ubuntu/Debian
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
CentOS/RHEL
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
使用 Homebrew(macOS)
brew install trivy
验证安装
trivy --version
3. 配置 Trivy
# 配置目录
mkdir -p ~/.config/trivy
配置示例 ~/.config/trivy/config.yaml
severity:
- CRITICAL
- HIGH
skip-dirs:
- .git
- node_modules
format: table
跳过已修复的漏洞
exit-code: 1
—
Harbor 镜像仓库的漏洞检测功能
1. Harbor 安全扫描架构
┌─────────────────────────────────────────────────────────────┐
│ Harbor 安全扫描流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 镜像上传 → Trivy 扫描 → 生成报告 → 自动阻断 → 安全发布 │
│ ↓ ↓ ↓ ↓ │
│ Harbor Trivy 漏洞数据库 质量规则 CI/CD │
│ │
└─────────────────────────────────────────────────────────────┘
2. Harbor 扫描器配置
“`yaml
Harbor 配置 harbor.yml
scanner:
scanner:
type: trivy
url: http://harbor-scanner-trivy:8080
trivy:
ignore_unfixed: true
insecure: false
severity: CRITICAL,HIGH
timeout: 300s
auto_update: true
3. 漏洞检测级别
| 级别 | 描述 | 建议处理方式 |
|------|------|-------------|
| CRITICAL | 严重漏洞 | 立即修复 |
| HIGH | 高危漏洞 | 尽快修复 |
| MEDIUM | 中等风险 | 计划修复 |
| LOW | 低风险 | 可延后 |
| UNKNOWN | 未分类 | 评估 |
---
Trivy 与 Harbor 集成方案
1. Harbor 集成方式
yaml
docker-compose.yml for Trivy + Harbor
version: ‘3.8’
services:
trivy:
image: aquasec/trivy:latest
volumes:
- trivy-data:/root/.trivy
environment:
- TRIVY_DB_REPOSITORY=ghcr.io/aquasecurity/trivy-db
command: server
harbor:
image: harbor/harbor-core:latest
environment:
- SCANNER_URL=http://trivy:8080
- SCANNER_API_VERSION=v1
2. Harbor 扫描器配置
yaml
开启镜像自动扫描
Harbor UI 配置路径:System > Configuration > Security
扫描策略
扫描策略配置:
- 触发条件:镜像上传后自动扫描
- 扫描器:Trivy
- 报告存储:保留 30 天
- 通知方式:邮件/Webhook
3. 安全扫描 API
bash
手动触发扫描
curl -X POST http://localhost:8080/api/v2.0/scan/requests \
-H “Content-Type: application/json” \
-H “Authorization: Bearer $TOKEN” \
-d ‘{
“scan_type”: “vulnerability”,
“artifact”: {
“repository”: “library/nginx”,
“reference”: “1.21”
}
}’
查看扫描结果
curl -X GET http://localhost:8080/api/v2.0/scan/requests \
-H “Authorization: Bearer $TOKEN”
---
实际扫描命令和漏洞报告解读
1. 基础扫描命令
bash
扫描容器镜像
trivy image nginx:latest
trivy image –severity CRITICAL,HIGH nginx:latest
扫描本地文件系统
trivy fs /path/to/project
扫描 Helm Chart
trivy helm my-chart-1.0.0.tgz
扫描 Dockerfile
trivy config Dockerfile
2. 生成报告
bash
JSON 格式报告
trivy image –format json –output trivy-report.json nginx:latest
模板报告
trivy image \
–format template \
–template “@contrib/remediation.tmpl” \
–output remediation.md \
nginx:latest
JUnit 格式(用于 CI/CD)
trivy image –format junit –output trivy-results.xml nginx:latest
SARIF 格式(用于 IDE)
trivy image –format sarif –output trivy-results.sarif nginx:latest
3. 漏洞报告解读
bash
详细扫描输出
trivy image –severity CRITICAL,HIGH,MEDIUM nginx:latest
输出示例:
nginx:latest (debian 11.6)
============================================================
Total: 123 (CRITICAL: 2, HIGH: 15, MEDIUM: 45, LOW: 61)
============================================================
# Library Version Fixed Type Vulnerability Severity
——— ——- —– —- ————— ——–
zlib 1.2.11 1.2.12 library CVE-2018-25032 HIGH
openssl 1.1.1k 1.1.1n library CVE-2021-3449 HIGH
libxml2 2.9.12 2.9.13 library CVE-2021-43082 CRITICAL
4. 忽略漏洞配置
yaml
trivy.yaml 配置
ignore-unfixed: true
项目级忽略 .trivyignore
CVE-2018-25032
CVE-2021-3449
按依赖忽略
文件路径:.trivyignore
node_modules/
vendor/
---
安全扫描在 CI/CD 流水线中的集成
1. Jenkins Pipeline 集成
groovy
pipeline {
agent any
stages {
stage(‘Build’) {
steps {
sh ‘docker build -t myapp:${BUILD_NUMBER} .’
sh ‘docker tag myapp:${BUILD_NUMBER} harbor.example.com/myapp:${BUILD_NUMBER}’
}
}
stage(‘Scan’) {
steps {
script {
sh ”’
trivy image –severity CRITICAL,HIGH \
–format json \
–output trivy-report.json \
myapp:${BUILD_NUMBER}
”’
sh ”’
if grep -q ‘”Severities”:{“CRITICAL”:0}’ trivy-report.json; then
echo “✅ 无严重漏洞”
else
echo “❌ 发现严重漏洞”
exit 1
fi
”’
}
}
}
stage(‘Push’) {
when {
expression { currentBuild.result != ‘FAILURE’ }
}
steps {
sh ‘docker push harbor.example.com/myapp:${BUILD_NUMBER}’
}
}
}
post {
always {
archiveArtifacts artifacts: ‘trivy-report.json’
}
failure {
emailext subject: “镜像扫描失败”, body: “${env.BUILD_URL}”
}
}
}
2. GitLab CI 集成
yaml
.gitlab-ci.yml
stages:
- build
- scan
- deploy
build:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
scan:
stage: scan
image: aquasec/trivy:latest
script:
- trivy image –severity CRITICAL,HIGH –exit-code 1 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- trivy image –format json –output trivy-report.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
reports:
vulnerability: trivy-report.json
deploy:
stage: deploy
script:
- kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
when: manual
only:
- main
3. GitHub Actions 集成
yaml
.github/workflows/safety.yml
name: Container Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: ‘myapp:${{ github.sha }}’
format: ‘sarif’
output: ‘trivy-results.sarif’
severity: ‘CRITICAL,HIGH’
- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: ‘trivy-results.sarif’
---
最佳实践与建议
1. 扫描策略
yaml
扫描频率
扫描策略:
- 每日扫描:所有生产镜像
- 每次构建:新镜像扫描
- 每周全量扫描:仓库所有镜像
质量门控
质量门控:
- CRITICAL: 0 漏洞
- HIGH: ≤ 3 漏洞
- MEDIUM: 报告但不阻断
- LOW: 仅记录
2. 基线配置
yaml
基线配置
基础镜像选择:
- 使用官方安全基础镜像
- 定期更新基础镜像
- 最小化镜像体积
依赖管理:
- 锁定依赖版本
- 定期更新依赖
- 使用 SCA 工具
3. 持续改进
yaml
安全文化建设
安全文化:
- 定期培训
- 漏洞修复 SLA
- 安全评审流程
- 持续监控告警
“`
—
总结
容器安全扫描是现代化软件开发中不可或缺的一环。通过 Trivy 与 Harbor 的集成,可以实现从镜像构建到部署的全流程安全管控。
关键要点:
- 选择合适的安全扫描工具(Trivy、Grype 等)
- 集成到 CI/CD 流程,实现自动化扫描
- 制定质量门控策略,确保漏洞及时修复
- 定期扫描和更新,保持镜像安全
- 建立安全文化,持续提升安全水平
通过持续的安全扫描和漏洞管理,可以显著降低容器环境的安全风险,保障生产系统的安全稳定运行。



发表评论