
Статическое веб-приложение для просмотра SBOM и выполнения сканирования уязвимостей по запросу с помощью osv.dev. Легко развертывается на GitHub/GitLab Pages.
Простое статическое веб-приложение для отображения зависимостей программного обеспечения из файлов Software Bill of Materials (SBOM). Будучи статическим сайтом, его можно легко разместить на любом хостинге статических сайтов, таком как GitLab Pages, GitHub Pages или Netlify.
trivy image <image> --format=cyclonedx --output=sbom.json --scanners vulngrype <image> --output cyclonedx-json > sbom.jsonВ настоящее время BOM View поддерживает форматы CycloneDX и SPDX в JSON. Их можно создавать с помощью таких инструментов, как syft.
Это приложение предназначено для динамической загрузки SBOM во время выполнения. Чтобы добавить свои SBOM, вам не нужно пересобирать проект. Выполните следующие действия в корневом каталоге вашего развернутого статического сайта (например, в папке dist или public, обслуживаемой вашим заданием pages).
Создайте каталог sboms: Если его еще нет, создайте каталог с именем sboms.
Добавьте ваши SBOM: Скопируйте ваши файлы CycloneDX/SPDX JSON в каталог sboms.
Обновите индексный файл: Создайте или обновите файл с именем index.json внутри каталога sboms. Этот файл сообщает приложению, какие SBOM доступны. Он должен содержать один JSON-массив строк, где каждая строка — это имя файла SBOM в этом каталоге.
Например, если у вас есть my-app.json и another-lib.json, файл index.json должен выглядеть так:
[
"my-app.json",
"another-lib.json"
]
Затем приложение получит index.json, чтобы заполнить выпадающий список выбора SBOM и загрузить соответствующий файл при выборе.
Ниже приведен пример конфигурации .gitlab-ci.yml, которая загружает готовую сборку релиза, извлекает SBOM и динамически создает index.json для развертывания.
stages:
- sbom
- deploy
create_sbom:
stage: sbom
image: alpine:3.23.2
before_script:
- apk add syft
script:
- mkdir sboms
- syft alpine:3.19 -o cyclonedx-json=sboms/alpine-cyclone.json
artifacts:
paths:
- sboms
pages:
stage: deploy
image: alpine:3.23.2
before_script:
- apk add curl jq
script:
- curl -L https://github.com/hristiy4n/bom-view/releases/download/v0.4.0/bom-view-v0.4.0-dist.tar.gz | tar zx
- mv dist public
- mkdir public/sboms
- cp sboms/* public/sboms
- |
find sboms -maxdepth 1 -type f -name '*.json' ! -name 'index.json' \
| sed 's|.*/||' \
| sort \
| jq -R . | jq -s . > public/sboms/index.json
needs:
- job: create_sbom
artifacts:
paths:
- public
Вы можете увидеть живой пример этой конфигурации в действии здесь: https://security-dashboard-a9b4f8.gitlab.io/
Ваш конечный каталог развертывания должен иметь следующую структуру:
dist/
├── assets/
│ └── ... (файлы CSS и JS)
├── index.html
└── sboms/
├── index.json
├── sbom1.json
├── sbom2.json
└── ...