將私密部署至 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核心 v1.7 版及更新版本。

AWS IoT Greengrass 可讓您從 Greengrass 裝置向服務和應用程式進行身份驗證,而無需將密碼、字符或其他秘密寫入程式碼。

AWS Secrets Manager是一項服務,您可以在雲端中安全地儲存和管理私密。AWS IoT Greengrass將 Secrets Manager 擴展到 Greengrass 核心設備,所以你的連接器和 Lambda 函數可以使用本機私密,與服務和應用程式互動。例如,Twilio 通知連接器會使用本機儲存的身分驗證字符。

若要將私密整合到 Greengrass 群組,您可以建立一個參考 Secrets Manager 私密的群組資源。此私密資源透過 ARN 參考雲端私密。若要了解如何建立、管理及使用秘密資源,請參閱使用秘密資源

AWS IoT Greengrass 會在您的私密傳輸和靜態時將其加密。在組部署期間,AWS IoT Greengrass會從 Secret Manager 取得私密,並在 Greengrass 核心上建立本機加密複本。在 Secret Manager 中輪換雲端私密之後,請重新部署該組,以將更新值傳播至核心。

下圖顯示將私密部署至核心的高階程序。私密是在傳輸和靜態時加密。

AWS IoT Greengrass從AWS Secrets Manager,並將其當做私密資源部署至核心設備,在這裏它可供連接器和 Lambda 函數使用。

在本機使用 AWS IoT Greengrass 存放您的私密可提供下列優勢:

  • 從程式碼分離 (而非寫入程式碼內)。此舉支援集中管理的登入資料,並可協助保護敏感資料免於洩露的風險。

  • 適用於離線案例。連接器和函數可以在與網際網路中斷連線時安全地存取本機服務和軟體。

  • 控制私密的存取 只有群組中授權的連接器和函數才能存取您的私密。AWS IoT Greengrass 會使用私有金鑰加密來保護您的私密。私密是在傳輸和靜態時加密。如需詳細資訊,請參閱 私密加密

  • 控制輪換。在 Secret Manager 中輪換您的私密之後,請重新部署 Greengrass (Greengrass) 組以更新您私密的本機副本。如需詳細資訊,請參閱 建立和管理秘密

    重要

    輪換雲端版本後,AWS IoT Greengrass 不會自動更新本機秘密的值。若要更新本機的值,您必須重新部署群組。

私密加密

AWS IoT Greengrass 會加密傳輸中私密和靜態私密。

重要

確保您的用户定義的 Lambda 函數安全地處理祕密,並且不記錄存儲在密碼中的任何敏感數據。如需詳細資訊,請參閱「」降低記錄風險並對 Lambda 函式進行除錯中的AWS Secrets Manager使用者指南。雖然本文檔特別提到旋轉功能,但該建議也適用於 Greengrass Lambda 函數。

傳輸中加密

AWS IoT Greengrass 使用 Transport Layer Security (TLS) 透過網際網路和本機網路加密所有通訊。這樣可保護傳輸中的私密,此情況是在從 Secret Manager 中檢索私密並部署到核心時發生。如需支援的 TLS 密碼套件,請參閱TLS 密碼套件支援

靜態加密

AWS IoT Greengrass 使用 config.json 中指定的私有金鑰,加密核心上存放的秘密。基於這個原因,安全儲存私有金鑰對於保護本機秘密來說非常重要。在 AWS 共同的責任模型中,保證在核心裝置上安全存放私有金鑰是客戶的責任。

AWS IoT Greengrass 支援兩種私有金鑰儲存模式:

  • 使用硬體安全模組。如需詳細資訊,請參閱 硬體安全整合

    注意

    目前,AWS IoT Greengrass僅支援PKCS #1 v1.5填充機制,用於在使用基於硬件的私鑰時對本地機密進行加密和解密。如果您按照供應商提供的説明手動生成基於硬件的私鑰,請務必選擇 PKCS #1 v1.5。AWS IoT Greengrass不支持最佳非對稱加密填充 (OAEP)。

  • 使用檔案系統許可 (預設)。

私有金鑰是用來保護資料金鑰,這是用來加密本機私密。每次部署群組,就會輪換資料金鑰。

所以此AWS IoT Greengrass核心是可以存取私有金鑰的唯一實體。隸屬於私密資源的 Greengrass 連接器或 Lambda 函數會從核心取得私密的值。

要求

這些是本機私密支援的需求:

  • 您必須使用AWS IoT Greengrass核心 v1.7 版或更新版本。

  • 要獲取本地密文的值,用户定義的 Lambda 函數必須使用AWS IoT Greengrass核心 SDK v1.3.0 或更新版本。

  • 您必須在 Greengrass 組態檔案中指定用於本機私密加密的私有金鑰。根據預設,AWS IoT Greengrass 會使用檔案系統中存放的核心私有金鑰。若要提供自己的私有金鑰,請參閱指定用於秘密加密的私有金鑰。僅支援 RSA 金鑰類型。

    注意

    目前,AWS IoT Greengrass僅支援PKCS #1 v1.5填充機制,用於在使用基於硬件的私鑰時對本地機密進行加密和解密。如果您按照供應商提供的説明手動生成基於硬件的私鑰,請務必選擇 PKCS #1 v1.5。AWS IoT Greengrass不支持最佳非對稱加密填充 (OAEP)。

  • 必須授予 AWS IoT Greengrass 許可,其才能取得您的私密值。這可讓 AWS IoT Greengrass 在群組部署期間擷取這些值。如果您使用的是預設 Greengrass 服務角色,則 AWS IoT Greengrass 已可存取名稱開頭為 greengrass- 的秘密。若要自訂存取,請參閱允許 AWS IoT Greengrass 取得秘密值

    注意

    我們建議您使用這個命名慣例來識別允許 AWS IoT Greengrass 存取的私密,即使您自訂許可也一樣。主控台會使用不同的許可來讀取您的私密,所以您可以在主控台中選取 AWS IoT Greengrass 無權擷取的私密。使用命名慣例可協助避免許可衝突,而此衝突會造成部署錯誤。

指定用於秘密加密的私有金鑰

在此程序中,您會提供用於本機密碼加密的私有金鑰路徑。這必須是具有的最小長度為 2048 位元的 RSA 金鑰。如需使用私有金鑰的詳細資訊,AWS IoT Greengrass核心,請參AWS IoT Greengrass 核心安全性主體

AWS IoT Greengrass 支援兩個模式的私有金鑰儲存:以硬體為基礎或以檔案系統為基礎 (預設值)。如需詳細資訊,請參閱 私密加密

只在您想要變更預設組態時,才遵循此程序,此舉會使用檔案系統中的核心私密金鑰。撰寫這些步驟時假設您已建立群組和核心,如入門教學課程的單元 2 中所述。

  1. 開啟位於 /greengrass-root/config 目錄的 config.json 檔案。

    注意

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

  2. crypto.principals.SecretsManager 物件中,對於 privateKeyPath 屬性,輸入私有金鑰的路徑:

    • 如果您的私密金鑰儲存在檔案系統,請指定 金鑰的絕對路徑。例如:

      "SecretsManager" : { "privateKeyPath" : "file:///somepath/hash.private.key" }
    • 如果您的私有金鑰存放在硬體安全模組 (HSM) 中,請指定使用 RFC 7512 PKCS#11 URI 配置的路徑。例如:

      "SecretsManager" : { "privateKeyPath" : "pkcs11:object=private-key-label;type=private" }

      如需詳細資訊,請參閱 AWS IoT Greengrass 核心的硬體安全組態

      注意

      目前,AWS IoT Greengrass僅支援PKCS #1 v1.5填充機制,用於在使用基於硬件的私鑰時對本地機密進行加密和解密。如果您按照供應商提供的説明手動生成基於硬件的私鑰,請務必選擇 PKCS #1 v1.5。AWS IoT Greengrass不支持最佳非對稱加密填充 (OAEP)。

允許 AWS IoT Greengrass 取得秘密值

在此步驟中,您會將內嵌政策新增至允許 AWS IoT Greengrass 取得您的私密值的 Greengrass 服務角色。

僅遵循此程序如果你想授予AWS IoT Greengrass自定義權限,或者如果您的 Greengrass 服務角色不包含AWSGreengrassResourceAccessRolePolicy受管政策。AWSGreengrassResourceAccessRolePolicy授予對名稱以開頭的密文的訪問權限-

  1. 請執行下列 CLI 命令來取得 Greengrass 服務角色的 ARN:

    aws greengrass get-service-role-for-account --region region

    傳回的 ARN 包含角色名稱。

    { "AssociatedAt": "time-stamp", "RoleArn": "arn:aws:iam::account-id:role/service-role/role-name" }

    您會在下列步驟中使用 ARN 或名稱。

  2. 新增允許 secretsmanager:GetSecretValue 動作的內嵌政策。如需說明,請參閱「」新增和移除 IAM 政策中的IAM User Guide

    您可以明確地列出私密或使用萬用字元 * 命名機制,來授予精細的存取,或者您可以授予有條件存取版本控制或已標記私密的權限。例如,下列政策允許 AWS IoT Greengrass 只能讀取指定的私密。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretA-abc", "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretB-xyz" ] } ] }
    注意

    如果您使用客戶管理的 AWS KMS 金鑰來加密秘密,您的 Greengrass 服務角色也須允許 kms:Decrypt 動作。

如需適用於私 Secrets Manager 的 IAM 原則的詳細資訊,請參的驗證與存取控制AWS Secrets Manager您可以在 IAM 策略或祕密策略中使用的操作、資源和上下文密鑰AWS Secrets Manager中的AWS Secrets Manager使用者指南

另請參閱