硬體安全整合 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長壽命階段。如需詳細資訊,請參閱 AWS IoT Greengrass V1 維護政策 。在此日期之後, AWS IoT Greengrass V1 不會發佈提供功能、增強功能、錯誤修正或安全修補程式的更新。在 上執行的裝置 AWS IoT Greengrass V1 不會中斷,並會繼續運作和連線至雲端。我們強烈建議您遷移至 AWS IoT Greengrass Version 2,這會新增重要的新功能,並支援其他平台

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

硬體安全整合

此功能適用於 AWS IoT Greengrass 核心 v1.7 及更高版本。

AWS IoT Greengrass 支援透過 PKCS#11 介面使用硬體安全模組 (HSM),以安全儲存及卸載私密金鑰。這可防止金鑰公開或在軟體中遭到複製。私密金鑰可以安全地儲存在硬體模組上HSMs,例如信任平台模組 (TPM) 或其他加密元素。

在裝置目錄中搜尋符合此功能的AWS Partner 裝置

下圖顯示 AWS IoT Greengrass 核心的硬體安全性架構。

AWS IoT Greengrass Core architecture with hardware security and message routing to AWS IoT Core and local devices.

在標準安裝上, AWS IoT Greengrass 會使用兩個私密金鑰。當 Greengrass 核心連線時,用 AWS IoT 戶端 (IoT 用戶端) 元件會在傳輸層安全性 (TLS) 握手期間使用一個金鑰。 AWS IoT Core(此金鑰也稱為核心私有金鑰)。另一個密鑰由本地MQTT服務器使用,這使 Greengrass 設備與 Greengrass 核心進行通信。如果想要針對這兩個元件使用硬體安全,您可以使用共用的私有金鑰或個別的私有金鑰。如需詳細資訊,請參閱AWS IoT Greengrass 硬體安全性的佈建作法

注意

在標準安裝上,本機 Secrets Manager 還會對其加密程序使用 IoT 用戶端金鑰,但您可以使用自己的私有金鑰。它必須是最小長度為 2048 位的RSA密鑰。如需詳細資訊,請參閱指定用於秘密加密的私有金鑰

需求

在可以設定 Greengrass 核心的硬體安全之前,您必須具有下列各項:

  • 一種硬體安全性模組 (HSM),支援 IoT 用戶端、本機MQTT伺服器和本機密碼管理員元件的目標私密金鑰組態。組態可以包含一個、兩個或三個以硬體為基礎的私有金鑰,取決於您是否將元件設定為共用金鑰。如需有關私有金鑰支援的詳細資訊,請參閱 AWS IoT Greengrass 核心安全性主體

    • 對於RSA金鑰:RSA-2048 金鑰大小 (或更大) 和 PKCS#1 v1.5 簽章配置。

    • 對於 EC 鍵:一個 NIST P-256 或 NIST P-384 曲線。

  • 可在執行階段 (使用 libdl) 載入的 PKCS #11 提供者程式庫,並提供 PKCS#11 函數。

  • 硬體模組必須可透過插槽標籤解析,如 PKCS #11 規格所定義。

  • 必須使用供應商提供的佈建工具在HSM上產生並載入私密金鑰。

  • 私有金鑰必須可透過物件標籤來解析。

  • 核心裝置憑證。這是對應至私有金鑰的 IoT 用戶端憑證。

  • 如果您使用 Greengrass OTA 更新代理程式,則必須安裝開啟 SSL libp11 PKCS #11 包裝函式程式庫。如需詳細資訊,請參閱設定 over-the-air 更新支援

此外,也請確定符合下列條件:

  • 與私密金鑰相關聯的 IoT 用戶端憑證會在中註冊 AWS IoT 並啟動。您可以在 [管理] 下的 AWS IoT 主控台中進行驗證,展開 [所有裝置],選擇 [件],然後選擇核心項目的 [憑證] 索引標籤。

  • AWS IoT Greengrass 核心軟體 v1.7 或更新版本會安裝在核心裝置上,如入門教學課程的單元 2 所述。MQTT伺服器使用 EC 金鑰需要 1.9 版或更新版本。

  • 憑證已附加至 Greengrass 核心。您可以從 AWS IoT 主控台中核心物件的「管理」頁面進行驗證。

注意

目前, AWS IoT Greengrass 不支援直接從HSM. 憑證必須在檔案系統上 Greengrass 可讀取的位置中以純文字檔案載入。

AWS IoT Greengrass 核心的硬體安全性組態

硬體安全是在 Greengrass 組態檔中設定。這是位於/greengrass-root/config目錄中的config.json文件。

注意

若要逐步說明使用純軟體實作來設定HSM組態的程序,請參閱單元 7:模擬硬體安全整合

重要

範例中模擬的組態不提供任何安全優勢。它的目的是讓您瞭解 PKCS #11 規格,並HSM在 future 打算使用以硬體為基礎的軟體進行初始測試。

若要在中配置硬體安全性 AWS IoT Greengrass,請在中編輯crypto物件config.json

使用硬體安全性時,crypto物件會用來指定核心 PKCS #11 Provider 程式庫的憑證、私密金鑰和資產路徑,如下列範例所示。

"crypto": { "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, "principals" : { "IoTCertificate" : { "privateKeyPath" : "pkcs11:object=core-private-key-label;type=private", "certificatePath" : "file:///path-to-core-device-certificate" }, "MQTTServerCertificate" : { "privateKeyPath" : "pkcs11:object=server-private-key-label;type=private" }, "SecretsManager" : { "privateKeyPath": "pkcs11:object=core-private-key-label;type=private" } }, "caPath" : "file:///path-to-root-ca"

crypto 物件包含下列屬性:

欄位 描述 備註
caPath

AWS IoT 根 CA 的絕對路徑。

必須是以下格式URI的檔案:file:///absolute/path/to/file

注意
PKCS11
OpenSSLEngine

選用。開啟SSL引擎.so檔案的絕對路徑,以在開啟時啟用 PKCS #11 支援SSL。

必須是檔案系統上的檔案路徑。

如果您使用具有硬體安全性的 Greengrass OTA 更新代理程式,則需要此屬性。如需詳細資訊,請參閱設定 over-the-air 更新支援

P11Provider

PKCS#11 實作之 libdl 可載入程式庫的絕對路徑。

必須是檔案系統上的檔案路徑。

slotLabel

用於識別硬體模組的插槽標籤。

必須符合 PKCS #11 標籤規格。

slotUserPin

用來向模組驗證 Greengrass 核心的使用者PIN。

必須具有足夠的許可,才能使用設定的私有金鑰執行 C_Sign。

principals
IoTCertificate 核心用於向 AWS IoT提出請求的憑證和私有金鑰。
IoTCertificate  .privateKeyPath

核心私有金鑰的路徑。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。

IoTCertificate  .certificatePath

核心裝置憑證的絕對路徑。

必須是以下格式URI的檔案:file:///absolute/path/to/file

MQTTServerCertificate

選用。核心使用的私密金鑰與憑證結合做為MQTT伺服器或閘道。

MQTTServerCertificate  .privateKeyPath

本機MQTT伺服器私密金鑰的路徑。

使用此值可為本機MQTT伺服器指定您自己的私密金鑰。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。

如果省略此屬性, AWS IoT Greengrass 請根據您的旋轉設定旋轉鍵。若有指定,則由客戶負責輪換金鑰。

SecretsManager 保護用於加密之資料金鑰的私有金鑰。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心
SecretsManager  .privateKeyPath

本機 Secrets Manager 私有金鑰的路徑。

僅支援RSA金鑰。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。私密金鑰必須使用 PKCS#1 v1.5 填補機制來產生。

欄位 描述 備註
caPath

AWS IoT 根 CA 的絕對路徑。

必須是以下格式URI的檔案:file:///absolute/path/to/file

注意
PKCS11
OpenSSLEngine

選用。開啟SSL引擎.so檔案的絕對路徑,以在開啟時啟用 PKCS #11 支援SSL。

必須是檔案系統上的檔案路徑。

如果您使用具有硬體安全性的 Greengrass OTA 更新代理程式,則需要此屬性。如需詳細資訊,請參閱設定 over-the-air 更新支援

P11Provider

PKCS#11 實作之 libdl 可載入程式庫的絕對路徑。

必須是檔案系統上的檔案路徑。

slotLabel

用於識別硬體模組的插槽標籤。

必須符合 PKCS #11 標籤規格。

slotUserPin

用來向模組驗證 Greengrass 核心的使用者PIN。

必須具有足夠的許可,才能使用設定的私有金鑰執行 C_Sign。

principals
IoTCertificate 核心用於向 AWS IoT提出請求的憑證和私有金鑰。
IoTCertificate  .privateKeyPath

核心私有金鑰的路徑。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。

IoTCertificate  .certificatePath

核心裝置憑證的絕對路徑。

必須是以下格式URI的檔案:file:///absolute/path/to/file

MQTTServerCertificate

選用。核心使用的私密金鑰與憑證結合做為MQTT伺服器或閘道。

MQTTServerCertificate  .privateKeyPath

本機MQTT伺服器私密金鑰的路徑。

使用此值可為本機MQTT伺服器指定您自己的私密金鑰。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。

如果省略此屬性, AWS IoT Greengrass 請根據您的旋轉設定旋轉鍵。若有指定,則由客戶負責輪換金鑰。

SecretsManager 保護用於加密之資料金鑰的私有金鑰。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心
SecretsManager  .privateKeyPath

本機 Secrets Manager 私有金鑰的路徑。

僅支援RSA金鑰。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。私密金鑰必須使用 PKCS#1 v1.5 填補機制來產生。

欄位 描述 備註
caPath

AWS IoT 根 CA 的絕對路徑。

必須是以下格式URI的檔案:file:///absolute/path/to/file

注意
PKCS11
OpenSSLEngine

選用。開啟SSL引擎.so檔案的絕對路徑,以在開啟時啟用 PKCS #11 支援SSL。

必須是檔案系統上的檔案路徑。

如果您使用具有硬體安全性的 Greengrass OTA 更新代理程式,則需要此屬性。如需詳細資訊,請參閱設定 over-the-air 更新支援

P11Provider

PKCS#11 實作之 libdl 可載入程式庫的絕對路徑。

必須是檔案系統上的檔案路徑。

slotLabel

用於識別硬體模組的插槽標籤。

必須符合 PKCS #11 標籤規格。

slotUserPin

用來向模組驗證 Greengrass 核心的使用者PIN。

必須具有足夠的許可,才能使用設定的私有金鑰執行 C_Sign。

principals
IoTCertificate 核心用於向 AWS IoT提出請求的憑證和私有金鑰。
IoTCertificate  .privateKeyPath

核心私有金鑰的路徑。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。

IoTCertificate  .certificatePath

核心裝置憑證的絕對路徑。

必須是以下格式URI的檔案:file:///absolute/path/to/file

MQTTServerCertificate

選用。核心使用的私密金鑰與憑證結合做為MQTT伺服器或閘道。

MQTTServerCertificate  .privateKeyPath

本機MQTT伺服器私密金鑰的路徑。

使用此值可為本機MQTT伺服器指定您自己的私密金鑰。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。

如果省略此屬性, AWS IoT Greengrass 請根據您的旋轉設定旋轉鍵。若有指定,則由客戶負責輪換金鑰。

SecretsManager 保護用於加密之資料金鑰的私有金鑰。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心
SecretsManager  .privateKeyPath

本機 Secrets Manager 私有金鑰的路徑。

僅支援RSA金鑰。

對於檔案系統儲存,必須是以下格式URI的檔案:file:///absolute/path/to/file

對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 路徑。私密金鑰必須使用 PKCS#1 v1.5 填補機制來產生。

AWS IoT Greengrass 硬體安全性的佈建作法

以下是安全和效能相關的佈建實務。

安全性

  • 使用內部硬體隨機數產生器,直接在中產生私密金鑰。HSM

    注意

    如果您將私密金鑰設定為搭配此功能使用 (依照硬體廠商提供的指示),請注意, AWS IoT Greengrass 目前僅支援 PKCS1 v1.5 填補機制來加密和解密本機密。 AWS IoT Greengrass 不支持最佳非對稱加密填充(OAEP)。

  • 設定私有金鑰來禁止匯出。

  • 使用硬體廠商提供的佈建工具,使用硬體保護的私密金鑰產生憑證簽署要求 (CSR),然後使用 AWS IoT 主控台產生用戶端憑證。

注意

當私鑰上生成時,旋轉密鑰的做法不適用HSM。

效能

下圖顯示了 AWS IoT Greengrass 核心上的 IoT 客戶端組件和本地MQTT服務器。如果您想要對這兩個元件使用HSM組態,您可以使用相同的私密金鑰或個別的私密金鑰。如果您使用不同的金鑰,則必須將它們存放在相同插槽。

注意

AWS IoT Greengrass 不會對儲存在上的金鑰數量施加任何限制HSM,因此您可以儲存 IoT 用戶端、MQTT伺服器和祕密管理員元件的私密金鑰。但是,某些HSM供應商可能會限制您可以在插槽中存儲的密鑰數量。

IoT client and MQTT server interacting with AWS IoT Greengrass Core and AWS IoT Core.

一般而言,IoT 用戶端金鑰不會經常使用,因為 AWS IoT Greengrass Core 軟體會維護與雲端的長期連線。但是,每次 Greengrass 設備連接到核心時,都會使用MQTT服務器密鑰。這些互動直接影響效能。

當MQTT伺服器金鑰儲存在上時HSM,裝置可連線的速率取決於每秒HSM可執行的RSA簽章作業數目。例如,如果在-RSA 2048 私密金鑰上執行 RSASSA PKCS1-v1.5 簽章HSM需要 300 毫秒,則每秒只有三個裝置可以連線到 Greengrass 核心。建立連線之後,將HSM不再使用,並 AWS IoT Greengrass套用標準配額

為了減輕效能瓶頸,您可以將MQTT伺服器的私密金鑰儲存在檔案系統上,而不是儲存在. HSM 使用此組態時,MQTT伺服器的行為就像未啟用硬體安全性一樣。

AWS IoT Greengrass 支援 IoT 用戶端和MQTT伺服器元件的多重金鑰儲存設定,因此您可以針對安全性和效能需求進行最佳化。下表包含範例組態。

組態 IoT 金鑰 MQTT鍵 效能
HSM共用金鑰 HSM:鍵 A HSM:鍵 A 受HSM或限制 CPU
HSM獨立按鍵 HSM:鍵 A HSM:鍵 B 受HSM或限制 CPU
HSM僅適用於 IoT HSM:鍵 A 檔案系統:金鑰 B 受限於 CPU
傳統 檔案系統:金鑰 A 檔案系統:金鑰 B 受限於 CPU

若要設定 Greengrass 核心為MQTT伺服器使用以檔案系統為基礎的金鑰,請省略該principals.MQTTServerCertificate區段 config.json (如果您不使用由產生的預設金鑰,請指定金鑰的檔案型路徑)。 AWS IoT Greengrass產生的 crypto 物件看起來像這樣:

"crypto": { "PKCS11": { "OpenSSLEngine": "...", "P11Provider": "...", "slotLabel": "...", "slotUserPin": "..." }, "principals": { "IoTCertificate": { "privateKeyPath": "...", "certificatePath": "..." }, "SecretsManager": { "privateKeyPath": "..." } }, "caPath" : "..." }

硬體安全整合支援的密碼套件

AWS IoT Greengrass 當核心設定為硬體安全性時,支援一組密碼套件。這是核心設定為使用檔案型安全時支援之密碼套件的子集。如需詳細資訊,請參閱TLS 密碼套件支援

注意

透過區域網路從 Greengrass 裝置連線到 Greengrass 核心時,請務必使用其中一個受支援的加密套件來進行連線。TLS

設定 over-the-air 更新支援

若要在使用硬體安全性時啟用 over-the-air (OTA) AWS IoT Greengrass 核心軟體的更新,您必須安裝 OpenSC libp11 PKCS#11 包裝函式程式庫並編輯 Greengrass 組態檔。如需更新的詳細資OTA訊,請參閱AWS IoT Greengrass 核心軟體的 OTA 更新

  1. 停止 Greengrass 協助程式。

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
    注意

    greengrass-root 代表 AWS IoT Greengrass 核心軟體安裝在裝置上的路徑。通常,這是 /greengrass 目錄。

  2. 安裝開放式SSL引擎。支援開啟 SSL 1.0 或 1.1 版本。

    sudo apt-get install libengine-pkcs11-openssl
  3. 在您的系統上找到 Open SSL 引擎 (libpkcs11.so) 的路徑:

    1. 取得程式庫的已安裝套件清單。

      sudo dpkg -L libengine-pkcs11-openssl

      libpkcs11.so 檔案位於 engines 目錄中。

    2. 複製檔案的完整路徑 (例如 /usr/lib/ssl/engines/libpkcs11.so)。

  4. 開啟 Greengrass 組態檔。這是目/greengrass-root/config錄中的config.json文件。

  5. 對於 OpenSSLEngine 屬性,輸入 libpkcs11.so 檔案的路徑。

    { "crypto": { "caPath" : "file:///path-to-root-ca", "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, ... } ... }
    注意

    如果 OpenSSLEngine 屬性不存在於 PKCS11 物件中,則新增它。

  6. 啟動 Greengrass 協助程式。

    cd /greengrass-root/ggc/core/ sudo ./greengrassd start

與舊版 AWS IoT Greengrass 核心軟體的回溯相容性

具有硬體安全性支援的 AWS IoT Greengrass Core 軟體與針對 v1.6 及更早版本產生的config.json檔案完全向後相容。如果crypto物件不存在於config.json組態檔案中,則 AWS IoT Greengrass 會使用以檔案為基礎的coreThing.certPathcoreThing.keyPath、和coreThing.caPath屬性。此向後相容性適用於 Greengrass OTA 更新,而不會覆寫中指定的檔案型組態。config.json

不支援 PKCS #11 的硬體

PKCS#11 程式庫通常由硬體廠商提供或是開放原始碼。例如,對於符合標準的硬體 (例如 TPM1 .2),您可以使用現有的開放原始碼軟體。不過,如果您的硬體沒有對應的 PKCS #11 程式庫實作,或者您想要撰寫自訂 PKCS #11 提供者,您應該連絡您的 AWS 企業 Support 代表,提供整合相關問題。

另請參閱