

终止支持通知：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 酷睿 v1.7 及更高版本。

本教程介绍如何使用向 Gre AWS 管理控制台 engrass 群组添加*秘密资源*。密钥资源是对来自的密钥的引用 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 通知连接器如何使用本地存储的身份验证令牌的教程，请参阅[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 Core（v1.7 或更高版本）。要了解如何创建 Greengrass 组和核心，请参阅 [入门 AWS IoT Greengrass](gg-gs.md)。入门教程还包括安装 AWS IoT Greengrass 核心软件的步骤。
+ AWS IoT Greengrass 必须配置为支持本地密钥。有关更多信息，请参阅[密钥要求](secrets.md#secrets-reqs)。
**注意**  
此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色，则 Greengrass 有权获得名称以 *greengrass-* 开头的密钥的值。
+ 要获取本地密钥的值，用户定义的 Lambda 函数必须使用 C AWS IoT Greengrass ore SDK 1.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. 在**指定要为此密钥存储的键值对**下：
   + 对于**键**，输入 **test**。
   + 对于**值**，输入 **abcdefghi**。

1. <a name="create-secret-step-encryption"></a>为加密密钥保留选中 **aws/secretsmanager**，然后选择**下一步**。
**注意**  
 AWS KMS 如果您使用 Secrets Manager 在账户中创建的默认 AWS 托管密钥，则不会向您收费。

1. 对于**密钥名称**，输入 **greengrass-TestSecret**，然后选择**下一步**。
**注意**  
*默认情况下，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>在**审核**页上，审核您的设置，然后选择**存储**。

   接下来，在 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. 选择**添加资源**。

## 步骤 3：创建 Lambda 函数部署程序包
<a name="secrets-console-create-deployment-package"></a>

要创建 Lambda 函数，您必须先创建一个包含函数代码和依赖项的 Lambda 函数*部署包*。Greengrass Lambda 函数需要 [AWS IoT Greengrass Core 软件开发工具包](lambda-functions.md#lambda-sdks-core)来执行各项任务，例如在核心环境中与 MQTT 消息通信和访问本地机密等。本教程将创建一个 Python 函数，因此您需要在部署包中使用 Python 版本的软件开发工具包。

**注意**  
要获取本地密钥的值，用户定义的 Lambda 函数必须使用 C AWS IoT Greengrass ore SDK 1.3.0 或更高版本。

1. <a name="download-ggc-sdk"></a> 从[AWS IoT Greengrass 核心软件开发工具包](what-is-gg.md#gg-core-sdk-download)下载页面，将适用于 Python 的 AWS IoT Greengrass 酷睿 SDK 下载到你的电脑上。

1. <a name="unzip-ggc-sdk"></a>解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 `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. 在**基本信息**部分中，使用以下值：
      + 对于**函数名称**，请输入 **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_cn/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. 选择**上传**，然后选择您的 `secret_test_python.zip` 部署包。然后，选择**保存**。

   1. <a name="lambda-console-runtime-settings-para"></a>在函数的**代码**选项卡中，在**运行时设置**下选择**编辑**，然后输入以下值。
      + 对于**运行时系统**，选择 **Python 3.7**。
      + 对于**处理程序**，输入 **secret\$1test.function\$1handler**。

   1. <a name="lambda-console-save-config"></a>选择**保存**。
**注意**  
 AWS Lambda 主机上的 “**测试**” 按钮不适用于此功能。 AWS IoT Greengrass 核心软件开发工具包不包含在控制台中独立运行 Greengrass Lambda 函数所需的模块。 AWS 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>对于**版本描述**，输入 **First version**，然后选择**发布**。

   1. 在**SecretTest:1** 配置页面上，从 “**操作**” 菜单中选择 “**创建别名**”。

   1. 在**创建新别名**页面上，使用以下值：
      + 对于**名称**，输入 **GG\$1SecretTest**。
      + 对于**版本**，选择 **1**。
**注意**  
AWS IoT Greengrass **不支持 \$1LATEST 版本的 Lambda 别名。**

   1. 选择**创建**。

现在，您可以将 Lambda 函数添加到 Greengrass 组并附加密钥资源。

## 步骤 5：将 Lambda 函数添加到 Greengrass 组
<a name="secrets-console-create-gg-function"></a>

在此步骤中，您要在 AWS IoT 控制台中将 Lambda 函数添加到 Greengrass 组。

1. <a name="choose-add-lambda"></a>在组配置页面上，选择**Lambda 函数**选项卡。

1. 在**我的 Lambda 函数**部分下，选择**添加**。

1. 对于 **Lambda 函数**，请选择。**SecretTest**

1. 对于 **Lambda 函数版本**，请选择您所发布的版本的别名。

接下来，配置 Lambda 函数的生命周期。

1. 在 **Lambda 函数配置**部分中，进行以下更新。
**注意**  
 我们建议您在不进行容器化的情况下运行 Lambda 函数，除非您的业务案例需要这样做。这有助于您在无需配置设备资源的前提下访问您的设备 GPU 和摄像头。如果您在没有容器化的情况下运行，则还必须授予对 Lambda 函数 AWS IoT Greengrass 的根访问权限。

   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)。
      + 对于**超时**，输入 **10 seconds**。
      + 对于**已固定**，选择 **True**。

        有关更多信息，请参阅 [Greengrass Lambda 函数的生命周期配置](lambda-functions.md#lambda-lifecycle)。
      + 在**其他参数**下，在**对 sys 目录的只读权限**中选择**启用**。

   1.  **改为在容器化模式下运行：**
**注意**  
我们不建议以容器化模式运行，除非您的业务案例需要这样做。
      + 对于**系统用户和组**，选择**使用组默认值**。
      + 对于 **Lambda 函数容器化**，选择**使用组默认值**。
      + 对于**内存限制**，输入 **1024 MB**。
      + 对于**超时**，输入 **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 云**。

   1. 在**目标类型**中，选择**服务**，然后选择**SecretTest**。

   1. 在**主题筛选条件**字段中，输入 **secrets/input**，然后选择**订阅**。

1. 添加另一个订阅。选择**订阅**选项卡，选择**添加订阅**，然后按如下所示配置源和目标：

   1. 在 “**源类型**” 中，选择 “**服务**”，然后选择**SecretTest**。

   1. 在**目标类型**中，选择 **Lambda 函数**，然后选择 **IoT 云**。

   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 核心设备上安装的 Core 软件版本。

   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_cn/greengrass/v1/developerguide/secrets-console.html)

1. 对于**发布到主题**，请使用以下值，然后选择**发布** 来调用函数。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/secrets-console.html)

   如果成功，则该函数会发布“成功”消息。

## 另请参阅
<a name="secrets-console-see-also"></a>
+ [将机密部署到核 AWS IoT Greengrass 心](secrets.md)