硬體安全整合 - AWS IoT Greengrass

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

硬體安全整合

注意

此功能適用於 v2.5.3 及更高版 Greeng rass 核組件。 AWS IoT Greengrass目前在 Windows 核心裝置上不支援此功能。

您可以透過 PKCS #11 介面將AWS IoT Greengrass核心軟體設定為使用硬體安全性模組 (HSM)。此功能使您可以安全地存儲設備的私鑰和證書,以便它們不會在軟件中暴露或複製。您可以將私密金鑰和憑證儲存在硬體模組 (例如 HSM 或信任平台模組 (TPM) 上。

AWS IoT Greengrass核心軟體使用私密金鑰和 X.509 憑證來驗證AWS IoT與和AWS IoT Greengrass服務的連線。密碼管理員元件使用此私密金鑰來安全地加密和解密您部署到 Greengrass 核心裝置的密碼。當您將核心裝置設定為使用 HSM 時,這些元件會使用您儲存在 HSM 中的私密金鑰和憑證。

Moquette MQTT 代理程式元件也會儲存其本機 MQTT 伺服器憑證的私密金鑰。此元件會將私密金鑰儲存在元件的工作資料夾中的裝置的檔案系統上。目前AWS IoT Greengrass不支援在 HSM 中儲存此私密金鑰或憑證。

要求

您必須符合下列需求才能在 Greengrass 核心裝置上使用 HSM:

  • 核心設備上安裝的 Greengrass 核 v2.5.3 或更高版本。在核心裝置上安裝 AWS IoT Greengrass Core 軟體時,您可以選擇相容的版本。

  • 安裝在核心裝置上的 PKCS #11 提供者元件。當您在核心裝置上安裝 AWS IoT Greengrass Core 軟體時,您可以下載並安裝此元件。

  • 一種硬體安全性模組,支援 PKCS #1 v1.5 簽章配置,以及具有 RSA-2048 金鑰大小 (或更大) 或 ECC 金鑰的 RSA 金鑰。

    注意

    若要搭配 ECC 金鑰使用硬體安全性模組,您必須使用 Greengrass 核心 v2.5.6 或更新版本。

    要使用硬件安全模塊和密碼管理器,您必須使用帶有 RSA 密鑰的硬件安全模塊。

  • AWS IoT Greengrass核心軟體可以在執行階段 (使用 libdl) 載入的 PKCS #11 提供者程式庫,以呼叫 PKCS #11 函數。PKCS #11 提供者程式庫必須實作下列 PKCS #11 API 作業:

    • C_Initialize

    • C_Finalize

    • C_GetSlotList

    • C_GetSlotInfo

    • C_GetTokenInfo

    • C_OpenSession

    • C_GetSessionInfo

    • C_CloseSession

    • C_Login

    • C_Logout

    • C_GetAttributeValue

    • C_FindObjectsInit

    • C_FindObjects

    • C_FindObjectsFinal

    • C_DecryptInit

    • C_Decrypt

    • C_DecryptUpdate

    • C_DecryptFinal

    • C_SignInit

    • C_Sign

    • C_SignUpdate

    • C_SignFinal

    • C_GetMechanismList

    • C_GetMechanismInfo

    • C_GetInfo

    • C_GetFunctionList

  • 硬體模組必須可透過插槽標籤根據 PKCS#11 規格中的定義來解析。

  • 您必須將私密金鑰和憑證儲存在相同的插槽中,而且如果 HSM 支援物件 ID,則必須使用相同的物件標籤和物件 ID。

  • 憑證和私密金鑰必須可透過物件標籤來解析。

  • 私密金鑰必須具有下列權限:

    • sign

    • decrypt

  • (選擇性) 若要使用密碼管理員元件,您必須使用 2.1.0 或更新版本,且私密金鑰必須具有下列權限:

    • unwrap

    • wrap

硬體安全性最佳做法

在 Greengrass 核心裝置上設定硬體安全性時,請考慮下列最佳作法。

  • 使用內部硬體隨機號碼產生器,直接在 HSM 產生私有金鑰。這種方法比匯入您在其他地方產生的私密金鑰更安全,因為私密金鑰會保留在 HSM 中。

  • 將私鑰配置為不可變並禁止導出。

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

注意

在 HSM 上產生私密金鑰時,不適用輪換金鑰的安全性最佳做法。

安裝具有硬件安全性的AWS IoT Greengrass核心軟件

安裝 AWS IoT Greengrass Core 軟體時,您可以將其設定為使用在 HSM 中產生的私密金鑰。此方法遵循安全性最佳實務,在 HSM 中產生私密金鑰,因此私密金鑰會保留在 HSM 中。

若要安裝具有硬體安全性的 AWS IoT Greengrass Core 軟體,請執行下列動作:

  1. 在 HSM 中產生私密金鑰。

  2. 從私密金鑰建立憑證簽署要求 (CSR)。

  3. 從 CSR 建立憑證。您可以建立由AWS IoT其他根憑證授權單位 (CA) 簽署的憑證。如需有關如何使用其他根 CA 的詳細資訊,請參閱AWS IoT Core開發人員指南中的建立您自己的用戶端憑證

  4. 下載AWS IoT憑證並將其匯入 HSM。

  5. 從指定要在 HSM 中使用 PKCS #11 提供者元件以及私密金鑰和憑證的組態檔安裝 AWS IoT Greengrass Core 軟體。

您可以選擇下列其中一個安裝選項來安裝具有硬體安全性的 AWS IoT Greengrass Core 軟體:

目前,當您使用自動資源佈建或AWS IoT叢集佈建進行安裝時,AWS IoT Greengrass不支援使用硬體安全性安裝 AWS IoT Greengrass Core 軟體。

在現有核心裝置上設定硬體安全性

您可以將核心裝置的私密金鑰和憑證匯入 HSM,以設定硬體安全性。

考量事項
  • 您必須擁有核心裝置檔案系統的 root 存取權。

  • 在此程序中,您會關閉 AWS IoT Greengrass Core 軟體,以便在您設定硬體安全性時,核心裝置處於離線狀態且無法使用。

若要在現有核心裝置上設定硬體安全性,請執行下列動作:

  1. 初始化 HSM。

  2. PKCS #11 提供者元件部署至核心裝置。

  3. 停止AWS IoT Greengrass核心軟體。

  4. 將核心裝置的私密金鑰和憑證匯入 HSM。

  5. 更新 AWS IoT Greengrass Core 軟體的組態檔案,以使用 HSM 中的私密金鑰和憑證。

  6. 啟動AWS IoT Greengrass核心軟體。

步驟 1:初始化硬體安全模組

完成下列步驟,在核心裝置上初始化 HSM。

初始化硬體安全模組
  • 在 HSM 中初始化 PKCS #11 權杖,並儲存該權杖的插槽識別碼和使用者 PIN 碼。請查看 HSM 的文件以了解如何初始化權杖。稍後部署和設定 PKCS #11 提供者元件時,您可以使用插槽識別碼和使用者 PIN 碼。

步驟 2:部署 PKCS #11 提供者元件

完成下列步驟,以部署並設定 PKCS #11 提供者元件。您可以將元件部署到一或多個核心裝置。

  1. AWS IoT Greengrass主控台瀏覽功能表中,選擇 [元件]。

  2. 在 [件] 頁面上,選擇 [公用元件] 索引標籤,然後選擇aws.greengrass.crypto.Pkcs11Provider

  3. aws.greengrass.crypto.Pkcs11Provider頁面中,選擇部署

  4. 從 [新增至部署] 中,選擇要修訂的現有部署,或選擇建立新部署,然後選擇 [一步]。

  5. 如果您選擇建立新部署,請為部署選擇目標核心裝置或物件群組。在 [指定目標] 頁面的 [部署目標] 下,選擇核心裝置或物件群組,然後選擇 [下步]。

  6. 在 [選取元件] 頁面的 [公用元件] 底下,選取 aws.greengrass.crypto.Pkcs11Provider,然後選擇 [下步]。

  7. 在 [設定元件] 頁面上,選取 aws.greengrass.crypto.Pkcs11Provider,然後執行下列動作:

    1. 選擇 設定元件

    2. 設定aws.greengrass.crypto.Pkcs11Provider強制回應的組態更新下,在要合併的組態中,輸入下列組態更新。使用目標核心裝置的值更新下列組態參數。指定您先前初始化 PKCS #11 權杖的插槽識別碼和使用者 PIN 碼。稍後您將私密金鑰和憑證匯入 HSM 中的這個插槽。

      name

      PKCS #11 組態的名稱。

      library

      PKCS #11 實作程式庫的絕對檔案路徑,AWS IoT Greengrass核心軟體可以使用 libdl 載入。

      slot

      包含私密金鑰和裝置憑證的插槽識別碼。此值與槽索引或槽標籤不同。

      userPin

      用來存取插槽的使用者 PIN 碼。

      { "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
    3. 選擇 [確認] 關閉強制回應,然後選擇 [下一步]。

  8. 設定進階設定頁面上,保留預設組態設定,然後選擇 下一步

  9. Review (檢閱) 頁面,選擇 Deploy (部署)

    部署最多可能需要一分鐘的時間才能完成。

若要部署 PKCS #11 提供者元件,請建立包含aws.greengrass.crypto.Pkcs11Provider在物件中的部署文components件,並指定元件的組態更新。遵循中建立部署的指示建立新部署或修訂既有部署。

下列範例部分部署文件指定要部署及設定 PKCS #11 提供者元件。使用目標核心裝置的值更新下列組態參數。儲存插槽 ID 和使用者 PIN 碼,以便稍後在將私密金鑰和憑證匯入 HSM 時使用。

name

PKCS #11 組態的名稱。

library

PKCS #11 實作程式庫的絕對檔案路徑,AWS IoT Greengrass核心軟體可以使用 libdl 載入。

slot

包含私密金鑰和裝置憑證的插槽識別碼。此值與槽索引或槽標籤不同。

userPin

用來存取插槽的使用者 PIN 碼。

{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
{ ..., "components": { ..., "aws.greengrass.crypto.Pkcs11Provider": { "componentVersion": "2.0.0", "configurationUpdate": { "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}" } } } }

可能需要幾分鐘才能完成部署。您可以使用該AWS IoT Greengrass服務來檢查部署的狀態。您可以檢查AWS IoT Greengrass核心軟體記錄檔,以確認 PKCS #11 提供者元件是否已成功部署。如需詳細資訊,請參閱下列內容:

如果部署失敗,您可以疑難排解每個核心裝置上的部署問題。如需詳細資訊,請參閱 疑難排 AWS IoT Greengrass V2

步驟 3:更新核心設備上的配置

AWS IoT Greengrass核心軟體使用組態檔案來指定裝置的運作方式。此組態檔案包括在何處尋找私密金鑰和裝置用來連線到的憑證AWS 雲端。完成下列步驟,將核心裝置的私密金鑰和憑證匯入 HSM,並更新組態檔以使用 HSM。

更新核心裝置上的組態以使用硬體安全性
  1. 停止AWS IoT Greengrass核心軟體。如果您使用 systemd 將 AWS IoT GreengrassCore 軟體設定為系統服務,則可以執行下列命令來停止軟體。

    sudo systemctl stop greengrass.service
  2. 尋找核心裝置的私密金鑰和憑證檔案。

    • 如果您使用自動佈建或叢集佈建來安裝 AWS IoT Greengrass Core 軟體,則私密金鑰會存在於/greengrass/v2/privKey.key,且憑證存在於/greengrass/v2/thingCert.crt

    • 如果您以手動佈建方式安裝 AWS IoT Greengrass Core 軟體,則預設會存在/greengrass/v2/private.pem.key私密金鑰,且憑證/greengrass/v2/device.pem.crt預設存在。

    您也可以入庫納管system.privateKeyPathsystem.certificateFilePath性質,/greengrass/v2/config/effectiveConfig.yaml以尋找這些檔案的位置。

  3. 將私密金鑰和憑證匯入 HSM。請查看 HSM 的文件,了解如何將私密金鑰和憑證匯入其中。使用先前初始化 PKCS #11 權杖的插槽識別碼和使用者 PIN 碼匯入私密金鑰和憑證。私密金鑰和憑證必須使用相同的物件標籤和物件 ID。儲存匯入每個檔案時指定的物件標籤。稍後當您更新AWS IoT Greengrass核心軟體組態以使用 HSM 中的私密金鑰和憑證時,您可以使用此標籤。

  4. 更新AWS IoT Greengrass核心組態以使用 HSM 中的私密金鑰和憑證。若要更新組態,請修改 AWS IoT Greengrass Core 組態檔案,並使用更新的組態檔執行 AWS IoT Greengrass Core 軟體,以套用新的組態。

    請執行下列操作:

    1. 創建AWS IoT Greengrass核心配置文件的備份。如果您在設定硬體安全性時遇到問題,可以使用此備份來還原核心裝置。

      sudo cp /greengrass/v2/config/effectiveConfig.yaml ~/ggc-config-backup.yaml
    2. 在文字編輯器中開啟 AWS IoT Greengrass Core 組態檔案。例如,您可以執行下列命令來使用 GNU nano 來編輯檔案。取代/greengrass/v2為 Greengrass 根資料夾的路徑。

      sudo nano /greengrass/v2/config/effectiveConfig.yaml
    3. 將的值取代為 system.privateKeyPath HSM 中私密金鑰的 PKCS #11 URI。將 iotdevicekey 取代為您先前匯入私密金鑰和憑證的物件標籤。

      pkcs11:object=iotdevicekey;type=private
    4. 將的值取代為 HSM 中憑證的 PKCS #11 URI。system.certificateFilePathiotdevicekey 取代為您先前匯入私密金鑰和憑證的物件標籤。

      pkcs11:object=iotdevicekey;type=cert

    完成這些步驟之後,AWS IoT GreengrassCore 配置檔案中的system屬性看起來應該類似於下列範例。

    system: certificateFilePath: "pkcs11:object=iotdevicekey;type=cert" privateKeyPath: "pkcs11:object=iotdevicekey;type=private" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "MyGreengrassCore"
  5. 在更新的檔effectiveConfig.yaml案中套用組態。Greengrass.jar使用要在中套用組態的--init-config參數執行effectiveConfig.yaml。取代/greengrass/v2為 Greengrass 根資料夾的路徑。

    sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml
  6. 啟動AWS IoT Greengrass核心軟體。如果您使用 systemd 將 AWS IoT GreengrassCore 軟體設定為系統服務,則可以執行下列命令來啟動軟體。

    sudo systemctl start greengrass.service

    如需詳細資訊,請參閱 執行AWS IoT Greengrass核心軟體

  7. 檢查AWS IoT Greengrass核心軟體記錄檔,確認軟體是否啟動並連線至AWS 雲端. AWS IoT Greengrass核心軟體會使用私密金鑰和憑證來連線到AWS IoT和AWS IoT Greengrass服務。

    sudo tail -f /greengrass/v2/logs/greengrass.log

    下列資訊層級記錄訊息指出 AWS IoT Greengrass Core 軟體已成功連線到AWS IoT和AWS IoT Greengrass服務。

    2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
  8. (選擇性) 確認 AWS IoT Greengrass Core 軟體可與 HSM 中的私密金鑰和憑證搭配使用後,請從裝置的檔案系統中刪除私密金鑰和憑證檔案。執行下列命令,並以私密金鑰和憑證檔案的路徑取代檔案路徑。

    sudo rm /greengrass/v2/privKey.key sudo rm /greengrass/v2/thingCert.crt

使用不支援 PKCS #11 的硬體

PKCS#11 程式庫通常是硬體廠商提供,或是開放原始碼。例如,使用標準相容硬體 (例如 TPM1.2) 時,可以使用現有的開放原始碼軟體。但是,如果您的硬體沒有對應的 PKCS #11 程式庫實作,或者如果您想要撰寫自訂 PKCS #11 提供者,請聯絡您的 Amazon Web Services 企業 Support 代表,詢問與整合相關的問題。

另請參閱