領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多Spring Boot 3.3.0 已釋出,其中包含對 SBOM 的支援。SBOM 代表“軟體物料清單”(Software Bill of Materials),描述了用於構建軟體工件的元件。在本博文的上下文中,那就是您的 Spring Boot 應用程式。這些 SBOM 非常有用,因為它們精確地描述了您的應用程式包含的內容。有了這些資訊,您就可以評估安全漏洞是否會影響您的應用程式,或者使用自動安全工具掃描您的應用程式並提醒您安全漏洞。
市面上存在多種 SBOM 格式,最廣泛使用的是 CycloneDX、SPDX 和 Syft。Spring Boot 3.3.0 開箱即用地支援 CycloneDX。支援包括三個支柱:
讓我們來看看它是如何工作的
首先,在 start.spring.io 上生成一個新專案(確保選擇 Spring Boot 3.3.0),幷包含以下依賴項:
現在,在您的 IDE 中開啟生成的專案,如果您使用的是 Gradle,請將以下內容新增到您的 build.gradle 檔案中:
plugins {
id 'org.cyclonedx.bom' version '1.8.2'
}
這會將 CycloneDX Gradle 外掛應用於您的構建。Spring Boot 會檢測到這一點,並負責外掛的配置,您無需進行任何進一步的更改。
如果您使用的是 Maven,請將以下內容新增到您的 pom.xml 檔案中:
<plugins>
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
</plugin>
</plugins>
這會將 CycloneDX Maven 外掛新增到您的構建中。Spring Boot 透過其父專案自動管理此外掛的版本,並負責配置外掛。
現在使用 gradle build 或 mvn package 命令構建您的 uber jar。在構建過程中,Spring Boot 會藉助 CycloneDX 外掛生成一個 SBOM,並將其包含在 uber jar 中。如果您檢視 uber jar 的內容,會發現在 META-INF/sbom/application.cdx.json 檔案中包含了 SBOM。Spring Boot 還會在 jar 清單中新增 SBOM 的位置和格式,以便掃描工具能夠找到它。
Sbom-Location: META-INF/sbom/application.cdx.json
Sbom-Format: CycloneDX
現在,如果您能讓正在執行的應用程式告訴您 SBOM,以便您確切地知道伺服器上執行的是什麼,那不是很棒嗎?
為此,我們需要公開 SBOM 執行器端點,該端點預設情況下未公開。不過,這很容易。在您的應用程式配置檔案中新增以下內容:
management.endpoints.web.exposure.include=health,sbom
現在重新構建應用程式並從 jar 檔案執行它。啟動完成後,您可以查詢 SBOM 執行器端點:
curl https://:8080/actuator/sbom
HTTP/1.1 200
Content-Type: application/vnd.spring-boot.actuator.v3+json
{"ids":["application"]}
這將返回一些 JSON,其中包含所有 SBOM 的 ID。可能存在多個 SBOM:一個描述您的應用程式,一個描述您的 JVM,一個描述您的作業系統,等等。預設情況下,只有一個名為 application 的 SBOM,描述您的 Spring Boot 應用程式。
讓我們看看 application SBOM:
curl -i https://:8080/actuator/sbom/application
HTTP/1.1 200
Content-Type: application/vnd.cyclonedx+json
Content-Length: 161738
{
"bomFormat" : "CycloneDX",
"specVersion" : "1.5",
"serialNumber" : "urn:uuid:3842be09-b12e-45ed-8038-babb72a53750",
"version" : 1,
...
這將返回一個大型 JSON 文件,描述您的應用程式的內容。它包含有關應用程式所有依賴項(包括其雜湊和許可證、網站和問題跟蹤器 URL 等)的資訊。它還包含有關您的應用程式的資料,例如版本號、SBOM 生成時間等。有了這些資訊,您就能確切地知道伺服器上執行的是什麼。這涵蓋了 SBOM 支援的基本用法。接下來,讓我們看看更高階的功能。
如果您不想為應用程式使用 CycloneDX SBOM,而是傾向於使用其他格式,您也可以這樣做。但是,您需要自己配置建立 SBOM 的外掛。在撰寫本文時,Spring Boot 只會自動配置 CycloneDX 外掛。
在配置好構建以建立 SBOM 後,您可以使用 management.endpoint.sbom.application.location 屬性將此 SBOM 指向 Spring Boot。如果引用的 SBOM 是 CycloneDX、SPDX 或 Syft 格式,Spring Boot 將自動檢測其型別,該型別將用於執行器響應的 Content-Type 標頭。如果您使用的是其他格式,則可以使用 management.endpoint.sbom.application.media-type 屬性明確指定 SBOM 的媒體型別。此示例顯示瞭如何使用 SPDX 格式的 SBOM:
management.endpoint.sbom.application.location=classpath:/sbom/application.spdx.json
要使其正常工作,SPDX SBOM 必須儲存在 src/main/resources/sbom/application.spdx.json 中。
Spring Boot 支援應用程式的多個 SBOM。如果您想包含其他 SBOM,可以使用 management.endpoint.sbom.additional 下的配置屬性。例如,新增一個名為 jvm 的 SBOM,操作如下:
management.endpoint.sbom.additional.jvm.location=file:/path/to/sbom.json
這個 jvm SBOM 儲存在檔案系統中,路徑為 /path/to/sbom.json。您需要自己生成此 SBOM,或者由您的 JVM 供應商提供。
與應用程式 SBOM 一樣,如果引用的 SBOM 是 CycloneDX、SPDX 或 Syft 格式,Spring Boot 將自動檢測其型別。否則,您可以使用以下屬性自行設定媒體型別:
management.endpoint.sbom.additional.jvm.media-type=application/json
使用此配置啟動應用程式後,您可以再次執行以下 curl 命令:
curl -i https://:8080/actuator/sbom
HTTP/1.1 200
Content-Type: application/vnd.spring-boot.actuator.v3+json
{"ids":["application","jvm"]}
現在,端點返回兩個 SBOM:application 和 jvm。您可以使用以下 curl 命令訪問 jvm SBOM:
curl -i https://:8080/actuator/sbom/jvm
HTTP/1.1 200
Content-Type: application/spdx+json
Content-Length: 48739
<content of the jvm SBOM>
您可以包含任意數量的 SBOM,它們都將透過執行器端點公開。
請注意,配置中引用的 SBOM 檔案或資源必須存在,否則啟動會失敗。您可以在 SBOM 位置前加上 optional: 字首,以防止啟動失敗——如果檔案不存在,Spring Boot 將會忽略它。
我們希望您喜歡這個功能,並且它能幫助您保護您的軟體供應鏈。
請告訴我們您對這個新功能的看法,並且一如既往,如果您發現任何問題,請隨時 訪問我們的問題跟蹤器。