Implement SBOM actuator endpoint #39799
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This adds an endpoint which exposes SBOMs.
/actuator/sbom
returns a list of all available SBOMs:/actuator/sbom/{id}
returns the content of a specific SBOM:It configures the
cyclonedx-maven-plugin
and thecyclonedx-gradle-plugin
, if included in the project, to create a CycloneDX sbom. This SBOM is then returned in on thesbom/application
actuator endpoint. It also includes the SBOM in the uber JAR, and adds two manifest entries (Sbom-Format
andSbom-Location
) to point to it, so that 3rd party tools can find the SBOM.With configuration properties under
management.endpoint.sbom
, users can override the application SBOM location and override the detected media type (it autodetects CycloneDX JSON, Syft JSON and SPDX JSON). This way, if users want to expose an SBOM in a different format, it works. Those properties also allow users to expose further SBOMS, e.g. with this configuration:additional SBOMs are exported when using the paketo buildpacks.
To activate the support, users have to add the Gradle plugin
or the maven plugin
to their build. We manage the version of the
cyclonedx-maven-plugin
.Don't forget to expose the sbom endpoint with
management.endpoints.web.exposure.include=sbom
!