配置设备以运行 IDT 测试 - AWS IoT Greengrass

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

配置设备以运行 IDT 测试

要让 IDT 运行设备资格认证测试,您必须将主机配置为访问您的设备,并在您的设备上配置用户权限。

在主机上安装 Java

从 IDT v4.2.0 开始,可选的 AWS IoT Greengrass 资格认证测试要求运行 Java。

您可以使用 Java 版本 8 或更高版本。我们建议您使用 Amazon CorrettoOpenJDK 长期支持版本。需要版本 8 或更高版本。

配置主机以访问被测设备

IDT 在主机上运行,并且必须能够使用 SSH 连接到您的设备。有两个选项允许 IDT 获得对被测设备的 SSH 访问权限:

  1. 按照此处的说明创建一个 SSH 密钥对并授权您的密钥,以便登录被测设备而无需指定密码。

  2. device.json 文件中为每个设备提供用户名和密码。有关更多信息,请参阅 配置 device.json

您可以使用任何 SSL 实现创建 SSH 密钥。以下说明介绍如何使用 SSH-KEYGENPuTTYgen(适用于 Windows)。如果您使用的是另一个 SSL 实现,请参阅该实现的文档。

IDT 使用 SSH 密钥对被测设备进行身份验证。

使用 SSH-KEYGEN 创建 SSH 密钥
  1. 创建 SSH 密钥。

    您可以使用 Open SSH ssh-keygen 命令创建 SSH 密钥对。如果您的主机上已有一个 SSH 密钥对,则最佳做法是专门为 IDT 创建一个 SSH 密钥对。这样,完成测试后,如果没有输入密码,主机将无法再连接到设备。它还使您能够仅向需要访问远程设备的人员授予访问权限。

    注意

    Windows 没有安装 SSH 客户端。有关在 Windows 上安装 SSH 客户端的信息,请参阅下载 SSH 客户端软件

    ssh-keygen 命令会提示您输入要存储密钥对的名称和路径。默认情况下,密钥对文件的名称为 id_rsa(私有密钥)和 id_rsa.pub(公有密钥)。在 macOS 和 Linux 上,这些文件的默认位置为 ~/.ssh/。在 Windows 上,默认位置为 C:\Users\<user-name>\.ssh

    根据提示,输入密钥短语来保护您的 SSH 密钥。有关更多信息,请参阅生成新的 SSH 密钥

  2. 向被测设备添加经过授权的 SSH 密钥。

    IDT 必须使用您的 SSH 私有密钥登录被测设备。要授权 SSH 私有密钥以登录被测设备,请在主机上使用 ssh-copy-id 命令。此命令会将您的公有密钥添加到被测设备上的 ~/.ssh/authorized_keys 文件中。例如:

    $ ssh-copy-id <remote-ssh-user>@<remote-device-ip>

    其中 remote-ssh-user 是用于登录被测设备的用户名,remote-device-ip 是用于运行测试的被测设备的 IP 地址。例如:

    ssh-copy-id pi@192.168.1.5

    系统提示时,输入在 ssh-copy-id 命令中指定的用户名所对应的密码。

    ssh-copy-id 公有密钥的名称为 id_rsa.pub 并且存储在默认位置(macOS 和 Linux 上的位置为 ~/.ssh/,Windows 上的位置为 C:\Users\<user-name>\.ssh)。如果公有密钥采用其他名称或存储在其他位置,则必须使用 -i 选项与 ssh-copy-id 指定 SSH 公有密钥的完全限定路径(例如,ssh-copy-id -i ~/my/path/myKey.pub)。有关创建 SSH 密钥和复制公有密钥的更多信息,请参阅 SSH-COPY-ID

使用 PuTTYgen 创建 SSH 密钥(仅限 Windows)
  1. 确保您在被测设备上安装了 OpenSSH 服务器和客户端。有关更多信息,请参阅 OpenSSH

  2. 在被测设备上安装 PuTTYgen

  3. 打开 PuTTYgen。

  4. 选择 Generate (生成),然后在框中移动鼠标光标以生成私有密钥。

  5. Conversions (转换) 菜单中,选择 Export OpenSSH key (导出 OpenSSH 密钥),然后使用 .pem 文件扩展名保存私有密钥 。

  6. 将公有密钥添加到被测设备上的 /home/<user>/.ssh/authorized_keys 文件中。

    1. 从 PuTTYgen 窗口复制公有密钥文本。

    2. 使用 PuTTY 在被测设备上创建会话。

      1. 从命令提示符或 Windows Powershell 窗口中,运行以下命令:

        C:/<path-to-putty>/putty.exe -ssh <user>@<dut-ip-address>

      2. 在系统提示时,输入您的设备密码。

      3. 使用 vi 或其他文本编辑器将公有密钥附加到被测设备上的 /home/<user>/.ssh/authorized_keys 文件中。

  7. 使用您的用户名、IP 地址以及您刚刚为每个被测设备保存在主机上的私钥文件的路径更新 device.json 文件。有关更多信息,请参阅 配置 device.json。确保提供私有密钥的完整路径和文件名,并使用正斜杠(“/”)。例如,对于 Windows 路径 C:\DT\privatekey.pem,请在 device.json 文件中使用 C:/DT/privatekey.pem

为 Windows 设备配置用户凭证

要对基于 Windows 的设备进行资格认证,您必须在被测设备上的 LocalSystem 账户中为以下用户配置用户凭证:

  • 默认 Greengrass 用户(ggc_user)。

  • 您用来连接到被测设备的用户。您可以在 device.json 文件中配置此用户。

您必须在被测设备上的 LocalSystem 账户中创建每个用户,然后将该用户的用户名和密码存储在 LocalSystem 账户的 Credential Manager 实例中。

在 Windows 设备上配置用户
  1. 以管理员身份打开 Windows 命令提示符 (cmd.exe)。

  2. 在 Windows 设备上的 LocalSystem 账户中创建用户。为您要创建的每个用户运行以下命令:对于默认 Greengrass 用户,请将 user-name 替换为 ggc_user。然后,将 password 替换为安全密码。

    net user /add user-name password
  3. 在设备上下载并安装 Microsoft 的 PsExec 实用程序

  4. 使用 PsExec 实用程序将默认用户的用户名和密码存储在 LocalSystem 账户的 Credential Manager 实例中。

    为要在 Credential Manager 中配置的每个用户运行以下命令。对于默认 Greengrass 用户,请将 user-name 替换为 ggc_user。将 password 替换为您之前设置的用户密码。

    psexec -s cmd /c cmdkey /generic:user-name /user:user-name /pass:password

    如果系统打开 PsExec License Agreement,请选择 Accept 以同意许可并运行命令。

    注意

    在 Windows 设备上,LocalSystem 账户运行 Greengrass Nucleus,而您必须使用 PsExec 实用程序将用户信息存储在 LocalSystem 账户中。使用 Credential Manager 应用程序将此信息存储在当前登录用户的 Windows 账户中,而不是 LocalSystem 账户中。

在您的设备上配置用户权限

IDT 将对被测设备中的各种目录和文件执行操作。其中一些操作需要升级权限(使用 sudo)。要自动执行这些操作,适用于 AWS IoT Greengrass V2 的 IDT 必须能够在不提示输入密码的情况下使用 sudo 运行命令。

请在被测设备上执行以下步骤,以允许在不提示输入密码的情况下进行 sudo 访问。

注意

username 是指 IDT 用来访问被测设备的 SSH 用户。

将用户添加到 sudo 组
  1. 在被测设备上,运行 sudo usermod -aG sudo <username>

  2. 注销,然后重新登录,以使变更生效。

  3. 要验证您的用户名是否已成功添加,请运行 sudo echo test。如果系统未提示您输入密码,则说明已正确配置您的用户。

  4. 打开 /etc/sudoers 文件,并将以下行添加到文件末尾:

    <ssh-username> ALL=(ALL) NOPASSWD: ALL

配置自定义令牌交换角色

您可以选择使用自定义 IAM 角色作为令牌交换角色,让被测设备假定该角色与 AWS 资源交互。有关创建 IAM 角色的信息,请参阅《IAM 用户指南》中的创建 IAM 角色

您必须满足以下要求才能允许 IDT 使用您的自定义 IAM 角色。强烈建议您仅向该角色添加最低要求的策略操作。

  • 必须更新 userdata.json 配置文件才能将 GreengrassV2TokenExchangeRole 参数设置为 true

  • 必须使用以下最低信任策略配置自定义 IAM 角色:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "credentials.iot.amazonaws.com", "lambda.amazonaws.com", "sagemaker.amazonaws.com" ] }, "Action":"sts:AssumeRole" } ] }
  • 必须使用以下最低权限策略配置自定义 IAM 角色:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "iot:DescribeCertificate", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:ListThingPrincipals", "iot:GetThingShadow", "iot:UpdateThingShadow", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource":"*" } ] }
  • 自定义 IAM 角色的名称必须与您在测试用户的 IAM 权限中指定的 IAM 角色资源相匹配。默认情况下,测试用户策略允许访问角色名称中带有 idt- 前缀的 IAM 角色。如果您的 IAM 角色名称不使用此前缀,请将 arn:aws:iam::*:role/custom-iam-role-name 资源添加到测试用户策略的 roleAliasResources 语句和 passRoleForResources 语句中,如以下示例所示:

    passRoleForResources statement
    { "Sid":"passRoleForResources", "Effect":"Allow", "Action":"iam:PassRole", "Resource":"arn:aws:iam::*:role/custom-iam-role-name", "Condition":{ "StringEquals":{ "iam:PassedToService":[ "iot.amazonaws.com", "lambda.amazonaws.com", "greengrass.amazonaws.com" ] } } }
    roleAliasResources statement
    { "Sid":"roleAliasResources", "Effect":"Allow", "Action":[ "iot:CreateRoleAlias", "iot:DescribeRoleAlias", "iot:DeleteRoleAlias", "iot:TagResource", "iam:GetRole" ], "Resource":[ "arn:aws:iot:*:*:rolealias/idt-*", "arn:aws:iam::*:role/custom-iam-role-name" ] }

配置设备以测试可选功能

本节介绍运行可选 Docker 和机器学习(ML)功能的 IDT 测试的设备要求。只有 IDT v4.9.3 支持 ML 功能。只有当您想测试这些功能时,才必须确保您的设备符合这些要求。否则,请继续查看 配置 IDT 设置以运行 AWS IoT Greengrass 资格认证套件

Docker 资格认证要求

适用于 AWS IoT Greengrass V2 的 IDT 提供 Docker 资格认证测试,以验证您的设备是否可以使用 AWS 提供的 Docker 应用程序管理器组件下载您可以使用自定义 Docker 容器组件运行的 Docker 容器映像。有关创建自定义 Docker 文档的更多信息,请参阅 运行 Docker 容器

要运行 Docker 资格认证测试,您的被测设备必须满足以下要求才能部署 Docker 应用程序管理器组件。

  • Greengrass 核心设备上安装的 Docker Engine 1.9.1 或更高版本。版本 20.10 是经验证可与 AWS IoT Greengrass Core 软件配合使用的最新版本。在部署运行 Docker 容器的组件之前,必须直接在核心设备上安装 Docker。

  • 在部署此组件之前,Docker 进程守护程序已启动并在核心设备上运行。

  • 运行 Docker 容器组件的系统用户必须具有根或管理员权限,或者您必须将 Docker 配置为以非根用户或非管理员用户身份运行。

    • 在 Linux 设备上,您可向 docker 组中添加一个用户以调用 docker 命令,无需 sudo

    • 在 Windows 设备上,您可将用户添加到 docker-users 组中以调用 docker 命令,无需管理员权限。

    Linux or Unix

    要添加 ggc_user 或您用于运行 Docker 容器组件的非根用户至 docker 组中,请运行以下命令:

    sudo usermod -aG docker ggc_user

    有关更多信息,请参阅以非根用户身份管理 Docker

    Windows Command Prompt (CMD)

    要添加 ggc_user 或您用于运行 Docker 容器组件的非根用户至 docker-users 组中,请以管理员身份运行以下命令:

    net localgroup docker-users ggc_user /add
    Windows PowerShell

    要添加 ggc_user 或您用于运行 Docker 容器组件的非根用户至 docker-users 组中,请以管理员身份运行以下命令:

    Add-LocalGroupMember -Group docker-users -Member ggc_user

ML 资格认证要求

注意

只有 IDT v4.9.3 支持机器学习功能。

适用于 AWS IoT Greengrass V2 的 IDT 提供 ML 资格认证测试,以验证您的设备是否可以使用 AWS 提供的机器学习组件,通过深度学习运行时TensorFlow Lite ML 框架在本地执行 ML 推理。有关在 Greengrass 设备上运行 ML 推理的更多信息,请参阅 执行机器学习推理

要运行 ML 资格认证测试,您的被测设备必须满足以下要求才能部署机器学习组件。

  • 在运行 Amazon Linux 2 或 Ubuntu 18.04 的 Greengrass 核心设备上,GNU C 库(glibc)版本 2.27 或更高版本已安装在设备上。

  • 在 Armv7l 设备(例如 Raspberry Pi)上,OpenCV-Python 的依赖关系已安装在设备上。运行以下命令以安装依赖关系。

    sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
  • 运行 Raspberry Pi OS Bullseye 的 Raspberry Pi 设备必须满足以下要求:

    • NumPy 1.22.4 或更高版本已安装在设备上。Raspberry Pi OS Bullseye 包含早期版本的 NumPy,因此可以运行以下命令在设备上升级 NumPy。

      pip3 install --upgrade numpy
    • 旧摄像机堆栈已在设备上启用。Raspberry Pi OS Bullseye 包含一个新摄像机堆栈,该堆栈默认处于启用状态且不兼容,因此您必须启用旧摄像机堆栈。

      启用旧摄像机堆栈
      1. 运行以下命令以打开 Raspberry Pi 配置工具。

        sudo raspi-config
      2. 选择接口选项

      3. 选择旧摄像机以启用旧摄像机堆栈。

      4. 重启 Raspberry Pi。

HSM 资格认证要求

AWS IoT Greengrass 提供 PKCS#11 提供程序组件,用于与设备上的 PKCS 硬件安全模块(HSM)集成。HSM 设置取决于您的设备和您选择的 HSM 模块。只要提供了 IDT 配置设置中记录的预期 HSM 配置,IDT 就会获得运行此可选功能资格认证测试所需的信息。