CycloneDX cdxgen on distroless, with uv for Python projects without a lock file
762
Образ генератора SBOM cdxgen на distroless: SBOM проекта без сети и без установки зависимостей, без оболочки внутри и от непривилегированного пользователя.
Исходники, документация и выпуски: github.com/geminishkv/cdxgen-distroless.
| Тег | Что это |
|---|---|
12.9.0, latest | текущий выпуск: cdxgen 12.9.0, linux/amd64 и linux/arm64 |
Версия образа равна версии cdxgen внутри. Тег может быть пересобран при обновлении базовых образов, поэтому в пайплайнах стоит закреплять digest текущего выпуска:
docker pull docker.io/geminishkvdev/cdxgen-distroless@sha256:a0ea880d18e0ff56cd188a10291f3eb6c8425d62bb1c4eaa49a65c3969122065
Тот же образ опубликован в GHCR: ghcr.io/geminishkv/cdxgen-distroless.
SBOM проекта с lock-файлом: каталог монтируется только на чтение, сеть контейнеру не нужна.
IMAGE=docker.io/geminishkvdev/cdxgen-distroless@sha256:a0ea880d18e0ff56cd188a10291f3eb6c8425d62bb1c4eaa49a65c3969122065
docker create --name cdxgen-sbom --network none \
-v "$PWD":/app:ro "$IMAGE" \
-t js --spec-version 1.6 --no-install-deps -o /tmp/bom.json /app
docker start -a cdxgen-sbom
docker cp cdxgen-sbom:/tmp/bom.json bom.json
docker rm cdxgen-sbom
Для Python-проекта без lock-файла зависимости сначала разрешает uv pip compile из того же образа, без установки и сборки пакетов. Этот сценарий, параметры и ограничения описаны в README.
| Компонент | Версия | Источник |
|---|---|---|
| cdxgen | 12.9.0 | npm-пакет @cyclonedx/cdxgen, зависимости по package-lock.json |
| Node.js | 24 | gcr.io/distroless/nodejs24-debian13:nonroot@sha256:b8cec4b2f2126ff7bd034ec9ac207ffb3272667dfdc48376e3b035d3270549ba |
| uv | 0.13.6 | ghcr.io/astral-sh/uv:0.13.6@sha256:af22a52f5eafef3d78e551599d405c02df61919d18028f0cea8eda93bc9986d0 |
| Python, только stdlib | 3.12 | docker.io/library/python:3.12-slim@sha256:e695ab189fa2d082b1c61c69a6b888a5adeca61ceeccad107b1ed2a125721a9e |
Пользователь 65532:65532. Оболочки, apt, npm и pip в образе нет, LICENSE и NOTICE лежат в /licenses.
Образ подписан cosign keyless, сертификат выписан на workflow release.yml репозитория; в GHCR дополнительно лежит аттестация происхождения GitHub.
cosign verify ghcr.io/geminishkv/cdxgen-distroless@sha256:a0ea880d18e0ff56cd188a10291f3eb6c8425d62bb1c4eaa49a65c3969122065 \
--certificate-identity-regexp '^https://github.com/geminishkv/cdxgen-distroless/\.github/workflows/release\.yml@refs/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
gh attestation verify oci://ghcr.io/geminishkv/cdxgen-distroless@sha256:a0ea880d18e0ff56cd188a10291f3eb6c8425d62bb1c4eaa49a65c3969122065 --owner geminishkv
Для проверки нужен cosign 3.x; gh attestation verify требует выполненного gh auth login. Образ в Docker Hub подписан так же: в cosign verify меняется только адрес образа.
SBOM образа в формате SPDX и provenance mode=max хранятся в реестре аттестациями BuildKit рядом с образом:
docker buildx imagetools inspect docker.io/geminishkvdev/cdxgen-distroless@sha256:a0ea880d18e0ff56cd188a10291f3eb6c8425d62bb1c4eaa49a65c3969122065 --format '{{ json .SBOM }}'
docker buildx imagetools inspect docker.io/geminishkvdev/cdxgen-distroless@sha256:a0ea880d18e0ff56cd188a10291f3eb6c8425d62bb1c4eaa49a65c3969122065 --format '{{ json .Provenance }}'
Те же SBOM файлами, по одному на платформу, приложены к выпуску 12.9.0.
Образ опубликован после того, как пайплайн безопасности прошёл целиком: gitleaks по истории git, hadolint и Trivy по Dockerfile, Trivy по образу с гейтом на CRITICAL и HIGH с доступным исправлением. Сканировалась сборка linux/amd64 из того же Dockerfile и тех же закреплённых входов; опубликованные образы собраны заново.
Apache-2.0, сторонние компоненты перечислены в NOTICE. Как сообщить об уязвимости, описано в SECURITY.md.
Content type
Image
Digest
sha256:a0ea880d1…
Size
85.5 MB
Last updated
7 days ago
docker pull geminishkvdev/cdxgen-distroless