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

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

配置设备以运行 IDT 测试

要启用 IDT 运行设备资格认证测试,您必须配置主机以访问设备以及在设备上配置用户权限。

在主机上安装 Java

从 IDT v4.2.0 开始,适用于的可选资格认证测试Amazon IoT Greengrass需要 Java 才能运行。

您可以使用 Java 8 或更高版本。我们建议Amazon Corretto 11要么OpenJDK 11.

配置主机以访问所测试设备

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 帐户的凭据管理器实例中。

在 Windows 设备上配置用户

  1. 打开 Windows 命令提示符 (cmd.exe) 作为管理员。

  2. 在中创建用户 LocalSystem Windows 设备上的帐户。对您需要创建的每个用户运行以下命令。对于默认的 Greengrass 用户,请替换用户名称ggc_user. Replace密码使用安全的密码。

    net user /add user-name password
  3. 下载并安装PsXec 实用程序来自微软在设备上。

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

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

    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)。为了自动执行这些操作,IDT 用于Amazon IoT GreengrassV2 必须能够在不提示输入密码的情况下使用 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 角色名称不使用此前缀,请添加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 设置以运行Amazon IoT Greengrass资格认证套

Docker 资格要求

适用于的 IDTAmazon IoT GreengrassV2 提供 Docker 资格测试,以验证您的设备是否可以使用Amazon-提供Docker 应用程序经理组件来下载可以使用自定义 Docker 容器组件运行的 Docker 容器映像。有关创建自定义 Docker 组件的信息,请参阅运行 Docker 容器.

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

  • Docker 引擎您的 Greengrass 核心设备已安装 1.9.1 或更高版本。版本 20.10 是经验证可与连接器一起使用的最新版本。在部署运行 Docker 容器的自定义组件之前,必须直接在核心设备上安装 Docker。

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

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

    • 在 Linux 设备上,您可以将一个用户添加到docker要打电话的群组docker命令不包括sudo.

    • 在 Windows 设备上,您可以将一个用户添加到docker-users要打电话的群组docker没有管理员权限的命令。

    Linux or Unix

    添加ggc_user,或者用于运行 Docker 容器组件的非 root 用户,转到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 资格要求

适用于的 IDTAmazon IoT GreengrassV2 提供机器学习资格测试,以验证您的设备是否可以使用Amazon-提供机器学习组件使用在本地执行 ML 推理深度学习运行时要么TensorFlow 精简版ML 框架。有关在 Greengrass 设备上运行 ML 推理的更多信息,请参阅执行机器学习推理.

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

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

  • 在 Armv7L 设备上,例如树莓派,设备上安装的 OpenCV-Python 的依赖关系。运行以下命令以安装依赖项。

    sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
  • 在树莓派设备上,设备上安装了 OpenCV-Python。运行以下命令以安装 OpenV-Python。

    pip3 install opencv-python
  • 在运行树莓派 OS Bullseye 的树莓派设备上, NumPy 设备已安装 1.22.4 或更高版本。树莓派 OS Bullseye 包括一个早期版本的 NumPy,因此你可以运行以下命令来升级 NumPy 在设备上。

    pip3 install --upgrade numpy

HSM 资格认证要求

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