OWASP Dependency Track
Назначение
Заголовок раздела «Назначение»Dependency Track используется для анализа рисков зависимостей на основе SBOM. В TRAIO этот шаг обычно идёт после генерации SBOM (например, Syft) и позволяет получить унифицированный отчёт по findings в JSON
Requirements
Заголовок раздела «Requirements»- В Sequences до этого шага должен быть выполнен job генерации SBOM (например, Syft), чтобы SBOM-файл был доступен в pipeline volume
- Установленный Dependency Track отдельно
- Сетевая доступность до Depedency Track HTTP/HTTPS
- Адрес Dependency Track
- API Token с правами: BOM_UPLOAD, PORTFOLIO_MANAGEMENT, PROJECT_CREATION_UPLOAD, VIEW_PORTFOLIO, VIEW_VULNERABILITY
Как работает
Заголовок раздела «Как работает»- Job формирует уникальные
projectNameиprojectVersionна каждый запуск (ephemeral-режим) - Загружает SBOM в Dependency Track через endpoint загрузки BOM с
autoCreate=true - Ждёт завершения обработки BOM по
token - Находит UUID созданного проекта по
nameиversion - Экспортирует findings в JSON и сохраняет файл в
/data - Удаляет проект в Dependency-Track (cleanup)
Docker image
Заголовок раздела «Docker image»Для запуска job используется образ:
registry.gitlab.com/traio-group/tools/dependency-track:latest
Переменные окружения
Заголовок раздела «Переменные окружения»| Переменная | Обязательная | Пример | Описание |
|---|---|---|---|
| DT_URL | Да | https://dependency-track.company.kz |
URL инстанса Dependency-Track (без завершающего / или с ним — скрипт нормализует). |
| DT_API_KEY | Да | *** |
API key для доступа к Dependency-Track API. |
| SBOM_PATH | (указывается автоматический) | sbom.json или /data/sbom.json |
Путь к SBOM-файлу, который будет загружен в Dependency-Track. |
| REPORT_FILE_NAME | (указывается автоматический) | dependency-track-findings.json |
Имя выходного отчёта (будет сохранён в /data). |
| SCAN_TYPE | (указывается автоматический) | OWASP Dependency Track |
Тип сканирования для парсинга |
Команда запуска
Заголовок раздела «Команда запуска»Скрипта для job:
echo "[stage 0] init"DT="${DT_URL%/}"HDR="X-Api-Key: ${DT_API_KEY}"OUT="/data/${REPORT_FILE_NAME}"RUN_ID="$(date +%Y%m%d-%H%M%S)"PN="traio-scan-${RUN_ID}"PV="run-${RUN_ID}"echo "[info] projectName=${PN}"echo "[info] projectVersion=${PV}"
# Stage 1 — Upload BOM (SBOM -> Dependency-Track)echo "[stage 1] upload bom"UPLOAD="$(curl -sS -X POST "${DT}/api/v1/bom" \ -H "${HDR}" \ -F "projectName=${PN}" \ -F "projectVersion=${PV}" \ -F "autoCreate=true" \ -F "bom=@${SBOM_PATH}")"TOKEN="$(echo "$UPLOAD" | jq -r '.token')"echo "[info] upload token=${TOKEN}"
# Stage 2 — Wait for BOM processingecho "[stage 2] wait bom processing"i=0while [ $i -lt 18 ]; do PROC="$(curl -sS "${DT}/api/v1/bom/token/${TOKEN}" -H "${HDR}")" echo "[wait] attempt=$((i+1))/18 status=${PROC}" echo "$PROC" | jq -e '(.processing == false) or (.status == "PROCESSED") or (.status == "COMPLETE")' >/dev/null 2>&1 && break i=$((i+1)) sleep 10done
# Stage 3 — Resolve project UUIDecho "[stage 3] lookup project uuid"LOOKUP="$(curl -sS -G "${DT}/api/v1/project/lookup" \ --data-urlencode "name=${PN}" \ --data-urlencode "version=${PV}" \ -H "${HDR}")"UUID="$(echo "$LOOKUP" | jq -r '.uuid')"echo "[info] project uuid=${UUID}"
# Stage 4 — Export findings JSONecho "[stage 4] export findings (FPF)"curl -sS "${DT}/api/v1/finding/project/${UUID}/export" -H "${HDR}" | jq '.' > "${OUT}"
echo "[info] report saved: ${OUT}"ls -lah "${OUT}"
# Stage 5 — Cleanup (delete ephemeral project)echo "[stage 5] cleanup (delete project)"curl -sS -X DELETE "${DT}/api/v1/project/${UUID}" -H "${HDR}" >/dev/null 2>&1 || trueecho "[done] dependency-track job finished"Типовые ошибки и диагностика
Заголовок раздела «Типовые ошибки и диагностика»- 401/403 при запросах к API
- Проверьте
DT_API_KEYи права ключа.
- Проверьте
- TOKEN = null / пустой ответ на upload
- Проверьте
DT_URL, доступность инстанса и корректностьSBOM_PATH.
- Проверьте
- Долгая обработка BOM
- Увеличьте число попыток/таймаут ожидания (сейчас 18×10с = 180с).