硬體安全整合 - 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核心 1.7 及更高版。

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

搜尋符合此功能的裝置AWS Partner設備目錄

下圖顯示環境的硬體安全架構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 Partner設備目錄

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

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

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

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

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

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

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

  • 與私有金鑰相關聯的 IoT 用戶端憑證是在 AWS IoT 中註冊並啟動。您可以在AWS IoT主控台Manage (管理),展開所有裝置,選擇實物並選擇憑證核心事物的標籤。

  • 所以此AWS IoT Greengrass核心軟體 v1.7 或更新版已安裝在核心裝置上,如單元入門教學 需要 1.9 版或更新版,才能對 MQTT 伺服器使用 EC 金鑰。

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

注意

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

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

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

注意

若要逐步進行使用純軟體實作來設定 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 物件包含下列屬性:

欄位 描述 備註
卡帕斯

AWS IoT 根 CA 的絕對路徑。

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

PKCS11
开放式

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

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

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

第 11 供應商

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

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

插槽標籤

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

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

slotUserPin

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

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

principals
物聯網證書 The certificate and private key that the core uses to make requests to AWS IoT.
物聯網證書。privateKeyPath

核心私有金鑰的路徑。

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。

物聯網證書. 證書路徑

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

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

MQTTServerCertificate

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

MQTTServerCertificate 。privateKeyPath

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

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

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。

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

SecretsManager The private key that secures the data key used for encryption. For more information, see 將私密部署至 AWS IoT Greengrass 核心.
SecretsManager  .privateKeyPath

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

僅支援 RSA 金鑰。

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。必須使用 PKCS#1 v1.5 填補機制產生私密金鑰。

欄位 描述 備註
卡帕斯

AWS IoT 根 CA 的絕對路徑。

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

PKCS11
开放式

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

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

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

第 11 供應商

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

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

插槽標籤

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

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

slotUserPin

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

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

principals
物聯網證書 The certificate and private key that the core uses to make requests to AWS IoT.
物聯網證書。privateKeyPath

核心私有金鑰的路徑。

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。

物聯網證書. 證書路徑

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

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

MQTTServerCertificate

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

MQTTServerCertificate 。privateKeyPath

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

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

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。

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

SecretsManager The private key that secures the data key used for encryption. For more information, see 將私密部署至 AWS IoT Greengrass 核心.
SecretsManager  .privateKeyPath

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

僅支援 RSA 金鑰。

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。必須使用 PKCS#1 v1.5 填補機制產生私密金鑰。

欄位 描述 備註
卡帕斯

AWS IoT 根 CA 的絕對路徑。

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

PKCS11
开放式

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

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

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

第 11 供應商

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

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

插槽標籤

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

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

slotUserPin

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

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

principals
物聯網證書 The certificate and private key that the core uses to make requests to AWS IoT.
物聯網證書。privateKeyPath

核心私有金鑰的路徑。

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。

物聯網證書. 證書路徑

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

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

MQTTServerCertificate

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

MQTTServerCertificate 。privateKeyPath

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

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

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。

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

SecretsManager The private key that secures the data key used for encryption. For more information, see 將私密部署至 AWS IoT Greengrass 核心.
SecretsManager  .privateKeyPath

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

僅支援 RSA 金鑰。

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

如為 HSM 儲存,必須為指定物件標籤的 RFC 7512 PKCS # 11 路徑。必須使用 PKCS#1 v1.5 填補機制產生私密金鑰。

AWS IoT Greengrass 硬體安全的佈建實務

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

安全性

  • 使用內部硬體隨機號碼產生器,直接在 HSM 產生私有金鑰。

    注意

    若您設定私有金鑰搭配此功能使用 (透過遵循硬體廠商提供的說明),請注意 AWS IoT Greengrass 目前僅支援 PKCS1 v1.5 填補機制來加密或解密本機秘密。AWS IoT Greengrass 不支援最佳化非對稱加密填補 (OAEP)。

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

  • 使用硬體保護的私有金鑰來產生憑證簽署請求 (CSR),然後使用AWS IoT主控台,用於產生用戶端憑證。

注意

在 HSM 上產生私有金鑰時,輪換金鑰的實務不適用。

效能

下圖顯示用戶端元件,以及 IoT 上的本機 MQTT 伺服器AWS IoT Greengrass核心。如果想要針對這兩個元件使用 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:金鑰 HSM:金鑰 受到 HSM 或 CPU 限制
HSM 獨立金鑰 HSM:金鑰 HSM:金鑰 受到 HSM 或 CPU 限制
僅限 IoT 的 HSM HSM:金鑰 檔案系統:金鑰 受到 CPU 限制
傳統 檔案系統:金鑰 檔案系統:金鑰 受到 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 連線。

設定支援 over-the-air 更新

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

  1. 停止 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 組態檔。這就是config.json檔案中的/greengrass-root/config目錄。

  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.keyPathcoreThing.caPath 屬性。此回溯相容性適用於 Greengrass OTA 更新,不會覆蓋 config.json 中指定的檔案型組態。

沒有 PKCS#11 支援的硬體

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

另請參閱