保持領先
VMware 提供培訓和認證,助您快速提升。
瞭解更多Spring Boot 3.3.0 已經發布,其中包含對 SBOM 的支援。SBOM 代表“軟體物料清單”(Software Bill of Materials),它描述了用於構建軟體製品(artifact)的元件。在本部落格文章中,製品即指您的 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,並將 SBOM 包含在 uber jar 中。如果您檢視 uber jar 的內容,您會在 META-INF/sbom/application.cdx.json
中找到 SBOM。Spring Boot 還會將 SBOM 的位置和格式新增到 jar 的清單中,以便掃描工具能夠找到它
Sbom-Location: META-INF/sbom/application.cdx.json
Sbom-Format: CycloneDX
現在,如果您能夠向正在執行的應用索取 SBOM,以便準確瞭解伺服器上執行的內容,那豈不是很方便嗎?
為此,我們需要暴露 SBOM actuator 端點,該端點預設不暴露。不過,這很容易實現。將以下內容新增到您的應用配置檔案中
management.endpoints.web.exposure.include=health,sbom
現在重新構建應用並從 jar 檔案執行它。啟動完成後,您可以查詢 SBOM actuator 端點
curl https://:8080/actuator/sbom
HTTP/1.1 200
Content-Type: application/vnd.spring-boot.actuator.v3+json
{"ids":["application"]}
這將返回包含所有 SBOM ID 的 JSON。可以有多個 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
屬性將 Spring Boot 指向此 SBOM。如果引用的 SBOM 是 CycloneDX、SPDX 或 Syft 格式,Spring Boot 將自動檢測其型別,該型別將用於 actuator 響應的 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,它們都將透過 actuator 端點暴露。
請注意,配置中引用的 SBOM 檔案或資源必須存在,否則啟動會失敗。您可以在 SBOM 位置前加上 optional:
字首以防止啟動失敗 - 如果檔案不存在,Spring Boot 將直接忽略它。
我們希望您喜歡這個功能,並且它能幫助您保障軟體供應鏈的安全。
請告訴我們您對這個新功能的看法,一如既往,如果您發現任何問題,請隨時 訪問我們的問題跟蹤器。