AWS IoT Greengrass 安全性概述 - 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 安全性概述

AWS IoT Greengrass 使用 X.509 憑證、 AWS IoT 政策和 IAM 政策和角色來保護在本機 Greengrass 環境中裝置上執行的應用程式的安全。

下圖顯示 AWS IoT Greengrass 安全性模型的元件:

Greengrass 服務架構圖顯示了服 AWS 務,Greengrass 核心和連接的設備,以及它們的證書交互。
A - Greengrass 服務角色

從 AWS IoT Core、 AWS Lambda和其他 AWS 服務存取 AWS 資源 AWS IoT Greengrass 時所承擔的客戶建立的 IAM 角色。如需詳細資訊,請參閱 Greengrass 服務角色

B -核心裝置憑證

一個 X.509 憑證,用於使用和驗證核心。 AWS IoT Core AWS IoT Greengrass如需詳細資訊,請參閱 AWS IoT Greengrass 的裝置身分驗證和授權

C - 裝置憑證

用來驗證用戶端裝置 (也稱為連線裝置) 的 X.509 憑證,使用 AWS IoT Core 和 AWS IoT Greengrass。如需詳細資訊,請參閱 AWS IoT Greengrass 的裝置身分驗證和授權

D - 群組角色

從 Greengrass 核心呼叫 AWS 服務 AWS IoT Greengrass 時所承擔的客戶建立的 IAM 角色。

您可以使用此角色來指定使用者定義的 Lambda 函數和連接器存取 AWS 服務所需的存取權限,例如 DynamoDB。您還可以使用它 AWS IoT Greengrass 來允許將流管理器流導出到 AWS 服務並寫入 CloudWatch 日誌。如需詳細資訊,請參閱 Greengrass 群組角色

注意

AWS IoT Greengrass 不會使用 AWS Lambda 針對 Lambda 函數的雲端版本指定的 Lambda 執行角色。

E-MQTT 伺服器憑證

Greengrass 核心裝置與 Greengrass 群組中用於傳輸層安全性 (TLS) 相互驗證的憑證。憑證是由群組 CA 憑證所簽署,該憑證儲存在 AWS 雲端.

裝置連線工作流程

本節說明用戶端裝置如何連線到 AWS IoT Greengrass 服務和 Greengrass 核心裝置。用戶端裝置是註冊的 AWS IoT Core 裝置,與核心裝置位於相同 Greengrass 群組中。

  • Greengrass 核心裝置會使用其裝置憑證、私密金鑰和 AWS IoT Core 根 CA 憑證來連線至服務。 AWS IoT Greengrass 在核心裝置上,組態檔案中的crypto物件會指定這些項目的檔案路徑。

  • Greengrass 核心裝置會從 AWS IoT Greengrass 服務下載群組成員資格資訊。

  • 當部署於 Greengrass 核心裝置時,裝置憑證管理員 (DCM) 會處理 Greengrass 核心裝置的本機伺服器憑證管理工作。

  • 用戶端裝置使用其裝置憑證、私密金鑰和 AWS IoT Core 根 CA 憑證連線至 AWS IoT Greengrass 服務。建立連線之後,用戶端裝置會使用 Greengrass 探索服務來尋找其 Greengrass 核心裝置的 IP 位址。用戶端裝置也會下載群組 CA 憑證,此憑證用於與 Greengrass 核心裝置進行 TLS 相互驗證。

  • 用戶端裝置嘗試連線到 Greengrass 核心裝置,並傳遞其裝置憑證和用戶端識別碼。如果用戶端 ID 與用戶端裝置的物件名稱相符,且憑證有效 (屬於 Greengrass 群組的一部分),則會建立連線。若否,則終止連線。

用戶端裝置的 AWS IoT 原則必須授與greengrass:Discover權限,才能允許用戶端裝置探索核心的連線資訊。如需有關此政策陳述式的詳細資訊,請參閱Discovery 准許

設定 AWS IoT Greengrass 安全性

設定您的 Greengrass 應用程式的安全性
  1. 為您的 Greengrass 核心設備創建一個 AWS IoT Core 東西。

  2. 為您的 Greengrass 核心裝置產生金鑰對和裝置憑證。

  3. 建立和附加 AWS IoT 政策至裝置憑證。憑證和原則允許 Greengrass 核心裝置存取和服務。 AWS IoT Core AWS IoT Greengrass 如需詳細資訊,請參閱 核心裝置的最低 AWS IoT 政策

    注意

    不支援在核心裝置的 AWS IoT 原iot:Connection.Thing.*則中使用物件原則變數 ()。核心使用相同的裝置憑證來建立多個連線, AWS IoT Core 但連線中的用戶端 ID 可能與核心物件名稱不完全相符。

  4. 建立 Greengrass 服務角色 此 IAM 角色授權 AWS IoT Greengrass 代表您存取其他 AWS 服務的資源。這允許執 AWS IoT Greengrass 行基本任務,例如檢索 AWS Lambda 功能和管理設備陰影。

    您可以跨 AWS 區域 s 使用相同的服務角色,但它必須與您所使用 AWS 帳戶 的每個 AWS 區域 位置相關聯 AWS IoT Greengrass。

  5. (選用) 建立 Greengrass 群組角色。此 IAM 角色授予在 Greengrass 核心上執行的 Lambda 函數和連接器的權限,以呼叫服務。 AWS 例如,Kinesis Firehose 連接器需要將記錄寫入 Amazon 資料 Firehose 交付串流的權限。

    您只能連接一個角色到 Greengrass 群組。

  6. 為連接到 Greengrass 核心的每個設備創建一個 AWS IoT Core 東西。

    注意

    您也可以使用現有的 AWS IoT Core 項目和憑證。

  7. 為每個連線到 Greengrass 核心的裝置建立裝置憑證、金鑰配對和 AWS IoT 原則。

AWS IoT Greengrass 核心安全性主體

Greengrass 核心使用下列安全性主體:用 AWS IoT 戶端、本機 MQTT 伺服器和本機密碼管理員。這些主體的組態會存放在 config.json 組態檔案的 crypto 物件中。如需詳細資訊,請參閱 AWS IoT Greengrass 核心組態檔案

此組態包含主體元件針對身分驗證及加密使用的私有金鑰的路徑。 AWS IoT Greengrass 支援兩個模式的私有金鑰儲存:以硬體為基礎或以檔案系統為基礎 (預設值)。如需在硬體安全模組上存放金鑰的詳細資訊,請參閱硬體安全整合

AWS IoT 客戶端

AWS IoT 客戶端(IoT 客戶端)管理 Greengrass 核心和. AWS IoT Core AWS IoT Greengrass 建立此通訊的 TLS 連線時,會使用具有公開金鑰和私密金鑰的 X.509 憑證來進行相互驗證。如需詳細資訊,請參閱 X.509 憑證和AWS IoT Core開發人員指南 AWS IoT Core中的。

IoT 用戶端支援 RSA 和 EC 憑證和金鑰。憑證和私有金鑰路徑會在 config.json 中為 IoTCertificate 主體指定。

MQTT 伺服器

本機 MQTT 伺服器會透過區域網路管理 Greengrass 核心與群組中用戶端裝置之間的通訊。 AWS IoT Greengrass 建立此通訊的 TLS 連線時,會使用具有公開金鑰和私密金鑰的 X.509 憑證來進行相互驗證。

依預設, AWS IoT Greengrass 會為您產生 RSA 私密金鑰。若要將核心設定為使用不同的私有金鑰,您必須在 config.json 中提供 MQTTServerCertificate 主體的金鑰路徑。您必須負責輪換客戶提供的金鑰。

私有金鑰支援
RSA 金鑰 EC 金鑰
Key type 支援 支援
重要參數 最小 2048 位元長度 NIST P-256 或 NIST P-384 曲線
磁碟格式 PKCS#1、PKCS#8 SECG1、PKCS#8
最低 GGC 版本
  • 使用預設 RSA 金鑰:1.0

  • 指定 RSA 金鑰:1.7

  • 指定 EC 金鑰:1.9

私有金鑰的組態會決定相關的程序。如需 Greengrass Core 支援做為伺服器的密碼套件的清單,請參閱 TLS 密碼套件支援

如果未指定私有金鑰 (預設值)
  • AWS IoT Greengrass 根據您的旋轉設定旋轉按鍵。

  • 核心會產生 RSA 金鑰,它用來產生憑證。

  • MQTT 伺服器憑證具有一個 RSA 公開金鑰和 SHA-256 RSA 簽章。

如果指定了 RSA 私鑰(需要 GGC v1.7 或更高版本)
  • 您需負責輪換金鑰。

  • 核心會使用指定的金鑰來產生憑證。

  • RSA 金鑰的長度必須至少為 2048 個位元。

  • MQTT 伺服器憑證具有一個 RSA 公開金鑰和 SHA-256 RSA 簽章。

如果指定了 EC 私鑰(需要 GGC v1.9 或更高版本)
  • 您需負責輪換金鑰。

  • 核心會使用指定的金鑰來產生憑證。

  • EC 私有金鑰必須使用 NIST P-256 或 NIST P-384 曲線。

  • MQTT 伺服器憑證具有一個 EC 公開金鑰和 SHA-256 RSA 簽章。

    無論金鑰類型為何,核心呈現的 MQTT 伺服器憑證都有一個 SHA-256 RSA 簽章。因此,用戶端必須支援 SHA-256 RSA 憑證驗證,以與核心建立安全的連線。

Secrets Manager

本機密碼管理員會安全地管理您在其中建立的密碼的本機副本 AWS Secrets Manager。它使用私有金鑰來保護用於加密密碼的資料金鑰。如需詳細資訊,請參閱 將私密部署至 AWS IoT Greengrass 核心

預設會使用 IoT 用戶端私有金鑰,但您可以在 config.jsonSecretsManager 主體指定不同的私有金鑰。僅支援 RSA 金鑰類型。如需詳細資訊,請參閱 指定用於秘密加密的私有金鑰

注意

目前,在使用硬體式私密金鑰時,僅 AWS IoT Greengrass 支援 PKCS #1 v1.5 填補機制,用於加密和解密本機密碼。如果您按照供應商提供的指示手動產生硬體式私密金鑰,請務必選擇 PKCS #1 v1.5。 AWS IoT Greengrass 不支援最佳非對稱加密填補 (OAEP)。

私有金鑰支援
RSA 金鑰 EC 金鑰
Key type 支援 不支援
重要參數 最小 2048 位元長度 不適用
磁碟格式 PKCS#1、PKCS#8 不適用
最低 GGC 版本 1.7 不適用

MQTT 簡訊工作流程中的受管訂閱

AWS IoT Greengrass 使用訂閱資料表來定義如何在 Greengrass 群組中的用戶端裝置、函數和連接器之間交換 MQTT 訊息,以及與 AWS IoT Core 或本機陰影服務交換。每個訂閱都會指定傳送或接收郵件的來源、目標和 MQTT 主題 (或主旨)。 AWS IoT Greengrass 只有在已定義對應的訂閱時,才允許將訊息從來源傳送至目標。

訂閱只會定義單向的訊息流程,從來源到目標。若要支援雙向訊息交換,您必須建立兩個訂閱,每個方向各一個。

TLS 密碼套件支援

AWS IoT Greengrass 使用 AWS IoT Core 傳輸安全性模型,透過使用 TLS 加密套件來加密與雲端的通訊。此外,靜態 (在雲端) 時, AWS IoT Greengrass 資料也會加密。如需有關 AWS IoT Core 傳輸安全性和支援的加密套件的詳細資訊,請參閱AWS IoT Core 開發人員指南中的傳輸安全性

支援用於本機網路通訊的密碼套件

與此相反 AWS IoT Core, AWS IoT Greengrass 核心支援下列用於憑證簽署演算法的本機網路 TLS 密碼套件。於檔案系統上存放私有金鑰時,支援所有這些加密套件。當核心設定為使用硬體安全模組 (HSM) 時,支援一個子集。如需詳細資訊,請參閱 AWS IoT Greengrass 核心安全性主體硬體安全整合。此表格也包含支援所需的最低 AWS IoT Greengrass Core 軟體版本。

加密 HSM 支援 最低 GGC 版本
TLSv1.2 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 支援 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 支援 1.0
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 支援 1.0
TLS_RSA_WITH_AES_128_CBC_SHA 不支援 1.0
TLS_RSA_WITH_AES_128_GCM_SHA256 不支援 1.0
TLS_RSA_WITH_AES_256_CBC_SHA 不支援 1.0
TLS_RSA_WITH_AES_256_GCM_SHA384 不支援 1.0
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 支援 1.9
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 支援 1.9
TLSv1.1 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 支援 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 支援 1.0
TLS_RSA_WITH_AES_128_CBC_SHA 不支援 1.0
TLS_RSA_WITH_AES_256_CBC_SHA 不支援 1.0
TLSv1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 支援 1.0
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 支援 1.0
TLS_RSA_WITH_AES_128_CBC_SHA 不支援 1.0
TLS_RSA_WITH_AES_256_CBC_SHA 不支援 1.0