配置设备以运行 IDT 测试 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

配置设备以运行 IDT 测试

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

在主机上安装 Java

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

你可以使用 Java 版本 8 或更高版本。我们建议您使用 Amazon Cor retto OpenJDK 长期支持版本。需要版本 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 用户,请将用户名替换为。 ggc_user密码替换为安全密码。

    net user /add user-name password
  3. 从微软下载该PsExec实用程序并将其安装到设备上。

  4. 使用该 PsExec 实用程序将默认用户的用户名和密码存储在 LocalSystem 账户的凭据管理器实例中。

    为要在凭据管理器中配置的每个用户运行以下命令。对于默认 Greengrass 用户,请将用户名替换为。 ggc_user密码替换为您之前设置的用户密码。

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

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

    注意

    在 Windows 设备上,该 LocalSystem 帐户运行 Greengrass 核心,您必须使用 PsExec 该实用程序在帐户中存储用户信息。 LocalSystem使用凭据管理器应用程序将此信息存储在当前登录用户的 Windows 帐户中,而不是 LocalSystem帐户中。

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

IDT 将对所测试设备中的各种目录和文件执行操作。其中一些操作需要提升的权限(使用 sudo)。要自动执行这些操作,Amazon IoT GreengrassV2 版 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 角色作为被测设备假设的与Amazon资源交互的令牌交换角色。有关创建 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资源添加到测试用户策略的passRoleForResourcesroleAliasResources句和语句中,如以下示例所示:

    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 设置以运行 Amazon IoT Greengrass 资格认证套件

码头工人资格要求

IDT f Amazon IoT Greengrass or V2 提供 Docker 资格测试,以验证您的设备是否可以使用Amazon提供的 Docker 应用程序管理器组件下载您可以使用自定义 Dock er 容器组件运行的 Docker 容器镜像。有关创建自定义 Docker 组件的信息,请参阅运行 Docker 容器

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

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

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

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

    • 在 Linux 设备上,您可以将用户添加到docker群组中,无需用户即可调用docker命令sudo

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

    Linux or Unix

    要将或用于运行 Docker 容器组件的非 root 用户添加到ggc_userdocker群组,请运行以下命令。

    sudo usermod -aG docker ggc_user

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

    Windows Command Prompt (CMD)

    要将或您用来运行 Docker 容器组件的用户添加到ggc_userdocker-users群组,请以管理员身份运行以下命令。

    net localgroup docker-users ggc_user /add
    Windows PowerShell

    要将或您用来运行 Docker 容器组件的用户添加到ggc_userdocker-users群组,请以管理员身份运行以下命令。

    Add-LocalGroupMember -Group docker-users -Member ggc_user

机器学习资格要求

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

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

  • 在运行亚马逊 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 资格要求

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