SBOM Generator & Formatter — full Python pipeline (no shell)
Project description
Инструмент для безопасной генерации, анализа и форматирования Software Bill of Materials (SBOM).
Что делает:
- Генерирует SBOM из локальной директории или Git-репозитория (GitHub / GitLab)
- Сканирует уязвимости через Trivy, OWASP Dependency-Check, Clair
- Встраивает найденные уязвимости в SBOM (CycloneDX 1.5)
- Экспортирует читаемые отчёты: Excel (.xlsx), Word (.docx), ODT (.odt)
- Подписывает итоговый SBOM (SHA-256)
Main CLI
Run help
Установка
PyPI:
pip install sbom-pipeline
GitHub Packages:
pip install sbom-pipeline \
--index-url https://${GITHUB_TOKEN}@pypi.pkg.github.com/geminishkv/
Исходники:
git clone https://github.com/geminishkv/sbom_genform.git
cd sbom_genform
python3 -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
Выходные артефакты
SBOM JSON
| Файл | Описание |
|---|---|
secgensbom_out/app-bom-cdxgen.json |
Исходный SBOM |
secgensbom_out/app-bom-dedup.json |
После дедупликации |
secgensbom_out/merged-bom-signed.json |
Подписанный SBOM с уязвимостями |
secgensbom_out/merged-bom-signed.sig |
SHA-256 контрольная сумма |
secgensbom_out/vulns-normalized.json |
Нормализованные уязвимости |
Отчёты сканеров
| Путь | Сканер |
|---|---|
secgensbom_out/trivy/trivy-fs.json |
Trivy — файловая система |
secgensbom_out/trivy/sbom-vulns.json |
Trivy — анализ SBOM |
secgensbom_out/dependency-check/ |
OWASP Dependency-Check |
secgensbom_out/clair/ |
Clair (если включён) |
Reports
| Путь | Формат | Содержимое |
|---|---|---|
secgensbom_reports/excel/*.xlsx |
Excel | Лист 1: компоненты, Лист 2: уязвимости |
secgensbom_reports/docx/*.docx |
Word | Таблица компонентов + таблица уязвимостей |
secgensbom_reports/odt/*.odt |
ODT | То же самое |
Docker
Образ включает Python, Trivy, Docker CLI и Node.js/npx (cdxgen для non-Python проектов). OWASP Dependency-Check запускается отдельно — его Java-зависимость утяжелила бы образ на ~400 МБ.
Docker Hub
docker pull geminishkv/sbom-pipeline:latest
docker run --rm \
-v "$(pwd)/examples/project_inject:/app/project_inject" \
-v "$(pwd)/secgensbom_out:/app/secgensbom_out" \
-v "$(pwd)/secgensbom_reports:/app/secgensbom_reports" \
-v /var/run/docker.sock:/var/run/docker.sock \
geminishkv/sbom-pipeline:latest
CI/CD
GitHub Actions
| Workflow | Триггер | Назначение |
|---|---|---|
ci.yml |
push / PR → main | lint + mypy + pytest (3.11–3.13) |
secgensbom.yml |
push → main, вручную | запуск пайплайна, сохранение SBOM и отчётов |
publish.yml |
тег v*.*.* |
GitHub Packages + PyPI + Docker Hub + GitHub Release |
Публикация новой версии — один тег запускает всё:
git tag v2.1.0
git push --tags
Shared template
Файл secgensbom/secgensbom.yml — это переиспользуемый шаблон CI для GitLab. Любой другой проект в GitLab может подключить готовый SBOM-шаг одной строкой, не копируя конфигурацию:
Архитектура
Пайплайн secsbom run
flowchart TD
IN(["Источник\nlocal / github / gitlab"]) --> GEN
subgraph pipeline["secsbom run — этапы"]
GEN["1 · generate.py\napp-bom-cdxgen.json"]
GEN --> DEDUP["2 · dedup.py\napp-bom-dedup.json\nдедупликация по PURL"]
DEDUP --> SIGN["3 · sign.py\nmerged-bom-signed.json + .sig\nSHA-256 в metadata.signature"]
SIGN --> SCAN
subgraph SCAN["4 · scanner/"]
direction LR
TRIVY["trivy.py\ntrivy-fs.json\nsbom-vulns.json"]
DEPCHECK["depcheck.py\ndependency-check-report.*"]
CLAIR["clair.py\nclair-*.json\n(если --clair)"]
end
TRIVY & DEPCHECK & CLAIR --> MERGE["5 · vuln_merger.py\nvulnerabilities[] в SBOM"]
MERGE --> EXPORT["6 · exporter.py"]
end
EXPORT --> XLSX["secgensbom_reports/\n*.xlsx"]
EXPORT --> DOCX["secgensbom_reports/\n*.docx"]
EXPORT --> ODT["secgensbom_reports/\n*.odt"]
Структура репозитория
sbom_genform/
├── src/sbom_pipeline/
│ ├── cli.py # secsbom / secsbom-pipeline (typer)
│ ├── pipeline.py # оркестратор
│ ├── generate.py # генерация SBOM
│ ├── dedup.py # дедупликация
│ ├── sign.py # SHA-256 подпись
│ ├── exporter.py # xlsx / docx / odt
│ ├── vuln_merger.py # встраивание уязвимостей
│ ├── config.py # конфигурация
│ └── scanner/
│ ├── trivy.py
│ ├── depcheck.py
│ └── clair.py
├── docker/
│ └── Dockerfile.secgensbom
├── examples/project_inject/ # уязвимый PHP проект
├── secgensbom/secgensbom.yml # GitLab CI shared template
├── .github/workflows/
│ ├── ci.yml
│ ├── secgensbom.yml
│ └── publish.yml
├── tests/test_smoke.py
├── pyproject.toml
└── .env.example
Copyright (c) 2025 Elijah S Shmakov
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sbom_pipeline-2.1.0.tar.gz.
File metadata
- Download URL: sbom_pipeline-2.1.0.tar.gz
- Upload date:
- Size: 7.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa072006d0bb74568f3117fb154952d5bb7a1070162d8d799f241913bfa61cce
|
|
| MD5 |
2b4aaa42e84e3663623138a7bb87d931
|
|
| BLAKE2b-256 |
9f4bca13d169dc02d5db7c090d3a1805e376f7960b1a447628d7e73f16d5d67e
|
File details
Details for the file sbom_pipeline-2.1.0-py3-none-any.whl.
File metadata
- Download URL: sbom_pipeline-2.1.0-py3-none-any.whl
- Upload date:
- Size: 43.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e383ff6af8e12bc3107ff1972fffb00e2c8168c37c6ab24ad88fd27a01d8bab
|
|
| MD5 |
c3e707b738258ce410ea25b1688af4c8
|
|
| BLAKE2b-256 |
b7fbf825bff032c8211911ccfefee01c131a3cfa14eed715529c526b41ff96c1
|