basel5001/container-security-scanner

GitHub: basel5001/container-security-scanner

一款复合 GitHub Action,整合 Trivy、Grype 进行容器镜像漏洞扫描并用 Syft 生成 SBOM。

Stars: 0 | Forks: 0

![Test](https://static.pigsec.cn/wp-content/uploads/repos/cas/03/0327bafb9f60060943543cb22f842fe95b8ab4879eb644b40897982ad4a5960c.svg) ![Security](https://static.pigsec.cn/wp-content/uploads/repos/cas/21/21d6c97adf03f3e1ac3fe1d01fc6d6b9eafb9f1307acd3a491dea0a15a1fb3dd.svg) # 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截图, 容器安全, 请求拦截, 逆向工具