第十章:镜像安全扫描与制品管理:Harbor、Trivy 与制品生命周期
CI 流水线构建出的 Docker 镜像如果存在已知漏洞就直接部署到生产环境相当于“带病上线”。据统计约 30% 的公开镜像存在高危漏洞。因此镜像安全扫描和制品管理是 CI/CD 流水线中不可或缺的环节。本章介绍如何使用 Trivy 进行镜像漏洞扫描以及如何使用 Harbor 搭建企业级私有镜像仓库实现制品的全生命周期管理。一、镜像安全扫描在 CI 流水线中集成 TrivyTrivy 是 Aqua Security 开源的综合漏洞扫描工具支持容器镜像、文件系统和 Git 仓库的安全扫描。它维护着实时更新的漏洞数据库在 CI 环境中运行速度极快。1.1 在 GitLab CI 中集成 Trivy# .gitlab-ci.ymlstages:-build-scan-deployvariables:TRIVY_SEVERITY:HIGH,CRITICALTRIVY_IGNORE_UNFIXED:truebuild-image:stage:buildimage:docker:latestservices:-docker:dindscript:-docker build-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .-docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA# 镜像安全扫描scan-image:stage:scanimage:aquasec/trivy:latestscript:-trivy image--severity HIGH,CRITICAL--exit-code 1 $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHAonly:-main-merge_requests–severity HIGH,CRITICAL只扫描高危和严重级别漏洞–exit-code 1发现漏洞时令 Job 失败阻断流水线–ignore-unfixed忽略暂无修复方案的漏洞可根据策略调整1.2 在 GitHub Actions 中集成 Trivy使用官方 Trivy Action# .github/workflows/security.yml-name:Run Trivy vulnerability scanneruses:aquasecurity/trivy-actionmasterwith:image-ref:ghcr.io/${{github.repository}}:${{github.sha}}format:sarifoutput:trivy-results.sarifseverity:HIGH,CRITICALexit-code:1-name:Upload Trivy results to GitHub Securityuses:github/codeql-action/upload-sarifv3with:sarif_file:trivy-results.sarif将扫描结果上传到 GitHub Security 选项卡可以在统一界面查看所有漏洞详情。1.3 扫描策略最佳实践二、制品管理Harbor 企业级镜像仓库Harbor 是 CNCF 毕业项目是企业级容器镜像仓库的事实标准。它提供镜像存储、漏洞扫描、复制策略、权限管理等核心能力。2.1 Harbor 的核心功能2.2 在 CI 流水线中集成 HarborGitLab CI 推送镜像到 Harborpush-to-harbor:stage:deployimage:docker:latestservices:-docker:dindscript:-docker login-u $HARBOR_USER-p $HARBOR_PASSWORD $HARBOR_URL-docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA $HARBOR_URL/$HARBOR_PROJECT/myapp:$CI_COMMIT_SHORT_SHA-docker push $HARBOR_URL/$HARBOR_PROJECT/myapp:$CI_COMMIT_SHORT_SHA-docker push $HARBOR_URL/$HARBOR_PROJECT/myapp:latestGitHub Actions 推送镜像到 Harbor-name:Login to Harboruses:docker/login-actionv3with:registry:harbor.example.comusername:${{secrets.HARBOR_USERNAME}}password:${{secrets.HARBOR_PASSWORD}}-name:Build and push to Harboruses:docker/build-push-actionv5with:push:truetags:|harbor.example.com/myproject/myapp:${{ github.sha }} harbor.example.com/myproject/myapp:latest2.3 Harbor 的镜像复制策略跨集群镜像复制是 Harbor 的企业级特性适用于多地域部署场景json{“name”: “prod-to-dr”,“src_registry”: {“url”: “http://harbor-prod.example.com”},“dest_registry”: {“url”: “http://harbor-dr.example.com”},“filters”: [{“type”: “tag”,“pattern”: “prod-*”}],“trigger”: {“type”: “event-driven”},“enabled”: true}三、制品生命周期管理制品Artifact的管理不应止于“存起来”而应覆盖从构建到废弃的全生命周期。3.1 制品生命周期阶段text构建 → 推送 → 扫描 → 测试部署 → 预发布 → 生产部署 → 归档/废弃3.2 制品清理策略Harbor 自动清理Harbor 支持基于标签和时间的自动清理策略# 在 Harbor 中配置清理策略retention:rules:-scope:projecttag_selectors:-kind:doublestarpattern:*-dev-*decoration:matchesuntagged_artifacts:truetime_scale:daysamount:30# 保留最近 30 天的开发版本CI 流水线中清理旧镜像# 清理 30 天前构建的镜像需安装 harbor-cli 或调用 APIharbor-cli artifact delete--projectmyapp --tag-prefixdev---older-than 30d3.3 制品版本规范四、完整的 DevSecOps 流水线将以上所有环节串联成一条完整的 DevSecOps 流水线text代码提交↓代码质量检查SonarQube↓单元测试JUnit/覆盖率↓构建 Docker 镜像多阶段构建↓镜像安全扫描Trivy阻断高危漏洞↓推送至 Harbor带标签和元数据↓部署到测试环境↓人工审批↓部署到生产环境质量门禁汇总五、小结镜像安全扫描和制品管理是 CI/CD 流水线从“能用”走向“可靠”的关键环节Trivy 提供快速、全面的镜像漏洞扫描可无缝集成到 CI 流水线中Harbor 提供企业级的镜像存储、权限管理、漏洞扫描和跨集群复制能力制品生命周期管理 确保镜像从构建到废弃的全流程可追溯、可管控

相关新闻