Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Export SBOM contained in native-image #40630

Closed
mhalbritter opened this issue May 7, 2024 · 10 comments
Closed

Export SBOM contained in native-image #40630

mhalbritter opened this issue May 7, 2024 · 10 comments
Assignees
Labels
type: enhancement A general enhancement
Milestone

Comments

@mhalbritter
Copy link
Contributor

GraalVM's native-image has a feature where it can create a SBOM on native image build time and embed it. You can then use the native-image-inspect to extract the SBOM from the native image.

The GraalVM team would be open to expose an API in the graal-sdk to get the SBOM directly without the need of the native-image-inspect. We could add support for that in our actuator SBOM endpoint.

@mhalbritter mhalbritter added the type: enhancement A general enhancement label May 7, 2024
@mhalbritter mhalbritter added this to the 3.x milestone May 7, 2024
@mhalbritter mhalbritter added status: blocked An issue that's blocked on an external project change for: team-meeting An issue we'd like to discuss as a team to make progress labels May 7, 2024
@philwebb philwebb removed the for: team-meeting An issue we'd like to discuss as a team to make progress label May 8, 2024
@mhalbritter
Copy link
Contributor Author

@fniephaus Would it be possible to expose the embedded SBOM via a standard Java mechanism, e.g. a readable resource on the classpath or some custom URL scheme? Then we wouldn't need to add the dependency on the GraalVM SDK and it would work right now with Boot 3.3.0-RC1.

@fniephaus
Copy link

@mhalbritter I think that's technically feasible. Can you give an example or two how SBOMs are otherwise accessible via classpath/modulepath or a custom URL scheme?

@mhalbritter
Copy link
Contributor Author

mhalbritter commented May 8, 2024

Sure. Take a look at this documentation here. If the SBOM would be on the classpath, you could just use classpath:sbom.json in the config to read it from /sbom.json.

@mhalbritter mhalbritter removed the status: blocked An issue that's blocked on an external project change label Jun 27, 2024
@mhalbritter
Copy link
Contributor Author

Native images now expose their SBOM under META-INF/native-image/sbom.json. We should take a look if it makes sense to automatically discover them.

@fniephaus
Copy link

The new SBOM on classpath feature is available in EA build 19 of Oracle GraalVM:

sdk install java 23.ea.19-graal

If you add --enable-sbom=classpath to the build arguments, the native image should contain a SBOM based on the static analysis under META-INF/native-image/sbom.json. Feel free to give this a go and let us know if there's any problem :)

@mhalbritter
Copy link
Contributor Author

mhalbritter commented Aug 5, 2024

Until Spring Boot adds built-in support, here are the steps to get that working with the current Spring Boot version:

  1. Add the flag
graalvmNative {
    binaries {
        main {
            buildArgs.add("--enable-sbom=classpath")
        }
    }
}
  1. Make the SBOM known to Spring Boot:
management.endpoint.sbom.additional.native-image.location=optional:classpath:META-INF/native-image/sbom.json

Then a curl http://localhost:8080/actuator/sbom/native-image returns the SBOM.

@mhalbritter
Copy link
Contributor Author

GraalVM 23 has been released and it contains the SBOM feature.

@mhalbritter mhalbritter self-assigned this Oct 15, 2024
@mhalbritter mhalbritter modified the milestones: 3.x, 3.4.0-RC1 Oct 15, 2024
@mhalbritter
Copy link
Contributor Author

With this implemented, all you need to do is

graalvmNative {
    binaries {
        main {
            buildArgs.add("--enable-sbom=classpath")
        }
    }
}

and Spring Boot will expose the SBOM with the native-image id.

@wilkinsona
Copy link
Member

I wonder if we should configure this by default as a reaction to the native image plugin being applied. WDYT, @mhalbritter?

@mhalbritter
Copy link
Contributor Author

mhalbritter commented Oct 16, 2024

We have to see if we can find out the GraalVM version used, as --enable-sbom=classpath only works with Graal 23 and above. I'll investigate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: enhancement A general enhancement
Projects
None yet
Development

No branches or pull requests

4 participants