Dem1241/harbor-scanner

GitHub: Dem1241/harbor-scanner

自动化 Harbor 镜像漏洞扫描流程的 Go CLI 工具,将推送、触发扫描、等待完成并导出 JSON 报告整合为单条命令。

Stars: 0 | Forks: 0

# harbor-scanner `harbor-scanner` 是一个用于处理 Harbor 镜像扫描的小型 Go CLI 工具。 它主要帮助处理两种常见情况: - 镜像已存在于 Harbor 中,你想对其进行扫描 - 镜像存在于本地,你想将其推送到 Harbor,进行扫描,并保存报告 它本身并不扫描镜像。这部分工作由 Harbor 和 Trivy 完成。该工具只是自动化了围绕它们的操作流程。 ## 它的功能 该 CLI 可以: - 将镜像发布到 Harbor - 触发扫描 - 等待扫描完成 - 获取漏洞报告 - 打印严重性摘要 - 将完整报告保存为 JSON ## 要求 你需要: - 一个正在运行的 Harbor 实例 - 配置了 Trivy 或其他兼容扫描器的 Harbor - 具有推送镜像和触发扫描权限的 Harbor 用户或 robot account - 如果要发布镜像,需要本地的 container CLI 支持的本地 CLI: - `docker` - `podman` - `nerdctl` ## 配置 设置这些环境变量: ``` export HARBOR_URL=http://harbor.local export HARBOR_USER=admin export HARBOR_PASSWORD=your-password-or-robot-token ``` 可选: ``` export HARBOR_REGISTRY=harbor-registry.local export CONTAINER_CLI=podman ``` 说明: - `HARBOR_URL` 是 Harbor API 的基础 URL。 - `HARBOR_REGISTRY` 是可选的。当 registry 主机名与 Harbor API 主机名不同时使用它。 - `CONTAINER_CLI` 是可选的。默认为 `docker`。 ## 登录 在发布镜像之前,请使用你的 container CLI 登录 Harbor: ``` docker login harbor.local ``` 如果你使用 Podman: ``` podman login harbor.local ``` 如果 Harbor 运行在纯 HTTP 协议之上,则必须将你的 container runtime 配置为信任该 registry。 ## 构建 ``` go build -o harbor-scanner ``` ## 快速入门 ### 1. 检查 Harbor 健康状态 ``` ./harbor-scanner health ``` ### 2. 扫描已存在于 Harbor 中的镜像 ``` ./harbor-scanner scan-wait library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` 此操作会: - 触发扫描 - 等待扫描完成 - 打印摘要 - 将完整的 JSON 报告写入 `reports/demo-nginx-1.21.json` ### 3. 一步完成发布并扫描镜像 ``` ./harbor-scanner publish-scan nginx:1.21 library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` 这是主要的端到端工作流程。 ### 4. 使用 Podman 代替 Docker ``` export CONTAINER_CLI=podman ./harbor-scanner publish-scan nginx:1.21 library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` 你也可以使用 `nerdctl` 执行相同的操作: ``` export CONTAINER_CLI=nerdctl ./harbor-scanner publish-scan nginx:1.21 library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` ## 命令 ### `health` 检查 Harbor 是否可以访问。 ``` ./harbor-scanner health ``` ### `publish` 将本地或远程镜像推送到 Harbor 中。 ``` ./harbor-scanner publish ``` 示例: ``` ./harbor-scanner publish nginx:1.21 library demo-nginx 1.21 ``` 在内部,这相当于执行了以下操作: ``` docker pull nginx:1.21 docker tag nginx:1.21 harbor.local/library/demo-nginx:1.21 docker push harbor.local/library/demo-nginx:1.21 ``` 只不过它使用的是在 `CONTAINER_CLI` 中设置的工具。 ### `scan` 为已存在于 Harbor 中的镜像启动扫描。 ``` ./harbor-scanner scan ``` 示例: ``` ./harbor-scanner scan library demo-nginx 1.21 ``` ### `report` 获取并打印现有的漏洞报告。 ``` ./harbor-scanner report ``` 示例: ``` ./harbor-scanner report library demo-nginx 1.21 ``` ### `scan-wait` 触发扫描,等待完成,并写入 JSON 报告。 ``` ./harbor-scanner scan-wait ``` 示例: ``` ./harbor-scanner scan-wait library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` ### `publish-scan` 发布镜像,进行扫描,等待完成,并写入 JSON 报告。 ``` ./harbor-scanner publish-scan ``` 示例: ``` ./harbor-scanner publish-scan nginx:1.21 library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` 对于本地构建的应用程序: ``` docker build -t my-api:dev . ./harbor-scanner publish-scan my-api:dev library my-api dev reports/my-api-dev.json ``` ## 镜像命名 Harbor 镜像引用如下所示: ``` harbor.local/library/demo-nginx:1.21 ``` 组成部分: - `harbor.local`:registry 主机 - `library`:Harbor 项目 - `demo-nginx`:仓库名称 - `1.21`:标签 ## 报告格式 保存的报告包含: - 项目 - 仓库 - 引用 - 镜像 - 生成时间戳 - 严重性摘要 - 完整发现列表 示例: ``` { "project": "library", "repository": "demo-nginx", "reference": "1.21", "image": "library/demo-nginx:1.21", "generated_at": "2026-06-03T21:30:00+02:00", "summary": { "CRITICAL": 28, "HIGH": 159, "MEDIUM": 262, "LOW": 209, "UNKNOWN": 15 }, "findings": [ { "id": "CVE-2024-56171", "severity": "CRITICAL", "package": "libxml2", "version": "2.9.10", "fixed_version": "2.9.10+patched", "description": "Example vulnerability description" } ] } ``` ## 典型工作流 完整工作流: ``` export HARBOR_URL=http://harbor.local export HARBOR_USER=admin export HARBOR_PASSWORD=your-password docker login harbor.local ./harbor-scanner publish-scan nginx:1.21 library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` 仅针对现有的 Harbor 镜像: ``` export HARBOR_URL=http://harbor.local export HARBOR_USER=admin export HARBOR_PASSWORD=your-password ./harbor-scanner scan-wait library demo-nginx 1.21 reports/demo-nginx-1.21.json ``` 对于共享或生产环境的使用,通常使用 Harbor robot account 比个人管理员账户更好。
标签:DevSecOps, Docker, EVTX分析, Go, GPT, Harbor, Harbor API, JSON导出, nerdctl, Podman, Ruby工具, Web截图, 上游代理, 安全合规, 安全报告, 安全防御评估, 容器安全, 容器镜像仓库, 开源框架, 持续集成, 日志审计, 活动识别, 漏洞管理, 网络代理, 网络调试, 自动化, 请求拦截, 运维工具, 镜像扫描, 镜像推送, 镜像管理