準備使用軟體套件目錄 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

準備使用軟體套件目錄

下一節提供套件版本生命週期的概觀,以及使用 AWS IoT Device Management Software Package Catalog 的資訊。

套件版本生命週期

套件版本可以經歷下列生命週期狀態:draftpublished、和 deprecated。也可以為 deleted

包含「草稿」、「已發佈」和「已棄用」的套件版本生命週期。也可以為「已刪除」。
  • 草稿

    當您建立套件版本時,它處於 draft 狀態。此狀態表示軟體套件正在準備或不完整。

    當套件版本處於此狀態時,您無法部署它。您可以編輯套件版本的描述、屬性和標籤。

    您可以使用主控台,或發行 publishedDeletePackageVersionAPI操作,deleteddraft狀態為 的套件版本轉換為 UpdatePackageVersion或 。

  • 已發佈

    當套件版本準備好部署時,請將套件版本轉換為 published 狀態。處於此狀態時,您可以選擇透過在主控台中編輯軟體套件或透過 UpdatePackageAPI操作,將套件版本識別為預設版本。在此狀態下,您只能編輯描述和標籤。

    您可以使用主控台,或發出 deprecatedDeletePackageVersionAPI操作,deleted將處於 published 狀態的套件版本轉換為 UpdatePackageVersion或 。

  • 已棄用

    若有新的套件版本可用,您可以將較早的套件版本轉換為 deprecated。您仍然可以使用已棄用套件版本部署任務。您也可以將已棄用套件版本命名為預設版本,並僅編輯描述和標籤。

    考慮在版本過期deprecated時將套件版本轉換為 ,但欄位中仍有使用舊版的裝置,或由於執行時間相依性而需要維護。

    您可以使用主控台,或發出 publishedDeletePackageVersion API 操作,deleted將處於 deprecated 狀態的套件版本轉換為 UpdatePackageVersion或 。

  • Deleted (已刪除)

    當您不再打算使用套件版本時,您可以使用主控台或發出DeletePackageVersionAPI操作來刪除該版本。

    注意

    若您在有待處理任務參照套件版本時刪除該套件版本,當任務成功完成並嘗試更新預留已命名影子時,您會收到錯誤訊息。

    若您要刪除的軟體套件版本已指定為預設套件版本,您必須先更新該套件,將其他版本指定為預設版本,或將該欄位保留為未指定狀態。您可以使用 主控台或 UpdatePackageVersionAPI操作來執行此操作。(若要移除任何已命名的套件版本作為預設版本,請在發出UpdatePackageAPI操作時將 unsetDefaultVersion 參數設定為 true)。

    若您透過主控台刪除軟體套件,則會刪除與該套件相關聯的所有套件版本,除非某個套件版本已指定為預設版本。

套件版本命名慣例

命名套件版本時,請務必規劃並套用邏輯命名策略,以便您和其他人員皆可輕易識別最新的套件版本和版本進度。建立套件版本時,您必須提供版本名稱,但策略和格式主要取決於您的商業案例。

最佳實務是,建議使用語意版本控制SemVer格式。例如,1.2.3,其中 1 是功能上不相容變更的主要版本,2 是功能上相容變更的主要版本,3 是修補程式版本 (用於錯誤修正)。如需詳細資訊,請參閱語意版本控制 2.0.0。如需套件版本名稱需求的詳細資訊,請參閱 參考指南versionName中的 AWS IoT API。

預設版本

您不一定要將版本設定為預設版本。您可以新增或移除預設套件版本。您也可以部署未指定為預設版本的套件版本。

套件版本在建立時會處於 draft 狀態,在您將套件版本轉換為「已發佈」之前,無法將其指定為預設版本。軟體套件目錄不會自動選取某個版本作為預設版本,也不會自動將較新的套件版本更新為預設版本。您必須透過主控台或發出 UpdatePackageVersionAPI操作,刻意為您選擇的套件版本命名。

版本屬性

版本屬性及其值皆包含套件版本的重要資訊。建議您定義套件或套件版本的一般用途屬性。例如,您可以為平台、架構、作業系統、發行日期、作者或 Amazon S3 建立名稱值對URL。

當您使用 AWS IoT 任務文件建立任務時,您也可以選擇使用參考屬性值的替代變數 ($parameter)。如需詳細資訊,請參閱準備 AWS IoT 任務

套件版本中使用的版本屬性不會自動新增至保留的具名影子,也無法直接透過機群索引進行索引或查詢。若要透過機群索引編製索引或查詢套件版本屬性,您可以在保留的命名影子中填入版本屬性。

我們建議保留具名影子擷取裝置報告屬性 中的版本屬性參數,例如操作系統和安裝時間。它們也可以透過機群索引進行索引和查詢。

遵循特定命名慣例不需要版本屬性。您可以建立名稱/值配對,以滿足您的商業需求。套件版本上所有屬性的整體大小限制為 3 KB。如需詳細資訊,請參閱 軟體套件目錄軟體套件和套件版本限制

使用任務文件中的所有屬性

您可以讓所有套件版本屬性自動新增至所選裝置的任務部署。若要在 API或 CLI命令中以程式設計方式自動使用所有套件版本屬性,請參閱下列任務文件範例:

"TestPackage": "${aws:iot:package:TestPackage:version:PackageVersion:attributes}"

軟體物料清單

軟體物料清單 (SBOM) 提供軟體套件所有層面的中央儲存庫。除了儲存軟體套件和套件版本之外,您還可以將與每個套件版本相關聯的軟體物料清單 (SBOM) 存放在 AWS IoT Device Management 軟體套件目錄。軟體套件包含一或多個套件版本,每個套件版本包含一或多個元件。支援特定套件版本的每個元件都可以使用軟體材料清單來描述和編製目錄。支援的 軟體材料清單的業界標準為 SPDX和 CycloneDX 。第一次建立 SBOM 時,它會針對 SPDX和 CycloneDX 產業標準格式進行驗證。如需 的詳細資訊SPDX,請參閱 System Package Data Exchange 。如需 CycloneDX 的詳細資訊,請參閱 CycloneDX

軟體材料清單說明特定套件版本元件的所有層面,例如套件資訊、檔案資訊和其他相關中繼資料。請參閱下列SPDX格式的軟體材料清單文件結構範例:

SBOM SPDX 格式 的範例。

軟體物料清單利益

在 Software Package Catalog 中為套件版本新增軟體物料清單的主要優點之一是漏洞管理。

漏洞管理

評估和減輕軟體元件中明顯安全風險的漏洞,對於保護裝置機群的完整性而言仍然至關重要。在每個套件版本中新增儲存在軟體套件目錄中的軟體材料清單後,您可以根據裝置套件版本和SBOM使用自己的內部漏洞管理解決方案,了解哪些裝置處於風險中,主動暴露安全漏洞。您可以將修正部署到受影響的裝置,並保護您的裝置機群。

軟體物料清單儲存

每個軟體套件版本的軟體物料清單 (SBOM) 會使用 Amazon S3 版本控制功能存放在 Amazon S3 儲存貯體中。存放 的 Amazon S3 儲存貯體SBOM必須位於建立套件版本的相同區域中。使用版本控制功能的 Amazon S3 儲存貯體會維護相同儲存貯體中物件的多個變體。如需在 Amazon S3 儲存貯體中使用版本控制的詳細資訊,請參閱在 Amazon S3 儲存貯體中使用版本控制。

注意

每個軟體套件版本只有一個儲存為 zip 封存SBOM檔案的檔案。

儲存貯體的特定 Amazon S3 金鑰和版本 ID 用於唯一識別套件版本的每個版本軟體材料清單。

注意

對於具有單一SBOM檔案的套件版本,您可以將該SBOM檔案存放在 Amazon S3 儲存貯體中作為 zip 封存檔案。

對於具有多個SBOM檔案的套件版本,您必須將所有SBOM檔案放置在單一 zip 封存檔案中,然後將該 zip 封存檔案存放在您的 Amazon S3 儲存貯體中。

在這兩種情況下,存放在單一 zip 封存檔案中的所有SBOM檔案都會格式化為 SPDX或 CycloneDX .json 檔案。

許可政策

若要 AWS IoT 擔任指定的主體來存取存放在 Amazon S3 儲存貯體中的 SBOM zip 封存檔案,您需要資源型許可政策。如需正確的資源型許可政策,請參閱下列範例:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "iot.amazonaws.com" ] }, "Action": "s3:*", "Resource": "arn:aws:s3:::bucketName/*" } ] }

如需資源型許可政策的詳細資訊,請參閱 AWS IoT 資源型政策

更新 SBOM

您可以視需要更新軟體物料清單,以保護和增強裝置機群。每次在 Amazon S3 儲存貯體中更新軟體物料清單時,版本 ID 都會變更,軟體套件目錄會收到更新通知,而且您必須將新的 Amazon S3 儲存貯體URL與適當的套件版本建立關聯。您會在 中的套件版本頁面上的 Amazon S3 物件版本 ID 欄中看到新的版本 ID AWS Management Console。此外,您可以使用 API操作GetPackageVersion或 CLI命令get-package-version來檢視新的版本 ID。

注意

更新會導致新版本 ID 的軟體物料清單不會導致建立新的套件版本。

如需 Amazon S3 物件金鑰的詳細資訊,請參閱建立物件金鑰名稱。

啟用 AWS IoT 機群索引

若要使用 Software Package Catalog 利用 AWS IoT 機群索引,請將保留的命名影子 ($package) 設定為您要為其編製索引的每個裝置的資料來源,並收集指標。如需保留具名影子的詳細資訊,請參閱 預留已命名影子

機群索引提供支援,讓 AWS IoT 物件能夠依軟體套件版本篩選,透過動態物件群組進行分組。例如,機群索引可以識別已安裝或未安裝特定套件版本、未安裝任何套件版本或符合特定名稱/值配對的物件。最後,機群索引提供標準和自訂指標,您可以用來深入了解裝置機群的狀態。如需詳細資訊,請參閱準備機群索引

注意

啟用軟體套件目錄的機群索引會產生標準服務費用。如需詳細資訊,請參閱 AWS IoT Device Management定價

預留已命名影子

預留已命名影子 $package 會反映安裝於裝置的軟體套件和套件版本狀態。機群索引使用預留已命名影子做為資料來源,以建立標準和自訂指標,讓您可以查詢機群狀態。如需詳細資訊,請參閱準備機群索引

預留已命名影子類似已命名影子,但其名稱為預先定義,無法變更。此外,預留已命名影子不會隨中繼資料更新,且只會使用 versionattributes 關鍵字。

包含其他關鍵字的更新請求,例如 description,會在rejected主題下收到錯誤回應。如需詳細資訊,請參閱裝置影子錯誤訊息

當您透過主控台建立 AWS IoT 物件、 AWS IoT 任務成功完成並更新影子,以及發出UpdateThingShadowAPI操作時,都可以建立它。如需詳細資訊,請參閱 AWS IoT Core 開發人員指南UpdateThingShadow中的 。

注意

索引預留已命名影子不會計入機群索引可以索引的已命名影子數量。如需詳細資訊,請參閱 AWS IoT Device Management 機群索引限制和配額。此外,如果您選擇讓 AWS IoT 任務在任務成功完成時更新保留的具名影子,則API呼叫會計入您的 Device Shadow 和登錄檔操作,並可能產生費用。如需詳細資訊,請參閱AWS IoT Device Management 任務限制和配額以及IndexingFilterAPI資料類型。

$package 影子的結構

預留已命名影子包含以下內容:

{ "state": { "reported": { "<packageName>": { "version": "", "attributes": { } } } }, "version" : 1 "timestamp" : 1672531201 }

影子屬性會更新為下列資訊:

  • <packageName>:已安裝軟體套件的名稱,該套件會更新為 packageName 參數。

  • version:已安裝套件版本的名稱,該版本會更新為 versionName 參數。

  • attributes:由裝置儲存並依機群索引編製索引的選用中繼資料。這可讓客戶根據儲存的資料查詢其索引。

  • version:影子的版本號碼。每次影子更新並開始於 1 時,皆會自動遞增。

  • timestamp:顯示上次影子更新時間並以 Unix 時間記錄。

如需詳細了解已命名影子的格式和行為,請參閱 AWS IoT Device Shadow 服務 訊息順序

刪除軟體套件及其套件版本

刪除軟體套件之前,請執行下列動作:

  • 確認套件及其版本並未主動部署。

  • 先刪除所有相關版本。若其中一個版本為預設版本,您必須從套件中移除具名預設版本。因為您不一定要指定預設版本,移除預設版本並不會造成衝突。若要從軟體套件中移除預設版本,請透過主控台編輯套件或使用 UpdatePackageVersionAPI操作。

只要沒有具名預設套件版本,您便可以使用主控台刪除軟體套件,且其所有套件版本也將一併刪除。如果您使用API呼叫來刪除軟體套件,您必須先刪除套件版本,然後再刪除軟體套件。