

支援終止通知：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)。

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

# 如何建立秘密資源 (主控台)
<a name="secrets-console"></a>

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

本教學課程說明如何使用 AWS 管理主控台 將*秘密資源*新增至 Greengrass 群組。秘密資源是來自 秘密的參考 AWS Secrets Manager。如需詳細資訊，請參閱[將秘密部署到 AWS IoT Greengrass 核心](secrets.md)。

在 AWS IoT Greengrass 核心裝置上，連接器和 Lambda 函數可以使用秘密資源來驗證 服務和應用程式，而無需硬式編碼密碼、字符或其他登入資料。

在本教學課程中，您會從在 AWS Secrets Manager 主控台中建立秘密開始。然後，在 AWS IoT Greengrass 主控台中，您可以從群組的資源頁面將秘密**資源**新增至 Greengrass 群組。此秘密資源參考 Secrets Manager 秘密。稍後，您將秘密資源連接到 Lambda 函數，這可讓函數取得本機秘密的值。

**注意**  
或者，主控台可讓您在設定連接器或 Lambda 函數時建立秘密和秘密資源。您可以從連接器**的設定參數**頁面或 Lambda 函數**的資源**頁面執行此操作。  
只有包含私密參數的連接器才能存取私密。如需示範 Twilio Notifications 連接器如何使用本機儲存的身分驗證字符的教學課程，請參閱 [Greengrass 連接器入門 (主控台)](connectors-console.md)。

本教學課程所述以下高階執行步驟：

1. [建立 Secrets Manager 秘密](#secrets-console-create-secret)

1. [將私密資源新增至群組](#secrets-console-create-resource)

1. [建立 Lambda 函數部署套件](#secrets-console-create-deployment-package)

1. [建立 Lambda 函式](#secrets-console-create-function)

1. [新增 函數至群組](#secrets-console-create-gg-function)

1. [將秘密資源連接到函數](#secrets-console-affiliate-gg-function)

1. [新增訂閱到群組](#secrets-console-create-subscription)

1. [部署群組](#secrets-console-create-deployment)

1. [測試 Lambda 函數](#secrets-console-test-solution)

此教學課程需約 20 分鐘完成。

## 先決條件
<a name="secrets-console-prerequisites"></a>

為完成此教學課程您需要：
+ Greengrass 群組和 Greengrass 核心 (1.7 版或更新版本）。若要了解如何建立 Greengrass 群組或核心，請參閱 [入門 AWS IoT Greengrass](gg-gs.md)。入門教學課程也包含安裝 AWS IoT Greengrass 核心軟體的步驟。
+ AWS IoT Greengrass 必須設定為支援本機秘密。如需詳細資訊，請參閱[秘密要求](secrets.md#secrets-reqs)。
**注意**  
此要求包括允許存取您的 Secrets Manager 秘密。如果您使用預設 Greengrass 服務角色，Greengrass 有權取得名稱開頭為 *greengrass-* 的秘密值。
+ 若要取得本機秘密的值，使用者定義的 Lambda 函數必須使用 AWS IoT Greengrass Core SDK v1.3.0 或更新版本。

## 步驟 1：建立 Secrets Manager 秘密
<a name="secrets-console-create-secret"></a>

在此步驟中，您會使用 AWS Secrets Manager 主控台來建立秘密。

1. <a name="create-secret-step-signin"></a>登入 [AWS Secrets Manager 主控台](https://console.aws.amazon.com/secretsmanager/)。
**注意**  
如需此程序的詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[步驟 1：建立和存放您的秘密 AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html)。

1. <a name="create-secret-step-create"></a>選擇**儲存新機密**。

1. <a name="create-secret-step-othertype"></a>在**選擇秘密類型**下，選擇**其他類型的秘密**。

1. 在 **Specify the key/value pairs to be stored for this secret (指定此秘密要儲存的金鑰/數值組)** 下：
   + 在 **Key** (索引鍵) 欄位，輸入 **test**。
   + 針對**數值**，輸入 **abcdefghi**。

1. <a name="create-secret-step-encryption"></a>保持選取加密金鑰的 **aws/secretsmanager**，然後選擇**下一步**。
**注意**  
 AWS KMS 如果您使用 Secrets Manager 在帳戶中建立的預設 AWS 受管金鑰，則 不會向您收費。

1. 針對 **Secret name (私密名稱)**，輸入 **greengrass-TestSecret**，然後選擇 **Next (下一步)**。
**注意**  
根據預設，Greengrass 服務角色允許 AWS IoT Greengrass 取得名稱開頭為 *greengrass-* 的秘密值。如需詳細資訊，請參閱[私密需求](secrets.md#secrets-reqs)。

1. <a name="create-secret-step-rotation"></a>本教學課程不需要輪換，因此請選擇停用自動輪換，然後選擇**下一步**。

1. <a name="create-secret-step-review"></a>在 **Review (檢閱)** 頁面上，檢閱設定，然後選擇 **Store (儲存)**。

   接著，您可以在 Greengrass 群組中建立一個參考私密的私密資源。

## 步驟 2：將私密資源新增至 Greengrass 群組
<a name="secrets-console-create-resource"></a>

在此步驟中，您會設定參考 Secrets Manager 秘密的群組資源。

1. <a name="console-gg-groups"></a>在 AWS IoT 主控台導覽窗格的**管理**下，展開 **Greengrass 裝置**，然後選擇**群組 (V1)**。

1. <a name="create-secret-resource-step-choosegroup"></a>選擇您要將私密資源新增至其中的群組。

1. <a name="create-secret-resource-step-secretstab"></a>在群組組態頁面上，選擇**資源**索引標籤，然後向下捲動至**秘密**區段。**秘密**區段會顯示屬於 群組的秘密資源。您可以從本節新增、編輯和移除秘密資源。
**注意**  
或者，主控台可讓您在設定連接器或 Lambda 函數時建立秘密和秘密資源。您可以從連接器**的設定參數**頁面或 Lambda 函數**的資源**頁面執行此操作。

1. <a name="create-secret-resource-step-addsecretresource"></a>在**秘密**區段下選擇**新增**。

1. 在**新增秘密資源**頁面上，**MyTestSecret**輸入**資源名稱**。

1. 在**秘密**下，選擇 **greengrass-TestSecret**。

1. <a name="create-secret-resource-step-selectlabels"></a>在**選取標籤 （選用）** 區段中，AWSCURRENT 預備標籤代表秘密的最新版本。此標籤一律包含在私密資源中。
**注意**  
本教學課程僅需要 AWSCURRENT 標籤。您可以選擇性地包含 Lambda 函數或連接器所需的標籤。

1. 選擇 **Add resource (新增資源)**。

## 步驟 3：建立 Lambda 函數部署套件
<a name="secrets-console-create-deployment-package"></a>

若要建立 Lambda 函數，您必須先建立包含函數程式碼和相依性的 Lambda 函數*部署套件*。Greengrass Lambda 函數需要 [AWS IoT Greengrass 核心 SDK](lambda-functions.md#lambda-sdks-core) 來處理任務，例如與核心環境中的 MQTT 訊息通訊，以及存取本機秘密。本教學課程會建立 Python 函數，因此您可以在部署套件中使用 SDK 的 Python 版本。

**注意**  
若要取得本機秘密的值，使用者定義的 Lambda 函數必須使用 AWS IoT Greengrass Core SDK v1.3.0 或更新版本。

1. <a name="download-ggc-sdk"></a> 從[AWS IoT Greengrass 核心開發套件](what-is-gg.md#gg-core-sdk-download)下載頁面，將適用於 Python AWS IoT Greengrass 的核心開發套件下載至您的電腦。

1. <a name="unzip-ggc-sdk"></a>解壓縮下載的封裝，以取得軟體開發套件。SDK 為 `greengrasssdk` 資料夾。

1. 將以下 Python 程式碼函數儲存在名為 `secret_test.py` 的本機檔案中。

   ```
   import greengrasssdk
   
   secrets_client = greengrasssdk.client("secretsmanager")
   iot_client = greengrasssdk.client("iot-data")
   secret_name = "greengrass-TestSecret"
   send_topic = "secrets/output"
   
   
   def function_handler(event, context):
       """
       Gets a secret and publishes a message to indicate whether the secret was
       successfully retrieved.
       """
       response = secrets_client.get_secret_value(SecretId=secret_name)
       secret_value = response.get("SecretString")
       message = (
           f"Failed to retrieve secret {secret_name}."
           if secret_value is None
           else f"Successfully retrieved secret {secret_name}."
       )
       iot_client.publish(topic=send_topic, payload=message)
       print("Published: " + message)
   ```

   `get_secret_value` 函數支援 `SecretId`值的 Secrets Manager 秘密名稱或 ARN。此範例使用私密名稱。在此範例秘密中， AWS IoT Greengrass 會傳回鍵/值對：`{"test":"abcdefghi"}`。
**重要**  
請確定您的使用者定義的 Lambda 函數安全地處理秘密，而且不會記錄存放在秘密中的任何敏感資料。如需詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[降低記錄和偵錯 Lambda 函數的風險](https://docs.aws.amazon.com/secretsmanager/latest/userguide/best-practices.html#best-practice_lamda-debug-statements)。雖然本文件特別參考輪換函數，但建議也適用於 Greengrass Lambda 函數。

1. 將下列項目壓縮成名為 `secret_test_python.zip` 的檔案。當您建立 ZIP 檔案時，只包含程式碼及其依存項目，而不包含資料夾。
   + **secret\$1test.py**。應用程式邏輯。
   + **greengrasssdk**。所有 Python Greengrass Lambda 函數所需的程式庫。

   這是您的 Lambda 函數部署套件。

## 步驟 4：建立 Lambda 函數
<a name="secrets-console-create-function"></a>

在此步驟中，您會使用 AWS Lambda 主控台來建立 Lambda 函數，並將其設定為使用您的部署套件。然後，您會發佈函數版本和建立別名。

1. 首先，建立 Lambda 函數。

   1. <a name="lambda-console-open"></a>在 中 AWS 管理主控台，選擇**服務**，然後開啟 AWS Lambda 主控台。

   1. <a name="lambda-console-create-function"></a>選擇**建立函數**，然後選擇**從頭開始撰寫**。

   1. 在 **Basic information (基本資訊)** 區段中，使用下列值：
      + 針對**函數名稱**，請輸入 **SecretTest**。
      + 針對**執行期**，選擇 **Python 3.7**。
      + 對於**許可**，請保留預設設定。這會建立授予基本 Lambda 許可的執行角色。不會使用此角色 AWS IoT Greengrass。

   1. <a name="lambda-console-save-function"></a>請在頁面底部，選擇**建立函式**。

1. 接著，註冊處理常式並上傳您的 Lambda 函數部署套件。

   1. <a name="lambda-console-upload"></a>在**程式碼**索引標籤的**程式碼來源**下，選擇**上傳來源**。從下拉式清單中，選擇 **.zip 檔案**。  
![\[從下拉式清單上傳，並反白顯示 .zip 檔案。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. 選擇**上傳**，然後選擇您的`secret_test_python.zip`部署套件。然後選擇 **Save (儲存)**。

   1. <a name="lambda-console-runtime-settings-para"></a>在函數的**程式碼**索引標籤的**執行時間設定**下，選擇**編輯**，然後輸入下列值。
      + 針對**執行期**，選擇 **Python 3.7**。
      + 對於 **Handler (處理常式)**，輸入 **secret\$1test.function\$1handler**。

   1. <a name="lambda-console-save-config"></a>選擇**儲存**。
**注意**  
 AWS Lambda 主控台上的**測試**按鈕不適用於此函數。 AWS IoT Greengrass 核心 SDK 不包含在 AWS Lambda 主控台中獨立執行 Greengrass Lambda 函數所需的模組。這些模組 （例如 `greengrass_common`) 會在部署到您的 Greengrass 核心之後提供給函數。

1. 現在，發佈 Lambda 函數的第一個版本，並為[該版本建立別名](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)。
**注意**  
Greengrass 群組可以依別名 （建議） 或版本參考 Lambda 函數。使用別名可讓您更輕鬆地管理程式碼更新，因為您不必在更新函數程式碼時變更訂閱資料表或群組定義。反之，您只需將別名指向新的函數版本。

   1. <a name="shared-publish-function-version"></a>請從**操作**功能表中選擇**發行新版本**。

   1. <a name="shared-publish-function-version-description"></a>針對 **Version description (版本描述)**，輸入 **First version**，然後選擇 **Publish (發佈)**。

   1. 在 **SecretTest: 1** 組態頁面上，從 **Actions (動作)** 功能表中選擇 **Create alias (建立別名)**。

   1. 在**建立警示**頁面上使用下列值：
      + 對於**名稱**，輸入 **GG\$1SecretTest**。
      + 對於**版本**，選擇 **1**。
**注意**  
AWS IoT Greengrass 不支援 **\$1LATEST** 版本的 Lambda 別名。

   1. 選擇**建立**。

現在您已準備好將 Lambda 函數新增至 Greengrass 群組，並連接秘密資源。

## 步驟 5：將 Lambda 函數新增至 Greengrass 群組
<a name="secrets-console-create-gg-function"></a>

在此步驟中，您將 Lambda 函數新增至 AWS IoT 主控台中的 Greengrass 群組。

1. <a name="choose-add-lambda"></a>在群組組態頁面上，選擇 **Lambda 函數**索引標籤。

1. 在**我的 Lambda 函數**區段下，選擇**新增**。

1. 針對 **Lambda 函數**，選擇 **SecretTest**。

1. 針對 **Lambda 函數版本**，選擇您發佈的版本別名。

接著，設定 Lambda 函數的生命週期。

1. 在 **Lambda 函數組態**區段中，進行下列更新。
**注意**  
 建議您在沒有容器化的情況下執行 Lambda 函數，除非您的業務案例需要。這有助於啟用裝置 GPU 和攝影機的存取，而無需設定裝置資源。如果您在沒有容器化的情況下執行 ，您還必須授予 AWS IoT Greengrass Lambda 函數的根存取權。

   1. **若要在沒有容器化的情況下執行 ：**
      + 針對**系統使用者和群組**，選擇 **Another user ID/group ID**。針對**系統使用者 ID**，輸入 **0**。針對**系統群組 ID**，輸入 **0**。

        這可讓您的 Lambda 函數以根執行。如需以根身分執行的詳細資訊，請參閱 [為群組中的 Lambda 函數設定預設存取身分](lambda-group-config.md#lambda-access-identity-groupsettings)。
**提示**  
您也必須更新 `config.json` 檔案，以授予 Lambda 函數的根存取權。如需此程序，請參閱 [執行 Lambda 函數做為根](lambda-group-config.md#lambda-running-as-root)。
      + 針對 **Lambda 函數容器化**，選擇**無容器**。

        如需在沒有容器化的情況下執行 的詳細資訊，請參閱 [選擇 Lambda 函數容器化時的考量事項](lambda-group-config.md#lambda-containerization-considerations)。
      + 針對 **Timeout (逾時)**，輸入 **10 seconds**。
      + 針對**固定**，選擇 **True**。

        如需詳細資訊，請參閱[Greengrass Lambda 函數的生命週期組態](lambda-functions.md#lambda-lifecycle)。
      + 在**其他參數**下，針對 **/sys 目錄的讀取存取權**，選擇**已啟用**。

   1.  **改為在容器化模式下執行：**
**注意**  
除非您的商業案例需要，否則我們不建議在容器化模式下執行。
      + 針對**系統使用者和群組**，選擇**使用群組預設值**。
      + 針對 **Lambda 函數容器化**，選擇**使用群組預設值**。
      + 針對 **Memory limit (記憶體限制)**，輸入 **1024 MB**。
      + 針對 **Timeout (逾時)**，輸入 **10 seconds**。
      + 針對**固定**，選擇 **True**。

        如需詳細資訊，請參閱[Greengrass Lambda 函數的生命週期組態](lambda-functions.md#lambda-lifecycle)。
      + 在**其他參數**下，針對 **/sys 目錄的讀取存取權**，選擇**已啟用**。

1.  選擇**新增 Lambda 函數**。

接著，將秘密資源與 函數建立關聯。

## 步驟 6：將秘密資源連接至 Lambda 函數
<a name="secrets-console-affiliate-gg-function"></a>

在此步驟中，您將秘密資源與 Greengrass 群組中的 Lambda 函數建立關聯。這會將資源與 函數建立關聯，讓函數取得本機秘密的值。

1. 在群組組態頁面上，選擇 **Lambda 函數**索引標籤。

1. 選擇 **SecretTest** 函數。

1. 在函數的詳細資訊頁面上，選擇**資源**。

1. 捲動至**秘密**區段，然後選擇**關聯**。

1. 選擇 **MyTestSecret**，然後選擇**關聯**。

## 步驟 7：將訂閱新增到 Greengrass 群組
<a name="secrets-console-create-subscription"></a>

在此步驟中，您可以新增允許 AWS IoT 和 Lambda 函數交換訊息的訂閱。一個訂閱允許 AWS IoT 叫用函數，一個則允許函數將輸出資料傳送到其中 AWS IoT。

1. <a name="shared-subscriptions-addsubscription"></a>在群組組態頁面上，選擇**訂閱**索引標籤，然後選擇**新增訂閱**。

1. 建立允許 AWS IoT 將訊息發佈至 函數的訂閱。

   在群組組態頁面上，選擇**訂閱**索引標籤，然後選擇**新增訂閱**。

1. 在**建立訂閱**頁面上，設定來源和目標，如下所示：

   1. 在**來源類型**中，選擇 **Lambda 函數**，然後選擇 **IoT Cloud**。

   1. 在**目標類型**中，選擇**服務**，然後選擇 **SecretTest**。

   1. 在**主題篩選條件**中，輸入 **secrets/input**，然後選擇**建立訂閱**。

1. 新增第二個訂閱。選擇**訂閱**索引標籤，選擇**新增訂閱**，並設定來源和目標，如下所示：

   1. 在**來源類型**中，選擇**服務**，然後選擇 **SecretTest**。

   1. 在**目標類型**中，選擇 **Lambda 函數**，然後選擇 **IoT Cloud**。

   1. 在**主題篩選條件**中，輸入 **secrets/output**，然後選擇**建立訂閱**。

## 步驟 8：部署 Greengrass 群組
<a name="secrets-console-create-deployment"></a>

將群組部署到核心裝置。在部署期間， 會從 Secrets Manager AWS IoT Greengrass 擷取秘密的值，並在核心上建立本機的加密複本。

1. <a name="shared-deploy-group-checkggc"></a>確定 AWS IoT Greengrass 核心正在執行。如果需要，請在您的 Raspberry Pi 終端機執行以下命令。

   1. 檢查精靈是否有在運作：

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      若輸出的 `root` 含有 `/greengrass/ggc/packages/ggc-version/bin/daemon` 項目，則精靈有在運作。
**注意**  
路徑中的版本取決於核心裝置上安裝的核心 AWS IoT Greengrass 軟體版本。

   1. 若要啟動協助程式：

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="shared-deploy-group-deploy"></a>在群組組態頁面上，選擇**部署**。

1. <a name="shared-deploy-group-ipconfig"></a>

   1. 在 **Lambda 函數**索引標籤**的系統 Lambda 函數**區段下，選取 **IP 偵測器**，然後選擇**編輯**。

   1. 在**編輯 IP 偵測器設定**對話方塊中，選取**自動偵測和覆寫 MQTT 代理程式端點**。

   1. 選擇**儲存**。

      這可讓裝置自動取得核心的連接資訊，例如 IP 位址、DNS、連接埠編號。建議自動偵測，但 AWS IoT Greengrass 也支援手動指定的端點。只會在第一次部署群組時收到復原方法的提示。
**注意**  
如果出現提示，請授予許可來建立 [Greengrass 服務角色](service-role.md)，並將其與目前 AWS 帳戶 中的 建立關聯 AWS 區域。此角色允許 AWS IoT Greengrass 存取 AWS 服務中的資源。

      此**部署**頁面會顯示部署時間戳記、版本 ID 和狀態。完成後，部署顯示的狀態應為**已完成**。

      如需故障診斷協助，請參閱[故障診斷 AWS IoT Greengrass](gg-troubleshooting.md)。

## 測試 Lambda 函數
<a name="secrets-console-test-solution"></a>

1. <a name="choose-test-page"></a>在 AWS IoT 主控台首頁上，選擇**測試**。

1. 對於**訂閱主題**，請使用下列值，然後選擇**訂閱**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/secrets-console.html)

1. 針對**發佈至主題**，請使用下列值，然後選擇**發佈**以叫用函數。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/secrets-console.html)

   如果成功，函數會發佈「Success (成功)」訊息。

## 另請參閱
<a name="secrets-console-see-also"></a>
+ [將秘密部署到 AWS IoT Greengrass 核心](secrets.md)