basel5001/container-security-scanner
GitHub: basel5001/container-security-scanner
一款复合 GitHub Action,整合 Trivy、Grype 进行容器镜像漏洞扫描并用 Syft 生成 SBOM。
Stars: 0 | Forks: 0


# Container Security 扫描器
一个复合 GitHub Action,使用 **Trivy** 和 **Grype** 扫描容器镜像中的漏洞,并使用 **Syft** 生成 SBOM。
## 功能
- **Trivy** 漏洞扫描,支持严重性过滤
- **Grype** 漏洞扫描,用于交叉验证
- **Syft** SBOM 生成(SPDX 或 CycloneDX)
- 可配置的失败阈值
- 自动上传扫描结果的 artifact
- 通过内置 Python 脚本生成 Markdown 摘要
## 用法
```
- name: Scan container
uses: basel5001/container-security-scanner@v1
with:
image: myapp:latest
severity: HIGH
```
### 完整示例
```
name: Container Security
on:
push:
branches: [main]
pull_request:
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Scan container image
id: scan
uses: basel5001/container-security-scanner@v1
with:
image: myapp:latest
severity: HIGH
fail-on-vuln: "true"
generate-sbom: "true"
sbom-format: spdx-json
upload-results: "true"
- name: Print results
if: always()
run: |
echo "Trivy vulnerabilities: ${{ steps.scan.outputs.trivy-vulns }}"
echo "Grype vulnerabilities: ${{ steps.scan.outputs.grype-vulns }}"
echo "SBOM file: ${{ steps.scan.outputs.sbom-file }}"
```
### 不生成 SBOM
```
- name: Scan container (no SBOM)
uses: basel5001/container-security-scanner@v1
with:
image: myapp:latest
severity: CRITICAL
generate-sbom: "false"
```
## 输入
| 输入 | 描述 | 必填 | 默认值 |
|-------|-------------|----------|---------|
| `image` | 要扫描的容器镜像(例如 `nginx:latest`) | 是 | - |
| `severity` | 报告的最低严重性(`CRITICAL`、`HIGH`、`MEDIUM`、`LOW`) | 否 | `HIGH` |
| `fail-on-vuln` | 如果发现漏洞则使 workflow 失败 | 否 | `true` |
| `generate-sbom` | 使用 Syft 生成 SBOM | 否 | `true` |
| `sbom-format` | SBOM 输出格式(`spdx-json`、`cyclonedx-json`) | 否 | `spdx-json` |
| `upload-results` | 将扫描结果作为 artifact 上传 | 否 | `true` |
## 输出
| 输出 | 描述 |
|--------|-------------|
| `trivy-vulns` | Trivy 发现的漏洞数量 |
| `grype-vulns` | Grype 发现的漏洞数量 |
| `sbom-file` | 生成的 SBOM 文件路径 |
## 摘要脚本
内置的 Python 脚本(`src/summarize.py`)会读取 Trivy 和 Grype 的 JSON 输出文件,并生成 Markdown 摘要报告。
```
python3 src/summarize.py trivy-results.json grype-results.json
```
## 使用的工具
| 工具 | 用途 | 来源 |
|------|---------|--------|
| [Trivy](https://github.com/aquasecurity/trivy) | 漏洞扫描 | Aqua Security |
| [Grype](https://github.com/anchore/grype) | 漏洞扫描 | Anchore |
| [Syft](https://github.com/anchore/syft) | SBOM 生成 | Anchore |
## 开发
### 在本地运行测试
```
pip install pytest
pytest tests/ -v
```
### 使用 `act` 在本地测试 action
```
act -j scan-alpine
```
## 许可证
[MIT](LICENSE)
标签:GitHub Action, SBOM生成, Web截图, 容器安全, 请求拦截, 逆向工具