領先一步
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,並將 SBOM 包含在 uber jar 中。如果您查看 uber jar 的內容,您會在 META-INF/sbom/application.cdx.json
中找到 SBOM。Spring Boot 也會將位置和格式新增至 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://127.0.0.1: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://127.0.0.1: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://127.0.0.1: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://127.0.0.1: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 將會忽略它。
我們希望您喜歡這項功能,並且它能幫助您保護您的軟體供應鏈。
如果您對這項新功能有任何想法,請告訴我們。與往常一樣,如果您發現任何問題,請隨時造訪我們的問題追蹤系統。