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 IoT Greengrass 核心的硬體安全性架構。
在標準安裝上, 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 組態檔中設定。這是位於/
目錄中的config.json文件。greengrass-root
/config
注意
若要逐步說明使用純軟體實作來設定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的檔案: 注意請確定您的端點對應於您的憑證類型。 |
PKCS11 |
||
OpenSSLEngine |
選用。開啟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的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 |
IoTCertificate .certificatePath |
核心裝置憑證的絕對路徑。 |
必須是以下格式URI的檔案: |
MQTTServerCertificate |
選用。核心使用的私密金鑰與憑證結合做為MQTT伺服器或閘道。 |
|
MQTTServerCertificate .privateKeyPath |
本機MQTT伺服器私密金鑰的路徑。 |
使用此值可為本機MQTT伺服器指定您自己的私密金鑰。 對於檔案系統儲存,必須是以下格式URI的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 如果省略此屬性, AWS IoT Greengrass 請根據您的旋轉設定旋轉鍵。若有指定,則由客戶負責輪換金鑰。 |
SecretsManager |
保護用於加密之資料金鑰的私有金鑰。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心。 | |
SecretsManager .privateKeyPath |
本機 Secrets Manager 私有金鑰的路徑。 |
僅支援RSA金鑰。 對於檔案系統儲存,必須是以下格式URI的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 |
欄位 | 描述 | 備註 |
---|---|---|
caPath |
AWS IoT 根 CA 的絕對路徑。 |
必須是以下格式URI的檔案: 注意請確定您的端點對應於您的憑證類型。 |
PKCS11 |
||
OpenSSLEngine |
選用。開啟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的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 |
IoTCertificate .certificatePath |
核心裝置憑證的絕對路徑。 |
必須是以下格式URI的檔案: |
MQTTServerCertificate |
選用。核心使用的私密金鑰與憑證結合做為MQTT伺服器或閘道。 |
|
MQTTServerCertificate .privateKeyPath |
本機MQTT伺服器私密金鑰的路徑。 |
使用此值可為本機MQTT伺服器指定您自己的私密金鑰。 對於檔案系統儲存,必須是以下格式URI的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 如果省略此屬性, AWS IoT Greengrass 請根據您的旋轉設定旋轉鍵。若有指定,則由客戶負責輪換金鑰。 |
SecretsManager |
保護用於加密之資料金鑰的私有金鑰。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心。 | |
SecretsManager .privateKeyPath |
本機 Secrets Manager 私有金鑰的路徑。 |
僅支援RSA金鑰。 對於檔案系統儲存,必須是以下格式URI的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 |
欄位 | 描述 | 備註 |
---|---|---|
caPath |
AWS IoT 根 CA 的絕對路徑。 |
必須是以下格式URI的檔案: 注意請確定您的端點對應於您的憑證類型。 |
PKCS11 |
||
OpenSSLEngine |
選用。開啟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的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 |
IoTCertificate .certificatePath |
核心裝置憑證的絕對路徑。 |
必須是以下格式URI的檔案: |
MQTTServerCertificate |
選用。核心使用的私密金鑰與憑證結合做為MQTT伺服器或閘道。 |
|
MQTTServerCertificate .privateKeyPath |
本機MQTT伺服器私密金鑰的路徑。 |
使用此值可為本機MQTT伺服器指定您自己的私密金鑰。 對於檔案系統儲存,必須是以下格式URI的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 如果省略此屬性, AWS IoT Greengrass 請根據您的旋轉設定旋轉鍵。若有指定,則由客戶負責輪換金鑰。 |
SecretsManager |
保護用於加密之資料金鑰的私有金鑰。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心。 | |
SecretsManager .privateKeyPath |
本機 Secrets Manager 私有金鑰的路徑。 |
僅支援RSA金鑰。 對於檔案系統儲存,必須是以下格式URI的檔案: 對於HSM儲存區,必須是指定物件標籤的 RFC7512 PKCS #11 |
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 用戶端金鑰不會經常使用,因為 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 協助程式。
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop注意
greengrass-root
代表 AWS IoT Greengrass 核心軟體安裝在裝置上的路徑。通常,這是/greengrass
目錄。安裝開放式SSL引擎。支援開啟 SSL 1.0 或 1.1 版本。
sudo apt-get install libengine-pkcs11-openssl
在您的系統上找到 Open SSL 引擎 (
libpkcs11.so
) 的路徑:取得程式庫的已安裝套件清單。
sudo dpkg -L libengine-pkcs11-openssl
libpkcs11.so
檔案位於engines
目錄中。複製檔案的完整路徑 (例如
/usr/lib/ssl/engines/libpkcs11.so
)。
開啟 Greengrass 組態檔。這是目
/
錄中的config.json文件。greengrass-root
/config-
對於
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
物件中,則新增它。 啟動 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.certPath
coreThing.keyPath
、和coreThing.caPath
屬性。此向後相容性適用於 Greengrass OTA 更新,而不會覆寫中指定的檔案型組態。config.json
不支援 PKCS #11 的硬體
PKCS#11 程式庫通常由硬體廠商提供或是開放原始碼。例如,對於符合標準的硬體 (例如 TPM1 .2),您可以使用現有的開放原始碼軟體。不過,如果您的硬體沒有對應的 PKCS #11 程式庫實作,或者您想要撰寫自訂 PKCS #11 提供者,您應該連絡您的 AWS 企業 Support 代表,提供整合相關問題。
另請參閱
-
PKCS#11 密碼編譯權杖介面使用指南 2.40 版。編輯者為 John Leiseboer 和 Robert Griffin。2014 年 11 月 16 日。OASIS委員會註 02. http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/cn02/pkcs11-ug-v2.40-cn02.html
. 最新版本: http://docs.oasis-open.org/pkcs11/pkcs11-ug/v2.40/pkcs11-ug-v2.40.html 。