Skip to main content

SBOM Generator & Formatter — full Python pipeline (no shell)

Project description

repo size last commit commit activity open PRs contributors

CI Docker Hub PyPI Python License GitHub Package

Инструмент для безопасной генерации, анализа и форматирования 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

mainhelp


Run help

runhelp


Установка

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

Logo

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sbom_pipeline-2.1.0.tar.gz (7.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sbom_pipeline-2.1.0-py3-none-any.whl (43.8 kB view details)

Uploaded Python 3

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

Hashes for sbom_pipeline-2.1.0.tar.gz
Algorithm Hash digest
SHA256 aa072006d0bb74568f3117fb154952d5bb7a1070162d8d799f241913bfa61cce
MD5 2b4aaa42e84e3663623138a7bb87d931
BLAKE2b-256 9f4bca13d169dc02d5db7c090d3a1805e376f7960b1a447628d7e73f16d5d67e

See more details on using hashes here.

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

Hashes for sbom_pipeline-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1e383ff6af8e12bc3107ff1972fffb00e2c8168c37c6ab24ad88fd27a01d8bab
MD5 c3e707b738258ce410ea25b1688af4c8
BLAKE2b-256 b7fbf825bff032c8211911ccfefee01c131a3cfa14eed715529c526b41ff96c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page