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截图, 上游代理, 安全合规, 安全报告, 安全防御评估, 容器安全, 容器镜像仓库, 开源框架, 持续集成, 日志审计, 活动识别, 漏洞管理, 网络代理, 网络调试, 自动化, 请求拦截, 运维工具, 镜像扫描, 镜像推送, 镜像管理