容器镜像安全:基于 Harbor+Trivy 实现镜像上传前的漏洞扫描与阻断
技术原理
- Harbor:企业级容器镜像仓库,提供镜像管理、访问控制和漏洞扫描策略
- Trivy:开源漏洞扫描工具,支持容器镜像、文件系统和代码仓库的扫描
- 工作流: $$ \text{镜像构建} \rightarrow \text{上传请求} \xrightarrow{\text{Harbor拦截}} \text{Trivy扫描} \rightarrow \begin{cases} \text{通过} & \rightarrow \text{存入仓库} \ \text{阻断} & \rightarrow \text{返回错误} \end{cases} $$
实现步骤
1. 环境部署
# 安装 Harbor (v2.5+)
helm install harbor harbor/harbor --set expose.tls.enabled=true
# 集成 Trivy 扫描器
docker run -d --name trivy-adapter \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/harbor-scanner-trivy:latest
2. Harbor 配置
# harbor.yml 关键配置
scanner:
adapter: trivy
endpoint: http://trivy-adapter:8080
vulnerability:
severity: high # 阻断阈值:高危及以上漏洞
ignore: CVE-2023-* # 可忽略的CVE列表
3. 扫描策略设置
在 Harbor 控制台操作:
- 进入项目 → 策略 → 添加策略
- 设置触发条件:
- 扫描时机:镜像推送时
- 阻断规则:存在
Critical或High级别漏洞 - 例外规则:特定标签镜像跳过扫描(如
dev-*)
阻断效果验证
# 尝试上传含漏洞的镜像
docker push my-harbor/library/alpine:3.10
# 返回阻断信息(示例):
HTTP/1.1 403 Forbidden
{"errors":[{"code":"DENIED","message":"Blocked by vulnerability policy:
Critical vulnerabilities found: CVE-2023-1234"}]}
漏洞修复流程
- 获取扫描报告:
trivy image --format json alpine:3.10 > report.json - 修复建议:
"Vulnerabilities": [ { "VulnerabilityID": "CVE-2023-1234", "PkgName": "openssl", "FixedVersion": "1.1.1k-r0", "Severity": "Critical" } ] - 更新 Dockerfile:
FROM alpine:3.17 # 升级基础镜像 RUN apk add --no-cache openssl=1.1.1t-r0
最佳实践
-
分级策略:
- 生产环境:阻断
Medium及以上漏洞 - 测试环境:仅记录警告 $$ \text{阻断阈值} = \begin{cases} \text{High} & \text{生产环境} \ \text{Critical} & \text{开发环境} \end{cases} $$
- 生产环境:阻断
-
自动化集成:
graph LR CI[CI流水线] --> Build[构建镜像] Build --> Scan[Trivy扫描] Scan -->|通过| Push[推送至Harbor] Push --> Deploy[部署集群] -
性能优化:
- 使用 Trivy 缓存:
--cache-dir /trivy-cache - 扫描超时控制:
scanner.timeout=300s
- 使用 Trivy 缓存:
注意:定期更新漏洞数据库
trivy --download-db-only,建议每日执行
1794

被折叠的 条评论
为什么被折叠?



