硬體安全整合 - AWS IoT Greengrass

若我們提供該指南英語版本的翻譯,在有任何牴觸的狀況下請以英文版本的指南為主。其透過機器翻譯提供翻譯。

硬體安全整合

只有 AWS IoT Greengrass Core v1.7 與更新版本才提供這項功能。

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

AWS 合作夥伴裝置目錄中搜尋符合此功能資格的裝置。

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

在標準安裝上,AWS IoT Greengrass 使用兩個私有金鑰。當 Greengrass 核心連接至 AWS IoT Core 時,AWS IoT 用戶端 (IoT 用戶端) 元件會在 Transport Layer Security (TLS) 交握期間使用一個金鑰。(此金鑰也稱為核心私有金鑰)。 另一個金鑰則由本機 MQTT 伺服器使用,讓 Greengrass 裝置可與 Greengrass 核心通訊。如果想要針對這兩個元件使用硬體安全,您可以使用共用的私有金鑰或個別的私有金鑰。如需詳細資訊,請參閱AWS IoT Greengrass 硬體安全的佈建實務

注意

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

要求

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

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

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

    • 對於 EC 金鑰:NIST P-256 或 NIST P-384 曲線。

    注意

    AWS 合作夥伴裝置目錄中搜尋符合此功能資格的裝置。

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

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

  • 您必須使用廠商提供的佈建工具,在 HSM 上產生和載入私有金鑰。

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

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

  • 如果您使用的是 Greengrass OTA 更新代理程式,則必須安裝 OpenSSL libp11 PKCS#11 包裝函數程式庫。如需詳細資訊,請參閱設定無線更新的支援

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

  • 與私有金鑰相關聯的 IoT 用戶端憑證是在 AWS IoT 中註冊並啟動。您可以從 AWS IoT 主控台 中核心物件的 Manage (管理) 頁面驗證此條件。

  • AWS IoT Greengrass Core 軟體 1.7 or later 版已安裝在核心裝置上,如入門教學課桯的單元 2 所述。需要版本 1.9 or later,才能對 MQTT 伺服器使用 EC 金鑰。

  • 憑證已附加至 Greengrass 核心。您可以從 AWS IoT 主控台 中核心物件的 Manage (管理) 頁面驗證此條件。

注意

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

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

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

注意

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

重要

範例中模擬的組態不提供任何安全優勢。其旨在讓您了解 PKCS#11 規格,並在您計劃未來使用硬體型 HSM 時,執行軟體的初始測試。

若要在 AWS IoT Greengrass 設定硬體安全,請編輯 config.json 中的 crypto 物件。

使用硬體安全時,會使用 crypto 物件,針對核心上的 PKCS#11 供應商程式庫指定憑證、私有金鑰和資產的路徑。

"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

選用。OpenSSL 引擎 .so 檔案的絕對路徑,此檔案可在 OpenSSL 上啟用 PKCS#11 支援。

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

如果您使用具硬體安全的 Greengrass OTA 更新代理程式,則此屬性為必要。如需詳細資訊,請參閱設定無線更新的支援.

P11Provider

PKCS#11 實作的 libdl-loadable 程式庫的絕對路徑。

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

slotLabel

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

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

slotUserPin

用於對模組驗證 Greengrass 核心的使用者 PIN。

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

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

核心私有金鑰的路徑。

如為檔案系統儲存,必須為此格式的檔案 URI:file:///absolute/path/to/file.

對於HSM存儲,必須是 RFC7512PKCS11 指定對象標籤的路徑。

IoTCertificate  .certificatePath

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

必須為此格式的檔案 URI:file:///absolute/path/to/file.

MQTTServerCertificate

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

MQTTServerCertificate  .privateKeyPath

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

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

如為檔案系統儲存,必須為此格式的檔案 URI:file:///absolute/path/to/file.

對於HSM存儲,必須是 RFC7512PKCS11 指定對象標籤的路徑。

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

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

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

僅支援 RSA 金鑰。

如為檔案系統儲存,必須為此格式的檔案 URI:file:///absolute/path/to/file.

對於HSM存儲,必須是 RFC7512PKCS11 指定對象標籤的路徑。必須使用 PKCS11v1.5 襯墊機構。

欄位 描述 備註
caPath

通往 AWS IoT 根CA。

必須為此格式的檔案 URI:file:///absolute/path/to/file.

注意
PKCS11
OpenSSLEngine

選用。OpenSSL 引擎 .so 檔案的絕對路徑,此檔案可在 OpenSSL 上啟用 PKCS#11 支援。

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

如果您使用具硬體安全的 Greengrass OTA 更新代理程式,則此屬性為必要。如需詳細資訊,請參閱設定無線更新的支援.

P11Provider

PKCS#11 實作的 libdl-loadable 程式庫的絕對路徑。

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

slotLabel

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

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

slotUserPin

用於對模組驗證 Greengrass 核心的使用者 PIN。

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

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

核心私有金鑰的路徑。

如為檔案系統儲存,必須為此格式的檔案 URI:file:///absolute/path/to/file.

對於HSM存儲,必須是 RFC7512PKCS11 指定對象標籤的路徑。

IoTCertificate  .certificatePath

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

必須為此格式的檔案 URI:file:///absolute/path/to/file.

MQTTServerCertificate

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

MQTTServerCertificate  .privateKeyPath

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

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

如為檔案系統儲存,必須為此格式的檔案 URI:file:///absolute/path/to/file.

對於HSM存儲,必須是 RFC7512PKCS11 指定對象標籤的路徑。

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

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

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

僅支援 RSA 金鑰。

如為檔案系統儲存,必須為此格式的檔案 URI:file:///absolute/path/to/file.

對於HSM存儲,必須是 RFC7512PKCS11 指定對象標籤的路徑。必須使用 PKCS11v1.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 伺服器和 Secrets Manager 元件的私有金鑰。不過,一些 HSM 廠商可能會對您可以在插槽中存放的金鑰數量施行一些限制。

一般來說,不會頻繁使用 IoT 用戶端金鑰,因為 AWS IoT Greengrass Core 軟體會維持與雲端的長期連線。不過,每次 Greengrass 裝置連接到核心,就會使用 MQTT 伺服器金鑰。這些互動直接影響效能。

當 MQTT 伺服器金鑰存放在 HSM 上時,裝置可以連接的速率取決於 HSM 每秒可以執行的 RSA 簽章操作數目。例如,如果 HSM 需要 300 毫秒,在 RSA-2048 私有金鑰上執行 RSASSA-PKCS1-v1.5 簽章,則每秒只有三個裝置可以連接到 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 限制
僅限 IoT 的 HSM HSM:金鑰 A 檔案系統:金鑰 B 受到 CPU 限制
傳統 檔案系統:金鑰 A 檔案系統:金鑰 B 受到 CPU 限制

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

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

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

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

注意

從 Greengrass 裝置透過本機網路連接到 Greengrass 核心時,請務必使用其中一個支援的密碼套件來建立 TLS 連線。

設定無線更新的支援

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

  1. 停止 AWS Greengrass 協助程式。

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

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

  2. 安裝 OpenSSL 引擎。支援 OpenSSL 1.0 或 1.1 版本。

    sudo apt-get install libengine-pkcs11-openssl
  3. 在您的系統上尋找 OpenSSL 引擎 (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. 啟動 AWS 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.keyPathcoreThing.caPath 屬性。此回溯相容性適用於 Greengrass OTA 更新,不會覆蓋 config.json 中指定的檔案型組態。

沒有 PKCS#11 支援的硬體

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

另請參閱