<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 3.3 | SBOM 功能介紹

          共 4375字,需瀏覽 9分鐘

           ·

          2024-05-28 13:49

          一、簡介

          Spring Boot 3.3.0 已經(jīng)發(fā)布,它包含了對 SBOM 的支持。SBOM 代表 "軟件材料清單",它描述了構(gòu)建軟件工件所使用的組件。在這篇博客文章的背景下,它指的是您的 Spring Boot 應用程序。這些 SBOM 非常有用,因為它們準確地描述了您的應用程序包含的內(nèi)容。

          有了這些信息,您可以評估安全漏洞是否影響您的應用程序,或者使用自動化安全工具掃描您的應用程序并在發(fā)現(xiàn)安全漏洞時發(fā)出警報。

          目前有多種 SBOM 格式,最廣泛使用的是 CycloneDX、SPDXSyft。Spring Boot 3.3.0原生支持 CycloneDX。支持包括三個支柱:

          • 配置 CycloneDX插件以在構(gòu)建應用程序時生成 SBOM
          • 將生成的 SBOM 文件打包到 uber jar 中
          • 如果啟用,通過執(zhí)行器端點暴露生成的 SBOM

          讓我們看看這在實際操作中是如何工作的:

          首先,在 start.spring.io上生成一個新項目(確保選擇 Spring Boot 3.3.0),并包括以下依賴項:

          • Spring Web
          • Actuator

          現(xiàn)在在您的 IDE 中打開生成的項目,如果您使用的是 Gradle,請在 build.gradle 中添加以下內(nèi)容:

          plugins {
              id 'org.cyclonedx.bom' version '1.8.2'
          }

          這將應用 CycloneDX Gradle 插件到您的構(gòu)建中。Spring Boot 會檢測到這一點并自動配置插件,您不需要再做任何更改。

          如果您使用的是 Maven,請在 pom.xml 中添加以下內(nèi)容:

          <plugins>
            <plugin>
              <groupId>org.cyclonedx</groupId>
              <artifactId>cyclonedx-maven-plugin</artifactId>
            </plugin>
          </plugins>

          這將添加 CycloneDX Maven 插件到您的構(gòu)建中。Spring Boot 通過其父項目自動管理此插件的版本,并且也會自動配置插件。

          現(xiàn)在使用 gradle buildmvn package 構(gòu)建您的 uber jar。在構(gòu)建過程中,Spring Boot 通過 CycloneDX 插件的幫助生成 SBOM 并將其包含在 uber jar 中。如果您查看 uber jar 的內(nèi)容,您會在 META-INF/sbom/application.cdx.json 中找到 SBOM。Spring Boot 還將位置和格式添加到 jar 清單中,以便掃描工具可以找到它:

          Sbom-Location: META-INF/sbom/application.cdx.json
          Sbom-Format: CycloneDX

          現(xiàn)在,如果您可以要求運行中的應用程序提供 SBOM,以便您確切知道服務器上運行的是什么,那不是很好嗎?

          二、通過執(zhí)行器永久鏈接暴露 SBOM

          為此,我們需要暴露 SBOM 執(zhí)行器端點,默認情況下它不是暴露的。不過這相當容易。將以下內(nèi)容添加到您的應用程序配置文件中:

          management.endpoints.web.exposure.include=health,sbom

          現(xiàn)在重新構(gòu)建應用程序,并從 jar 文件運行它。啟動完成后,您可以查詢 SBOM 執(zhí)行器端點:

          curl http://localhost:8080/actuator/sbom

          HTTP/1.1 200
          Content-Type: application/vnd.spring-boot.actuator.v3+json

          {
          "ids": ["application"]
          }

          這將返回一些包含所有 SBOM ID 的 JSON。可以有多個 SBOM:一個描述您的應用程序,一個描述您的 JVM,一個描述您的操作系統(tǒng)等。默認情況下,只有一個名為 application 的 SBOM,描述您的 Spring Boot 應用程序。

          看看 application SBOM:

          curl -i http://localhost: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,
            ...

          這將返回一個描述您應用程序內(nèi)容的大型 JSON 文檔。它包含有關應用程序所有依賴項的信息,包括它們的哈希和許可證,網(wǎng)站和問題跟蹤器 URL 等。它還包含有關您的應用程序的數(shù)據(jù),例如版本號,SBOM 生成的時間等。有了這些信息,您將確切知道服務器上運行的是什么。

          這涵蓋了 SBOM 支持的基本使用。現(xiàn)在讓我們看看更高級的功能。

          三、應用程序 SBOM 采用不同的格式

          如果您不想為您的應用程序使用 CycloneDX SBOM,而更傾向于使用不同的格式,您也可以這樣做。但是,您必須自己配置創(chuàng)建 SBOM 的插件。在撰寫本文時,Spring Boot 只自動配置 CycloneDX 插件。

          在您配置了構(gòu)建以創(chuàng)建 SBOM 之后,您可以使用 management.endpoint.sbom.application.location 屬性指向 Spring Boot 的這個 SBOM。如果引用的 SBOM 是 CycloneDX、SPDX 或 Syft 格式,Spring Boot 將自動檢測其類型,這將用于執(zhí)行器響應的 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 中。

          四、包括額外的 SBOMs

          Spring Boot 支持每個應用程序有多個 SBOM。如果您想包括額外的 SBOM,您可以使用 management.endpoint.sbom.additional 下的配置屬性。例如,添加一個名為 jvm 的 SBOM 如下所示:

          management.endpoint.sbom.additional.jvm.location=file:/path/to/sbom.json

          這個 jvm SBOM 存儲在文件系統(tǒng)中的 /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 http://localhost:8080/actuator/sbom

          HTTP/1.1 200
          Content-Type: application/vnd.spring-boot.actuator.v3+json

          {
          "ids": ["application","jvm"]
          }

          現(xiàn)在端點返回兩個 SBOM:applicationjvm。您可以使用此 curl 命令訪問 jvm SBOM:

          curl -i http://localhost:8080/actuator/sbom/jvm

          HTTP/1.1 200
          Content-Type: application/spdx+json
          Content-Length: 48739

          <content of the jvm SBOM>

          您可以包括任意多的 SBOM,它們都將在執(zhí)行器端點上暴露。

          五、可選的 SBOMs

          請注意,從配置中引用的 SBOM 文件或資源必須存在,否則啟動將失敗。您可以通過在 SBOM 位置前綴 optional: 來防止啟動失敗 - 如果文件不存在,Spring Boot 將僅忽略它。

          六、總結(jié)

          我們希望您喜歡這個功能,并希望它能幫助您保護您的軟件供應鏈。


          瀏覽 662
          1點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          1點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99re成人精品视频免费看 | 成人免费A片 | 一区二区三区四区五区在线 | 人妻无码一区二区三区 | 日韩Aⅴ高清 |