Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
Архитектурный кейс: генератор фактов и сервис вердиктов
Идея
В большом проекте полезно разделять две системы ответственности:
- генератор фактов (enrichment-утилита) формирует максимально полный CycloneDX
bom.jsonиз исходного SBOM, анализа ELF (ldd/readelf/LIEF), apt/Conan metadata и build evidence; - сервис аудита/вердиктов принимает артефакты, хранит immutable uploads, показывает лицензии, уязвимости, мост BDU/VDR, роли, отчёты и readiness.
Почему это правильно
Генератор фактов не должен решать, безопасна ли лицензия или допустима ли уязвимость: он отвечает за полноту и качество фактов о составе C/C++-поставки. Сервис аудита/вердиктов не должен угадывать C/C++-зависимости из воздуха: он отвечает за процесс, вердикты, исключения, evidence и готовность поставки. Разделение делает оба контура заменяемыми и проверяемыми по отдельности.
Контракт между контурами Связкой служит единый machine-readable артефакт (CycloneDX
bom.json): генератор фактов его производит, сервис вердиктов потребляет. Контракт — это схема и набор минимальных элементов, а не общий код или общая БД.
Как разделяется ответственность
| Аспект | Генератор фактов | Сервис аудита/вердиктов |
|---|---|---|
| Вопрос | «что входит в поставку?» | «можно ли это принять?» |
| Вход | SBOM, ELF, apt/Conan metadata, build logs | bom.json + политики |
| Выход | обогащённый CycloneDX | вердикт, исключения, отчёт readiness |
| Критерий качества | полнота и доказанность фактов | прослеживаемость решения |
| Чего НЕ делает | не выносит вердиктов | не доопределяет состав «из воздуха» |
Где проходит граница
Антипаттерн: смешение контуров Если генератор начинает «прятать» неудобные компоненты или сам решать, что уязвимость не важна, факты перестают быть фактами. Если сервис вердиктов дописывает недостающие компоненты вручную — теряется воспроизводимость SBOM. Граница между фактом и решением должна совпадать с границей между системами.
Спорные и недоказанные записи генератор отдаёт с пониженным confidence и в worklist доразметки — но не удаляет; решение об их судьбе принимает контур вердиктов по политике.
Учебный вывод
Это хороший пример defense-in-depth в DevSecOps: факты, политики, решения и отчёты разделены, но связаны через единый machine-readable artifact. Та же логика разводит ролевую модель «факт vs решение», что и пара VDR/VEX, и позволяет менять инструмент генерации, не трогая процесс приёмки.
Связь
- Модуль: М11. Корпоративный кейс: генератор фактов и сервис вердиктов.
- Практики: П09. VDR и VEX различие факта и решения, П08. Dependency-Track как портфель SBOM, П29. Readiness dashboard.
- Нормативка: CycloneDX ECMA-424, ГОСТ Р 56939-2024.
- Смежные заметки: honest SBOM, SBOM evidence occurrences, detection accuracy, поставка от соисполнителя.