配置设备以运行 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是用于登录待测试设备的user-name并且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 账户,然后将该用户的用户名和密码存储在 Credential Manager 实例中LocalSystem account.

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

  2. 在中创建用户 LocalSystem Windows 设备上的帐户。为您创建的每个用户运行以下命令。对于默认的 Greengrass 用户,请将us-nameggc_user. Replace密码使用安全密码。

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

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

    为您要在凭证管理器中配置的每个用户运行以下命令。对于默认的 Greengrass 用户,请将us-nameggc_user. Replace密码使用您之前设置的用户的密码。

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

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

    注意

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

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

IDT 将对所测试设备中的各种目录和文件执行操作。其中一些操作需要提升的权限(使用 sudo)。为了自动执行这些操作,IDTAmazon 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必须更新配置文件才能设置GreengrassV2TokenExchangeRoleParametertrue.

  • 必须使用以下最低信任策略配置自定义 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语句和passRoleForResourcestest user 策略中的语句,如以下示例所示:

    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 NagineGreengrass 核心设备上安装的 1.9.1 或更高版本。版本 20.10 是经验证可与Amazon IoT GreengrassCore 软件。在部署运行 Docker 容器的组件之前,必须直接在核心设备上安装 Docker。

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

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

    • 在 Linux 设备上,您可以将一个用户添加到docker要呼叫的群组dockerWITHOUTsudo.

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

    Linux or Unix

    添加ggc_user,或者你用来运行 Docker 容器组件的非 root 用户,dockergroup,运行以下命令。

    sudo usermod -aG docker ggc_user

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

    Windows Command Prompt (CMD)

    添加ggc_user,或者你用来运行 Docker 容器组件的用户,docker-usersgroup,作为管理员运行以下命令。

    net localgroup docker-users ggc_user /add
    Windows PowerShell

    添加ggc_user,或者你用来运行 Docker 容器组件的用户,docker-usersgroup,作为管理员运行以下命令。

    Add-LocalGroupMember -Group docker-users -Member ggc_user

ML 资格认证要求

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

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

  • 在运行亚马逊 Linux 2 或 Ubuntu 18.04 的 Greengrass 核心设备上,GNU C 库(glibc) 设备上安装的 (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 的树莓派设备必须满足以下要求:

    • 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. Select界面选项.

      3. Select传统相机以启用旧版摄像机堆栈。

      4. 重启 Raspberry Pi。

HSM 资格认证要求

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