Generate and steer: the two levels
This is the most expensive misunderstanding in the field, and the page that conditions everything else. Many organisations buy a platform without reliable generation, or generate thousands of SBOMs that nobody aggregates.
The diagram
┌─────────────────────────────────────────────────────────────────┐
│ LEVEL 1 — APPLICATION / TEAM « GENERATE » │
│ │
│ Where? In the CI/CD chain, at every build │
│ Who? The development team, DevSecOps │
│ What? Produce a faithful inventory of THIS artefact │
│ Tools Syft · Trivy · Grype · cdxgen · osv-scanner · │
│ native Maven, Gradle, npm, .NET, Cargo plugins │
│ Output A signed CycloneDX or SPDX file, tied to the artefact │
│ Grain 1 SBOM = 1 artefact = 1 build │
│ Time Instant, frozen, immutable │
└──────────────────────────────┬──────────────────────────────────┘
│ automated ingestion (API)
▼
┌─────────────────────────────────────────────────────────────────┐
│ LEVEL 2 — ORGANISATION / PORTFOLIO « STEER » │
│ │
│ Where? In a central platform, continuously │
│ Who? CISO, PSIRT, Compliance, Product management │
│ What? Aggregate, retain, correlate daily, decide │
│ Tools OWASP Dependency-Track · Snyk · FOSSA · │
│ Black Duck · Mend · Sonatype · JFrog Xray │
│ Output Portfolio view, targeted alerts, VEX, reports, │
│ items for the technical file and for authorities │
│ Grain N products × M versions × K components │
│ Time Continuous, historised, re-evaluated daily │
└─────────────────────────────────────────────────────────────────┘
The six differences
| Application level — generate | Organisation level — steer | |
|---|---|---|
| Question asked | “What is inside this artefact?” | “Which of your products contain this component?” |
| Trigger | A build | A newly published vulnerability |
| Owner | Product team | PSIRT, CISO, Compliance |
| Frequency | Every publishable build | Daily re-evaluation of the estate |
| Output | A file | A dashboard, alerts, reports, an API |
| Without it | No data: nothing is possible | Thousands of unusable files |
What each level demonstrates under the CRA
| Requirement | Level that covers it |
|---|---|
| Annex I, Part II, point 1 — component inventory | Generation |
| Annex VII — SBOM in the technical documentation | Generation (+ archiving) |
| Annex I, Part II, point 2 — address vulnerabilities without delay | Steering |
| Annex I, Part II, point 3 — regular tests and reviews | Both |
| Annex I, Part II, point 4 — publish advisories | Steering |
| Art. 14 — report within 24 h knowing the affected scope | Steering |
| Answering an authority request about an old version | Steering (+ archiving) |
The CRA requires both. Point 1 mandates the inventory; points 2, 3, 4 and 7 mandate a continuous process, which a file sitting next to an artefact cannot demonstrate.
The classic mistake, named
“You put a scanner in CI, you are compliant.”
No. A scanner in CI tells you what is wrong now, here, in this build. It does not tell you:
- which versions already shipped to customers contain the vulnerable component;
- what has become vulnerable since the last build, without any code changing;
- what affected scope to declare in a 24-hour early warning;
- what version 4.2.1 shipped in 2028 contained, when an authority asks in 2033.
The mirror mistake also exists: buying a platform without reliable generation. The platform then displays misleading coverage, fed by partial SBOMs produced by hand.
The message by audience
For Legal. Level 1 produces the item in the technical documentation. Level 2 produces the evidence of the continuous process. Without the first, the file is incomplete; without the second, you can neither answer an authority nor meet a 24-hour deadline.
For Cyber. Do not confuse the scanner with the platform. These are not two competing products: they are a chain, and the missing link is almost always the second.
For leadership. Two budget lines, two owners, two timelines. Level 1 is deployed team by team, gradually. Level 2 is a cross-cutting platform that must exist before SBOMs pile up with nowhere to go.
Deployment order
- Choose the pivot format and pin the toolchain per product family.
- Deploy the steering platform, even minimally, before generalising generation.
- Generalise generation, publishing systematically to the platform.
- Turn on continuous monitoring once coverage is meaningful.
- Add blocking policies, in warning mode first, then blocking.
Deploying in that order avoids the most common situation: teams that have diligently generated SBOMs for eighteen months, while nobody can answer the question that matters.