如何创建密钥资源(控制台) - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 Amazon IoT Greengrass Version 2,这样可以添加重要的新功能支持其他平台

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

如何创建密钥资源(控制台)

此功能适用于 Amazon IoT Greengrass Core v1.7 及更高版本。

本教程介绍如何使用Amazon Web Services Management Console将密钥资源添加到 Greengrass 组。密钥资源是对 Amazon Secrets Manager 中密钥的引用。有关更多信息,请参阅将密钥部署到 Amazon IoT Greengrass 核心

在Amazon IoT Greengrass 核心设备上,连接器和 Lambda 函数可以使用密钥资源完成服务和应用程序的身份验证,而无需对密码、令牌或其他凭证进行硬编码。

在本教程中,您需要先在 Amazon Secrets Manager 控制台中创建一个密钥。然后,在 Amazon IoT Greengrass 控制台中,从 Greengrass 组的资源页面向该组添加一个密钥资源。此密钥资源引用 Secrets Manager 密钥。稍后,将此密钥资源附加到一个 Lambda 函数,这将允许该函数获取本地密钥的值。

注意

或者,控制台允许您在配置连接器或 Lambda 函数时创建密钥和密钥资源。您可以从连接器的配置参数页面或 Lambda 函数的资源页面执行此操作。

只有包含密钥参数的连接器才可以访问密钥。有关介绍 Twilio 通知连接器如何使用本地存储的身份验证令牌的教程,请参阅Greengrass 连接器入门(控制台)

本教程包含以下概括步骤:

完成本教程大约需要 20 分钟。

先决条件

要完成此教程,需要:

  • Greengrass 组和 Greengrass Core(v1.7 或更高版本)。要了解如何创建 Greengrass 组和核心,请参阅 开始使用 Amazon IoT Greengrass。“入门”教程还包含用于安装 Amazon IoT Greengrass Core 软件的步骤。

  • Amazon IoT Greengrass 必须配置为支持本地密钥。有关更多信息,请参阅密钥要求

    注意

    此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色,则 Greengrass 有权获得名称以 greengrass- 开头的密钥的值。

  • 要获取本地密钥的值,用户定义的 Lambda 函数必须使用 Amazon IoT Greengrass Core SDK 1.3.0 或更高版本。

步骤 1:创建 Secrets Manager 密钥

在本步骤中,使用 Amazon Secrets Manager 控制台创建密钥。

  1. 登录到 Amazon Secrets Manager 控制台

    注意

    有关此过程的更多信息,请参阅《Amazon Secrets Manager 用户指南》中的步骤 1:在 Amazon Secrets Manager 中创建和存储密钥

  2. 选择存储新密钥

  3. 选择密钥类型下,选择其他密钥类型

  4. 指定要为此密钥存储的键值对下:

    • 对于,输入 test

    • 对于,输入 abcdefghi

  5. 为加密密钥保留选中 aws/secretsmanager,然后选择下一步

    注意

    如果使用 Secrets Manager 在您的账户中创建的默认 Amazon 托管密钥,Amazon KMS 不会对您收费。

  6. 对于密钥名称,输入 greengrass-TestSecret,然后选择下一步

    注意

    默认情况下,Greengrass 服务角色允许 Amazon IoT Greengrass 获取名称以 greengrass- 开头的密钥的值。有关更多信息,请参阅密钥要求

  7. 本教程不需要轮换,因此请选择禁用自动轮换,然后选择下一步

  8. 审核页上,审核您的设置,然后选择存储

    接下来,在 Greengrass 组中创建一个引用该密钥的密钥资源。

步骤 2:将密钥资源添加到 Greengrass 组

在系步骤中,配置一个引用 Secrets Manager 密钥的组资源。

  1. 在 Amazon IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择组 (V1)

  2. 选择要将密钥资源添加到的组。

  3. 在组配置页面上,选择资源选项卡,然后向下滚动到密钥部分。密钥部分显示从属于该组的密钥资源。您可以在此部分中添加、编辑和删除密钥资源。

    注意

    或者,控制台允许您在配置连接器或 Lambda 函数时创建密钥和密钥资源。您可以从连接器的配置参数页面或 Lambda 函数的资源页面执行此操作。

  4. 密钥部分下选择添加

  5. 添加秘密资源页面,在资源名称中输入 MyTestSecret

  6. 密钥下,选择 GreenGrass-testSecret

  7. 选择标签(可选)部分中,AWSCURRENT 暂存标签表示密钥的最新版本。该标签始终包含在密钥资源中。

    注意

    本教程只需要 AWSCURRENT 标签。您可以视情况包括 Lambda 函数或连接器需要的标签。

  8. 选择添加资源

步骤 3:创建 Lambda 函数部署包

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

注意

要获取本地密钥的值,用户定义的 Lambda 函数必须使用 Amazon IoT Greengrass Core SDK 1.3.0 或更高版本。

  1. Amazon IoT Greengrass Core 软件开发工具包下载页面,将适用于 Python 的 Amazon IoT Greengrass Core 软件开发工具包 下载到您的计算机上。

  2. 解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 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 函数支持对 SecretId 值使用 Secrets Manager 密钥的名称或 ARN。此示例使用密钥名称。对于此示例密钥,Amazon IoT Greengrass 返回键值对:{"test":"abcdefghi"}

    重要

    请确保用户定义的 Lambda 函数能够安全地处理密钥,并且不记录存储在密钥中的任何敏感数据。有关更多信息,请参阅《Amazon Secrets Manager 用户指南》中的降低记录和调试 Lambda 函数的风险。尽管本文档特别提到了轮换函数,但该建议也适用于 Greengrass Lambda 函数。

  4. 将以下项目压缩到名为 secret_test_python.zip 的文件中。在创建 ZIP 文件时,应仅包含代码和依赖项,而不包含文件夹。

    • secret_test.py。应用程序逻辑。

    • greengrasssdk。所有 Python Greengrass Lambda 函数必需的库。

    这是您的 Lambda 函数部署包。

步骤 4:创建 Lambda 函数

在此步骤中,您使用 Amazon Lambda 控制台创建 Lambda 函数,然后将其配置为使用您的部署包。接着,发布函数版本并创建别名。

  1. 首先,创建 Lambda 函数。

    1. 在Amazon Web Services Management Console中,选择服务,然后打开 Amazon Lambda 控制台。

    2. 选择创建函数,然后选择从头开始创作

    3. 基本信息部分中,使用以下值:

      • 对于函数名称,请输入 SecretTest

      • 对于运行时系统,选择 Python 3.7

      • 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色不由 Amazon IoT Greengrass 使用。

    4. 在页面底部,选择创建函数

  2. 接下来,注册处理程序并上传您的 Lambda 函数部署包。

    1. 代码选项卡上的代码源下,选择上传自。从下拉列表中选择 .zip 文件

      
                “上传自”下拉列表中突出显示了.zip 文件。
    2. 选择上传,然后选择您的 secret_test_python.zip 部署包。然后,选择保存

    3. 在函数的代码选项卡中,在运行时设置下选择编辑,然后输入以下值。

      • 对于运行时系统,选择 Python 3.7

      • 对于处理程序,输入 secret_test.function_handler

    4. 选择保存

      注意

      Amazon Lambda 控制台上的测试按钮不适用于此功能。Amazon IoT Greengrass Core 软件开发工具包不包含在 Amazon Lambda 控制台中独立运行 Greengrass Lambda 函数所需的模块。这些模块(例如 greengrass_common)是在函数部署到您的 Greengrass 核心之后提供给它们的。

  3. 现在,发布 Lambda 函数的第一个版本并创建此版本的别名

    注意

    Greengrass 组可以按别名(推荐)或版本引用 Lambda 函数。使用别名,您可以更轻松地管理代码更新,因为您在更新函数代码时,不必更改订阅表或组定义。相反,您只需将别名指向新的函数版本。

    1. 操作菜单上,选择发布新版本

    2. 对于版本描述,输入 First version,然后选择发布

    3. SecretTest: 1 配置页面上,从操作菜单中选择创建别名

    4. 创建新别名页面上,使用以下值:

      • 对于名称,输入 GG_SecretTest

      • 对于版本,选择 1

      注意

      Amazon IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。

    5. 选择创建

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

步骤 5:将 Lambda 函数添加到 Greengrass 组

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

  1. 在组配置页面上,选择Lambda 函数选项卡。

  2. 我的 Lambda 函数部分下,选择添加

  3. 对于 Lambda 函数,请选择 SecretTest

  4. 对于 Lambda 函数版本,请选择您所发布的版本的别名。

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

  1. Lambda 函数配置部分中,进行以下更新。

    注意

    我们建议您在不进行容器化的情况下运行 Lambda 函数,除非您的业务案例需要这样做。这有助于您在无需配置设备资源的前提下访问您的设备 GPU 和摄像头。如果您在没有容器化的情况下运行,则还必须为 Amazon IoT Greengrass Lambda 函数授予根用户访问权限。

    1. 在不进行容器化的情况下运行:

    2. 改为在容器化模式下运行:

      注意

      我们不建议以容器化模式运行,除非您的业务案例需要这样做。

      • 对于系统用户和组,选择使用组默认值

      • 对于 Lambda 函数容器化,选择使用组默认值

      • 对于内存限制,输入 1024 MB

      • 对于超时,输入 10 seconds

      • 对于已固定,选择 True

        有关更多信息,请参阅Greengrass Lambda 函数的生命周期配置

      • 其他参数下,在对 sys 目录的只读权限中选择启用

  2. 选择添加 Lambda 函数

接下来,将密钥资源与函数关联。

步骤 6:将密钥资源附加到 Lambda 函数

在此步骤中,将密钥资源附加到 Greengrass 组中的 Lambda 函数。这会将资源与函数关联,从而允许函数获取本地密钥的值。

  1. 在组配置页面上,选择Lambda 函数选项卡。

  2. 选择 SecretTest 函数。

  3. 在函数的详细信息页面上,选择资源

  4. 滚动到密钥部分,然后选择关联

  5. 选择 MyTestSecret,然后选择关联

步骤 7:将订阅添加到 Greengrass 组

在此步骤中,您将添加允许 Amazon IoT 和 Lambda 函数交换消息的订阅。一个允许 Amazon IoT 调用该函数的订阅,以及一个允许该函数向 Amazon IoT 发送输出数据的订阅。

  1. 在组配置页面中,选择订阅选项卡,然后选择添加订阅

  2. 创建一个允许 Amazon IoT 向该函数发布消息的订阅:

    在组配置页面中,选择订阅选项卡,然后选择添加订阅

  3. 创建订阅页面中,按如下所述配置源和目标:

    1. 源类型中,选择 Lambda 函数,然后选择 IoT 云

    2. 目标类型中,选择服务,然后选择 SecretTest

    3. 主题筛选条件字段中,输入 secrets/input,然后选择订阅

  4. 添加另一个订阅。选择订阅选项卡,选择添加订阅,然后按如下所示配置源和目标:

    1. 源类型中,选择服务,然后选择 SecretTest

    2. 目标类型中,选择 Lambda 函数,然后选择 IoT 云

    3. 主题筛选条件字段中,输入 secrets/output,然后选择订阅

步骤 8:部署 Greengrass 组

将组部署到核心设备。在部署期间,Amazon IoT Greengrass 从 Secrets Manager 中提取密钥的值,并在核心上创建一个本地加密副本。

  1. 确保 Amazon IoT Greengrass 核心正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。

    1. 要检查进程守护程序是否正在运行,请执行以下操作:

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

      如果输出包含 root/greengrass/ggc/packages/ggc-version/bin/daemon 条目,则表示进程守护程序正在运行。

      注意

      路径中的版本取决于您的核心设备上安装的 Amazon IoT Greengrass Core 软件版本。

    2. 启动进程守护程序:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在组配置页面上,选择部署

    1. Lambda 函数选项卡的系统 Lambda 函数部分下,选择 IP 检测器,再选择编辑

    2. 编辑 IP 检测器设置对话框中,选择自动检测和覆盖 MQTT 代理端点

    3. 选择保存

      这使得设备可以自动获取核心的连接信息,例如 IP 地址、DNS 和端口号。建议使用自动检测,不过 Amazon IoT Greengrass 也支持手动指定的端点。只有在首次部署组时,系统才会提示您选择发现方法。

      注意

      如果出现提示,请授予权限,以创建 Greengrass 服务角色并将其关联至当前 Amazon Web Services 区域中的 Amazon Web Services 账户。该角色将允许 Amazon IoT Greengrass 访问您在 Amazon 服务中的资源。

      部署页面显示了部署时间戳、版本 ID 和状态。完成后,部署的状态应显示为成功完成

      有关问题排查帮助,请参阅故障排除 Amazon IoT Greengrass

测试 Lambda 函数

  1. 在 Amazon IoT 控制台主页上,选择测试

  2. 对于订阅主题,请使用以下值,然后选择订阅

    属性

    订阅主题

    密钥/输出

    MQTT 负载显示

    将负载显示为字符串

  3. 对于发布,请使用以下值,然后选择发布以调用函数。

    属性

    主题

    密钥/输入

    消息

    保留默认消息。发布消息将调用 Lambda 函数,但本教程中的这个函数不处理消息正文。

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

另请参阅