

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將秘密部署到 AWS IoT Greengrass 核心
<a name="secrets"></a>

此功能適用於 AWS IoT Greengrass Core v1.7 和更新版本。

AWS IoT Greengrass 可讓您使用 Greengrass 裝置的服務和應用程式進行身分驗證，無需硬式編碼密碼、字符或其他秘密。

AWS Secrets Manager 是一項服務，可用來在雲端中安全地存放和管理秘密。 會將 Secrets Manager AWS IoT Greengrass 延伸到 Greengrass 核心裝置，因此您的[連接器](connectors.md)和 Lambda 函數可以使用本機秘密與服務和應用程式互動。例如，Twilio 通知連接器會使用本機儲存的身分驗證字符。

若要將私密整合到 Greengrass 群組，您可以建立一個參考 Secrets Manager 私密的群組資源。此*私密資源*透過 ARN 參考雲端私密。若要了解如何建立、管理及使用秘密資源，請參閱[使用秘密資源](secrets-using.md)。

AWS IoT Greengrass 會在傳輸中和靜態時加密您的秘密。在群組部署期間， 從 Secrets Manager AWS IoT Greengrass 擷取秘密，並在 Greengrass 核心上建立本機的加密複本。在 Secrets Manager 中輪換雲端秘密之後，請重新部署 群組，將更新的值傳播到核心。

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

![\[AWS IoT Greengrass 從 擷取秘密， AWS Secrets Manager 並將其部署為核心裝置的秘密資源，供連接器和 Lambda 函數使用。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/deploy-local-secret.png)


使用 AWS IoT Greengrass 在本機存放秘密可提供下列優點：
+ **從程式碼分離 (而非寫入程式碼內)。**此舉支援集中管理的登入資料，並可協助保護敏感資料免於洩露的風險。
+ **適用於離線案例。**連接器和函數可以在與網際網路中斷連線時安全地存取本機服務和軟體。
+ **控制私密的存取** 只有群組中授權的連接器和函數才能存取您的私密。 AWS IoT Greengrass 會使用私有金鑰加密來保護您的私密。私密是在傳輸和靜態時加密。如需詳細資訊，請參閱[秘密金鑰加密](#secrets-encryption)。
+ **控制輪換。**在 Secrets Manager 中輪換秘密之後，請重新部署 Greengrass 群組以更新秘密的本機複本。如需詳細資訊，請參閱[建立和管理秘密](secrets-using.md#secrets-create-manage)。
**重要**  
AWS IoT Greengrass 在輪換雲端版本之後， 不會自動更新本機秘密的值。若要更新本機的值，您必須重新部署群組。

## 秘密金鑰加密
<a name="secrets-encryption"></a>

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

**重要**  
請確定您的使用者定義的 Lambda 函數安全地處理秘密，而且不會記錄存放在秘密中的任何敏感資料。如需詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[減輕記錄和偵錯 Lambda 函數的風險](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)。雖然本文件特別參考輪換函數，但建議也適用於 Greengrass Lambda 函數。

**傳輸中加密**  
AWS IoT Greengrass 使用 Transport Layer Security (TLS) 來加密透過網際網路和本機網路的所有通訊。這可保護傳輸中的秘密，這發生在從 Secrets Manager 擷取秘密並部署到核心時。如需支援的 TLS 密碼套件，請參閱[TLS 密碼套件支援](gg-sec.md#gg-cipher-suites)。

**靜態加密**  
AWS IoT Greengrass 使用 中指定的私有金鑰[`config.json`](gg-core.md#config-json)來加密存放在核心上的秘密。基於這個原因，安全儲存私有金鑰對於保護本機秘密來說非常重要。在 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)中，客戶有責任保證在核心裝置上安全儲存私有金鑰。  
AWS IoT Greengrass 支援兩種私有金鑰儲存模式：  
+ 使用硬體安全模組。如需詳細資訊，請參閱[硬體安全整合](hardware-security.md)。
**注意**  
目前， 在使用硬體型私有金鑰時，僅 AWS IoT Greengrass 支援用於加密和解密本機秘密的 [PKCS\$11 v1.5 ](https://tools.ietf.org/html/rfc2313)填補機制。如果您遵循廠商提供的指示手動產生硬體型私有金鑰，請務必選擇 PKCS\$11 v1.5. AWS IoT Greengrass doesn 不支援最佳非對稱加密填補 (OAEP)。
+ 使用檔案系統許可 (預設)。
私有金鑰是用來保護資料金鑰，這是用來加密本機私密。每次部署群組，就會輪換資料金鑰。  
 AWS IoT Greengrass 核心是唯一可存取私有金鑰的實體。與秘密資源關聯的 Greengrass 連接器或 Lambda 函數會從核心取得秘密的值。

## 要求
<a name="secrets-reqs"></a>

這些是本機私密支援的需求：
+ 您必須使用 AWS IoT Greengrass Core v1.7 或更新版本。
+ 若要取得本機秘密的值，使用者定義的 Lambda 函數必須使用 AWS IoT Greengrass Core SDK v1.3.0 或更新版本。
+ 您必須在 Greengrass 組態檔案中指定用於本機私密加密的私有金鑰。根據預設， AWS IoT Greengrass 會使用存放在檔案系統中的核心私有金鑰。若要提供自己的私有金鑰，請參閱[指定用於秘密加密的私有金鑰](#secrets-config-private-key)。僅支援 RSA 金鑰類型。
**注意**  
目前， 在使用硬體型私有金鑰時，僅 AWS IoT Greengrass 支援用於加密和解密本機秘密的 [PKCS\$11 v1.5 ](https://tools.ietf.org/html/rfc2313)填補機制。如果您遵循廠商提供的指示手動產生硬體型私有金鑰，請務必選擇 PKCS\$11 v1.5. AWS IoT Greengrass doesn 不支援最佳非對稱加密填補 (OAEP)。
+ AWS IoT Greengrass 必須獲得許可才能取得您的秘密值。這可讓 AWS IoT Greengrass 在群組部署期間擷取值。如果您使用的是預設 Greengrass 服務角色，則 AWS IoT Greengrass 已經可以存取名稱開頭為 *greengrass-* 的秘密。若要自訂存取，請參閱[允許 AWS IoT Greengrass 取得秘密值](#secrets-config-service-role)。
**注意**  
即使您自訂許可，仍建議您使用此命名慣例來識別 AWS IoT Greengrass 允許存取的秘密。主控台會使用不同的許可來讀取您的秘密，因此您可以在主控台中選取 AWS IoT Greengrass 沒有擷取許可的秘密。使用命名慣例可協助避免許可衝突，而此衝突會造成部署錯誤。

## 指定用於秘密加密的私有金鑰
<a name="secrets-config-private-key"></a>

在此程序中，您會提供用於本機密碼加密的私有金鑰路徑。這必須是具有的最小長度為 2048 位元的 RSA 金鑰。如需 AWS IoT Greengrass 核心上使用之私有金鑰的詳細資訊，請參閱 [AWS IoT Greengrass 核心安全主體](gg-sec.md#gg-principals)。

AWS IoT Greengrass 支援兩種私有金鑰儲存模式：硬體型或檔案系統型 （預設）。如需詳細資訊，請參閱[秘密金鑰加密](#secrets-encryption)。

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

1. 開啟位於 `/greengrass-root/config` 目錄的 [`config.json`](gg-core.md#config-json) 檔案。
**注意**  
*greengrass-root* 代表 Core AWS IoT Greengrass 軟體安裝在您裝置上的路徑。通常，這是 `/greengrass` 目錄。

1. 在 `crypto.principals.SecretsManager` 物件中，對於 `privateKeyPath` 屬性，輸入私有金鑰的路徑：
   + 如果您的私密金鑰儲存在檔案系統，請指定 金鑰的絕對路徑。例如：

     ```
     "SecretsManager" : {
       "privateKeyPath" : "file:///somepath/hash.private.key"
     }
     ```
   + 如果您的私有金鑰存放在硬體安全模組 (HSM) 中，請指定使用 [RFC 7512 PKCS\$111](https://tools.ietf.org/html/rfc7512) URI 配置的路徑。例如：

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

     如需詳細資訊，請參閱[AWS IoT Greengrass 核心的硬體安全組態](hardware-security.md#configure-hardware-security)。
**注意**  
目前， 在使用硬體型私有金鑰時，僅 AWS IoT Greengrass 支援用於加密和解密本機秘密的 [PKCS\$11 v1.5 ](https://tools.ietf.org/html/rfc2313)填補機制。如果您遵循廠商提供的指示手動產生硬體型私有金鑰，請務必選擇 PKCS\$11 v1.5. AWS IoT Greengrass doesn 不支援最佳非對稱加密填補 (OAEP)。

## 允許 AWS IoT Greengrass 取得秘密值
<a name="secrets-config-service-role"></a>

在此程序中，您會將內嵌政策新增至允許 AWS IoT Greengrass 取得秘密值的 Greengrass 服務角色。

**只有在您想要將自訂許可授予秘密，或您的 Greengrass 服務角色不包含 受管政策時，才遵循此程序**。 `AWSGreengrassResourceAccessRolePolicy`會授予名稱開頭為 *greengrass-* 的秘密存取權。 AWS IoT Greengrass `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 或名稱。

1. 新增允許 `secretsmanager:GetSecretValue` 動作的內嵌政策。如需說明，請參閱《[IAM 使用者指南》中的新增和移除 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。 **

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

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "secretsmanager:GetSecretValue"
               ],
               "Resource": [
               "arn:aws:secretsmanager:us-east-1:123456789012:secret:greengrass-SecretA-abc",
       "arn:aws:secretsmanager:us-east-1:123456789012:secret:greengrass-SecretB-xyz"
               ]
           }
       ]
   }
   ```

------
**注意**  
如果您使用客戶受管 AWS KMS 金鑰來加密秘密，您的 Greengrass 服務角色也必須允許 `kms:Decrypt`動作。

如需有關 Secrets Manager 的 IAM 政策的詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》[中的您可以在 IAM 政策或 的秘密政策中使用的 和動作、資源和內容金鑰 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_iam-permissions.html)的[身分驗證和存取控制 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html)。

## 另請參閱
<a name="secrets-seealso"></a>
+ *AWS Secrets Manager 《 使用者指南*》中的[什麼是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 
+ [PKCS \$11: RSA Encryption Version 1.5](https://tools.ietf.org/html/rfc2313)