將私密部署至 AWS IoT Greengrass 核心 - AWS IoT Greengrass

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

將私密部署至 AWS IoT Greengrass 核心

只有 AWS IoT Greengrass Core 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 會從 Secrets Manager 擷取秘密,並在 Greengrass 核心上建立本機加密複本。在您輪換 Secrets Manager 中的雲端私密之後,請重新部署群組,以將更新值傳播至核心。

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


            AWS IoT Greengrass 會從 AWS Secrets Manager 擷取私密,並將其當做私密資源部署至核心裝置,在這裡其可供連接器和 Lambda 函數使用。

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

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

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

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

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

    重要

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

私密加密

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

重要

請確定您的使用者定義的 Lambda 函式可安全地處理機密,並且不會記錄機密中存放的任何敏感資料。如需詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的降低記錄風險並對 Lambda 函式進行除錯。雖然本文件專門說明輪換函式,建議事項亦適用 Greengrass Lambda 函式。

傳輸中加密

AWS IoT Greengrass 使用 Transport Layer Security (TLS) 透過網際網路和本機網路加密所有通訊。這樣可保護傳輸中的私密,此情況是在從 Secrets 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 or later。

  • 若要取得本機機密的值,您的使用者定義的 Lambda 函式必須使用 AWS IoT Greengrass Core SDK v1.3.0 or later。

  • 您必須在 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 會授予名稱開頭為 greengrass- 之秘密的存取權。

  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 政策

    您可以明確地列出私密或使用萬用字元 * 命名機制,來授予精細的存取,或者您可以授予有條件存取版本控制或已標記私密的權限。例如,下列政策允許 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 使用者指南 中的AWS Secrets Manager 的身份驗證和存取控制 ,以及您可以在 IAM 政策或私密政策中針對 AWS Secrets Manager 使用的動作、資源和內容

另請參閱