如何建立秘密資源 (主控台) - 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核心 v1.7 及更高版本。

本教學課程顯示如何使用 AWS Management Console,將私密資源新增到 Greengrass 群組。私密資源指的是來自 AWS Secrets Manager 的私密。如需詳細資訊,請參閱將私密部署至 AWS IoT Greengrass 核心

在AWS IoT Greengrass核心裝置上,連接器和 Lambda 函數可以使用秘密資源,透過服務和應用程式進行驗證,而無需對密碼、權杖或其他認證進行硬式編碼。

在本教學中,您首先要在 AWS Secrets Manager 主控台中建立一個秘密。然後,在AWS IoT Greengrass主控台中,您可以從群組的 [資源] 頁面將秘密資源新增至 Greengrass 群組。此秘密資源會參考 Secrets Manager 密碼。稍後,您將秘密資源附加到 Lambda 函數,該函數可讓函數取得本機密碼的值。

注意

或者,控制台可讓您在設定連接器或 Lambda 函數時建立秘密和密碼資源。您可以從連接器的 [設定參數] 頁面或 Lambda 函數的 [資源] 頁面執行此操作。

只有包含私密參數的連接器才能存取私密。如需顯示 Twilio 通知連接器如何使用本機儲存之驗證權杖的教學課程,請參閱。Greengrass 連接器入門 (主控台)

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

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

先決條件

為完成此教學課程您需要:

  • 一個 Greengrass 組和一個 Greengrass 核心(v1.7 或更高版本)。若要了解如何建立 Greengrass 群組或核心,請參閱 開始使用 AWS IoT Greengrass。入門教學課程也包含 AWS IoT Greengrass Core 軟體的安裝步驟。

  • AWS IoT Greengrass 必須設定為支援本機私密。如需詳細資訊,請參閱秘密要求

    注意

    這項要求包括允許存取您的 Secrets Manager 密碼。如果您使用的是預設的 Greengrass 服務角色,Greengrass 有權取得名稱以 greengrass-開頭的密碼值。

  • 若要取得本機密的值,您使用者定義的 Lambda 函數必須使用AWS IoT Greengrass核心 SDK v1.3.0 或更新版本。

步驟 1:建立密碼管理員密碼

在此步驟中,您使用 AWS Secrets Manager 主控台來建立私密。

  1. 登入 AWS Secrets Manager 主控台

    注意

    如需有關此程序的詳細資訊,請參閱《AWS Secrets Manager使用者指南》中AWS Secrets Manager的步驟 1:建立和儲存您的密碼

  2. 選擇 Store a new secret (存放新機密)。

  3. 在 [選擇密碼類型] 下,選擇 [其他密碼類型]。

  4. Specify the key/value pairs to be stored for this secret (指定此秘密要儲存的金鑰/數值組) 下:

    • Key (索引鍵) 欄位,輸入 test

    • Value (數值) 輸入 abcdefghi

  5. 保持為加密金鑰選取 aws/秘密管理員,然後選擇 [下一步]。

    注意

    AWS KMS如果您使用 Secrets Manager 在帳戶中建立的預設AWS受管理金鑰,則不會向您收取費用。

  6. 針對 Secret name (私密名稱),輸入 greengrass-TestSecret,然後選擇 Next (下一步)

    注意

    根據預設,Greengrass 服務角色允許取AWS IoT Greengrass得名稱以 greengrass-開頭的密碼值。如需詳細資訊,請參閱私密需求

  7. 本教學課程不需要旋轉,因此請選擇「停用自動旋轉」,然後選擇「下一步」。

  8. Review (檢閱) 頁面上,檢閱設定,然後選擇 Store (儲存)

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

步驟 2:將私密資源新增至 Greengrass 群組

在此步驟中,您要設定參考密碼 Secrets Manager 碼的群組資源。

  1. 在AWS IoT主控台瀏覽窗格的 [管理] 下,展開 [Greengrass 裝置],然後選擇 [群組 (V1)]。

  2. 選擇您要將私密資源新增至其中的群組。

  3. 在群組設定頁面上,選擇 [資] 索引標籤,然後向下捲動至 [機] 區段。「碼」段落會顯示屬於群組的秘密資源。您可以在此區段中新增、編輯和移除秘密資源。

    注意

    或者,控制台可讓您在設定連接器或 Lambda 函數時建立秘密和密碼資源。您可以從連接器的 [設定參數] 頁面或 Lambda 函數的 [資源] 頁面執行此操作。

  4. 在「密碼」區段下選擇「新增」。

  5. 在 [新增秘密資源] 頁面上,輸MyTestSecret資源名稱

  6. 在「秘密」下,選擇「綠色」。TestSecret

  7. 在「選取標籤 (選擇性)」段落中, AWSCURRENT 暫存標籤代表最新版本的密碼。此標籤一律包含在私密資源中。

    注意

    本自學課程僅需要 AWSCURRENT 標示。您可以選擇性地加入 Lambda 函數或連接器所需的標籤。

  8. 選擇 Add resource (新增資源)

步驟 3:建立 Lambda 函數部署套件

若要建立 Lambda 函數,您必須先建立包含函數程式碼和相依性的 Lambda 函數部署套件。Greengrass Lambda 函數需要AWS IoT Greengrass核心 SDK 來執行任務,例如在核心環境中與 MQTT 訊息通訊以及存取本機密。本教程創建了一個 Python 函數,因此您可以在部署包中使用 SDK 的 Python 版本。

注意

若要取得本機密的值,您使用者定義的 Lambda 函數必須使用AWS IoT Greengrass核心 SDK v1.3.0 或更新版本。

  1. AWS IoT Greengrass核心 SDK 下載頁面,將 Python 的AWS IoT Greengrass核心 SDK 下載到您的計算機。

  2. 解壓縮下載的封裝,以取得軟體開發套件。SDK 為 greengrasssdk 資料夾。

  3. 將以下 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函數支援密碼 Secrets Manager 碼的名稱或 ARN SecretId 值。此範例使用私密名稱。在此秘密範例中,AWS IoT Greengrass 會傳回鍵值組:{"test":"abcdefghi"}

    重要

    請確定您使用者定義的 Lambda 函數能安全地處理機密,而且不會記錄任何儲存在機密中的敏感資料。如需詳細資訊,請參閱AWS Secrets Manager使用者指南的降低記錄和偵錯 Lambda 函數的風險。雖然本文件特別提及旋轉函數,但此建議也適用於 Greengrass Lambda 函數。

  4. 將下列項目壓縮成名為 secret_test_python.zip 的檔案。當您建立 ZIP 檔案時,只包含程式碼及其依存項目,而不包含資料夾。

    • secret_test.py。應用程式邏輯。

    • greengrasssdk。所有 Python Greengrass Lambda 函數所需的程式庫。

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

步驟 4:建立 Lambda 函數

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

  1. 首先,建立 Lambda 函數。

    1. 於 AWS Management Console,請選擇服務,開啟 AWS Lambda 主控台。

    2. 選擇創建功能,然後選擇從頭開始作者

    3. Basic information (基本資訊) 區段中,使用下列值:

      • 針對 函數名稱 ,請輸入 SecretTest

      • 針對 Runtime (執行時間),選擇 Python 3.7

      • 對於「權限」,請保留預設設定。這會建立授與基本 Lambda 權限的執行角色。此角色不被使用AWS IoT Greengrass。

    4. 在頁面底部,選擇 [建立功能]。

  2. 接下來,註冊處理常式並上傳您的 Lambda 函數部署套件。

    1. 在 [程式碼] 索引標籤的 [程式碼來源] 下,選擇 [上傳自] 從下拉式清單中選擇 .zip 檔案

      突出顯示 .zip 文件的從下拉列表中上傳。
    2. 選擇「上傳」,然後選擇您的secret_test_python.zip部署套件。然後選擇 Save (儲存)

    3. 在函數的 [程式碼] 索引標籤上的 [執行階段設定] 下,選擇 [編輯],然後輸入下列值。

      • 針對 Runtime (執行時間),選擇 Python 3.7

      • 對於 Handler (處理常式),輸入 secret_test.function_handler

    4. 選擇 儲存

      注意

      AWS Lambda控制台上的「測試」按鈕不適用於此功能。AWS IoT Greengrass核心 SDK 不包含在主控台中獨立執行 Greengrass Lambda 函數所需的模組。AWS Lambda這些模塊(例如,greengrass_common)在部署到 Greengrass 核心後,將提供給函數。

  3. 現在,發佈 Lambda 函數的第一個版本,並為該版本建立別名

    注意

    Greengrass 組可以通過別名(推薦)或版本引用 Lambda 函數。使用別名可讓您更輕鬆地管理程式碼更新,因為當函數程式碼更新時,您不需要變更訂閱資料表或群組定義。相反,您只需將別名指向新函數版本即可。

    1. 請從操作功能表中選擇發行新版本

    2. 針對 Version description (版本描述),輸入 First version,然後選擇 Publish (發佈)

    3. SecretTest:1 組態頁面的「動作」功能表中,選擇「建立別名」。

    4. 建立警示頁面上使用下列值:

      • 對於 Name (名稱),輸入 GG_SecretTest

      • 對於 Version (版本),選擇 1

      注意

      AWS IoT Greengrass不支持 $ 最新版本的 Lambda 別名。

    5. 選擇 建立

現在您已準備好將 Lambda 函數新增至 Greengrass 群組,並附加秘密資源。

第 5 步:將 Lambda 函數添加到 Greengrass 組

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

  1. 在群組設定頁面上,選擇 Lambda 函數索引標籤。

  2. 在 [我的 Lambda 函數] 區段下,選擇 [新增]。

  3. 對於 L ambda 函數,請選擇SecretTest

  4. 對於 Lambda 函數版本,請選擇您發佈的版本的別名。

接下來,設定 Lambda 函數的生命週期。

  1. Lambda 函數設定區段中,進行下列更新。

    注意

    除非您的業務案例需要,否則建議您在不使用容器化的情況下執行 Lambda 函數。這有助於啟用對設備 GPU 和攝像頭的訪問,而無需配置設備資源。如果在沒有容器化的情況下執行,您也必須授與 AWS IoT Greengrass Lambda 函數的根存取權。

    1. 若要在不含容器化的情況下執行:

      • 對於 [系統使用者和群組],請選擇Another user ID/group ID。對於「系統使用者 ID」,請輸入0。對於「系統群組 ID」,輸入0

        這可讓您的 Lambda 函數以根使用者身分執行。如需以 root 身分執行的詳細資訊,請參閱設定群組中 Lambda 函數的預設存取身分

        提示

        您也必須更新config.json檔案,以授與 Lambda 函數的根存取權。如需程序的資訊,請參閱以根身份運行 Lambda 函數

      • 對於 Lambda 函數容器化,請選擇「容器」。

        如需在沒有容器化的情況下執行的詳細資訊,請參閱。選擇 Lambda 函數容器化時的考量事項

      • 針對 Timeout (逾時),輸入 10 seconds

      • 針對「釘選」,選擇「True」。

        如需詳細資訊,請參閱Greengrass Lambda 函數的生命週期組態

      • 在「其他參數」下,對於 /sys 目錄的讀取權限,請選擇已啟用

    2. 要在容器化模式下運行:

      注意

      除非您的業務案例需要,否則我們不建議以容器化模式執行。

      • 對於系統使用者和群組,請選擇使用群組預設值

      • 對於 Lambda 函數容器化,請選擇 [使用群組預設值]。

      • 針對 Memory limit (記憶體限制),輸入 1024 MB

      • 針對 Timeout (逾時),輸入 10 seconds

      • 針對「釘選」,選擇「True」。

        如需詳細資訊,請參閱Greengrass Lambda 函數的生命週期組態

      • 在「其他參數」下,對於 /sys 目錄的讀取權限,請選擇已啟用

  2. 選擇新增 Lambda 函數

接下來,將秘密資源與函數相關聯。

步驟 6:將秘密資源附加至 Lambda 函數

在此步驟中,您會將秘密資源與 Greengrass 群組中的 Lambda 函數產生關聯。這將資源與函數相關聯,該函數允許函數獲取本地密鑰的值。

  1. 在群組設定頁面上,選擇 Lambda 函數索引標籤。

  2. 選擇SecretTest功能。

  3. 在函數的詳細資訊頁面上,選擇資源

  4. 捲動至「密碼」區段,然後選擇「關聯」。

  5. 選擇 MyTestSecret,然後選擇「關聯」。

步驟 7:將訂閱新增到 Greengrass 群組

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

  1. 在群組設定頁面上,選擇 [訂閱] 索引標籤,然後選擇 [新增訂閱]。

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

    在群組設定頁面上,選擇 [訂閱] 索引標籤,然後選擇 [新增訂閱]。

  3. 在 [建立訂閱] 頁面上,設定來源和目標,如下所示:

    1. 在 [來源類型] 中,選擇 [Lambda 函數],然後選擇 [IoT 雲端]。

    2. 在 [目標類型] 中,選擇 [服務],然後選擇SecretTest

    3. 在 [主題] 篩選器中,輸入secrets/input,然後選擇 [建立訂閱]。

  4. 新增第二個訂閱。選擇「訂閱」索引標籤,選擇「新增訂閱」,然後設定來源和目標,如下所示:

    1. 在 [來源類型] 中,選擇 [服務],然後選擇SecretTest

    2. 在 [目標類型] 中,選擇 [Lambda 函數],然後選擇 [IoT 雲端]。

    3. 在 [主題] 篩選器中,輸入secrets/output,然後選擇 [建立訂閱]。

步驟 8:部署 Greengrass 群組

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

  1. 請確定AWS IoT Greengrass核心正在執行。如果需要,請在您的 Raspberry Pi 終端機執行以下命令。

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

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

      若輸出的 root 含有 /greengrass/ggc/packages/ggc-version/bin/daemon 項目,則精靈有在運作。

      注意

      路徑的版本取決於安裝在您的核心裝置中的 AWS IoT Greengrass 核心軟體版本。

    2. 若要啟動協助程式:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在 [群組設定] 頁面上,選擇 [部署]。

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

    2. 在 [編輯 IP 偵測器設定] 對話方塊中,選取 [自動偵測並覆寫 MQTT 代理程式端點]。

    3. 選擇 儲存

      這可讓裝置自動取得核心的連接資訊,例如 IP 位址、DNS、連接埠編號。建議使用自動偵測,但是 AWS IoT Greengrass 也支援手動指定端點。只會在第一次部署群組時收到復原方法的提示。

      注意

      如果出現提示,請授予建立 Greengrass 服務角色的權限,並將其與目前服務角色相關聯。AWS 帳戶 AWS 區域此角色可AWS IoT Greengrass讓您存取AWS服務中的資源。

      部署頁面會顯示部署時間戳記、版本 ID 和狀態。完成時,顯示的部署狀態應為 [已完成]。

      如需故障診斷協助,請參閱AWS IoT Greengrass 疑難排解

測試 Lambda 函數

  1. 在AWS IoT主控台首頁上,選擇 [測試]。

  2. 對於訂閱主題,請使用下列值,然後選擇訂閱

    屬性

    訂閱主題

    私密/輸出

    MQTT 承載顯示

    將承載顯示為字串

  3. 對於「發佈至」主題,請使用下列值,然後選擇「發佈」以呼叫函數。

    屬性

    主題

    私密/輸入

    訊息

    保留預設訊息。發佈訊息會叫用 Lambda 函數,但本教學課程中的函數不會處理訊息內文。

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

另請參閱