

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

# 配置设备以运行 IDT 测试
<a name="device-config-setup"></a>

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

## 在主机上安装 Java
<a name="install-java-for-idt"></a>

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

您可以使用 Java 版本 8 或更高版本。我们建议您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 长期支持版本。需要版本 8 或更高版本。

## 配置主机以访问被测设备
<a name="configure-host"></a>

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

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

1. 在 `device.json` 文件中为每个设备提供用户名和密码。有关更多信息，请参阅 [配置 device.json](set-config.md#device-config)。

您可以使用任何 SSL 实现创建 SSH 密钥。以下说明向你展示了如何使用 [SSH-KEYGEN](https://www.ssh.com/ssh/keygen/) 或 [Pu TTYgen](https://www.ssh.com/ssh/putty/windows/puttygen)（适用于 Windows）。如果您使用的是另一个 SSL 实现，请参阅该实现的文档。

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

**使用 SSH-KEYGEN 创建 SSH 密钥**

1. 创建 SSH 密钥。

   您可以使用 Open SSH **ssh-keygen** 命令创建 SSH 密钥对。如果您的主机上已有一个 SSH 密钥对，则最佳做法是专门为 IDT 创建一个 SSH 密钥对。这样，完成测试后，如果没有输入密码，主机将无法再连接到设备。它还使您能够仅向需要访问远程设备的人员授予访问权限。
**注意**  
Windows 没有安装 SSH 客户端。有关在 Windows 上安装 SSH 客户端的信息，请参阅[下载 SSH 客户端软件](https://www.ssh.com/ssh/#sec-Download-client-software)。

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

   根据提示，输入密钥短语来保护您的 SSH 密钥。有关更多信息，请参阅[生成新的 SSH 密钥](https://www.ssh.com/ssh/keygen/)。

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

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

   **\$1 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 \$1/my/path/myKey.pub**）。有关创建 SSH 密钥和复制公有密钥的更多信息，请参阅 [SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。

**使用 Pu 创建 SSH 密钥TTYgen （仅限 Windows）**

1. 确保您在被测设备上安装了 OpenSSH 服务器和客户端。有关更多信息，请参阅 [OpenSSH](https://www.openssh.com/)。

1. 在被测设备TTYgen上安装 [Pu](https://www.puttygen.com/)。

1. 打开 Pu TTYgen。

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

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

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

   1. 从 Pu TTYgen 窗口复制公钥文本。

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

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

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

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

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

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

## 为 Windows 设备配置用户凭证
<a name="configure-windows-user-for-idt"></a>

要获得基于 Windows 的设备的资格，您必须在被测设备上的LocalSystem 帐户中为以下用户配置用户凭据：
+ 默认 Greengrass 用户（`ggc_user`）。
+ 您用来连接到被测设备的用户。您可以在 [`device.json` 文件](set-config.md#device-config)中配置此用户。

您必须在被测设备上的 LocalSystem 账户中创建每个用户，然后将该用户的用户名和密码存储在LocalSystem 账户的 Credential Manager 实例中。<a name="set-up-windows-device-environment-procedure"></a>

**在 Windows 设备上配置用户**

1. 以管理员身份打开 Windows 命令提示符 (`cmd.exe`)。

1. 在 Windows 设备上的 LocalSystem 帐户中创建用户。为您要创建的每个用户运行以下命令：对于默认 Greengrass 用户，请替换为。*user-name* `ggc_user`*password*替换为安全密码。

   ```
   net user /add user-name password
   ```

1. 从微软下载该[PsExec实用程序](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)并将其安装到设备上。

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

   为要在 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 核心，您必须使用 PsExec 该实用程序在帐户中存储用户信息。 LocalSystem使用凭据管理器应用程序将此信息存储在当前登录用户的 Windows 帐户中，而不是 LocalSystem帐户中。

## 在您的设备上配置用户权限
<a name="root-access"></a>

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

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

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

**将用户添加到 sudo 组**

1. 在被测设备上，运行 `sudo usermod -aG sudo <username>`。

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

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

1. 打开 `/etc/sudoers` 文件，并将以下行添加到文件末尾：

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

## 配置自定义令牌交换角色
<a name="configure-custom-tes-role-for-idt"></a>

您可以选择使用自定义 IAM 角色作为被测设备假设的与 AWS 资源交互的令牌交换角色。有关创建 IAM 角色的信息，请参阅《IAM 用户指南》**中的[创建 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)。

您必须满足以下要求才能允许 IDT 使用您的自定义 IAM 角色。强烈建议您仅向该角色添加最低要求的策略操作。
+ 必须更新 [userdata.json](set-config.md#custom-token-exchange-role-idt) 配置文件才能将 `GreengrassV2TokenExchangeRole` 参数设置为 `true`。
+ 必须使用以下最低信任策略配置自定义 IAM 角色：

------
#### [ JSON ]

****  

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement":[
        {
           "Effect":"Allow",
           "Principal":{
              "Service":[
                 "credentials.iot.amazonaws.com",
                 "lambda.amazonaws.com", 
                 "sagemaker.amazonaws.com" 
              ]
           },
           "Action":"sts:AssumeRole"
        }
     ]
  }
  ```

------
+ 必须使用以下最低权限策略配置自定义 IAM 角色：

------
#### [ JSON ]

****  

  ```
  {
     "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 角色资源相匹配。默认情况下，[测试用户策略](dev-tst-prereqs.md#configure-idt-permissions)允许访问角色名称中带有 `idt-` 前缀的 IAM 角色。如果您的 IAM 角色名称不使用此前缀，请将 `arn:aws:iam::*:role/custom-iam-role-name` 资源添加到测试用户策略的 `roleAliasResources` 语句和 `passRoleForResources` 语句中，如以下示例所示：

    
**Example `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"
           ]
        }
     }
  }
  ```  
**Example `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"
     ]
  }
  ```

## 配置设备以测试可选功能
<a name="optional-feature-config"></a>

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

**Topics**
+ [Docker 资格认证要求](#idt-config-docker-components)
+ [ML 资格认证要求](#idt-config-ml-components)
+ [HSM 资格认证要求](#idt-config-hsm-components)

### Docker 资格认证要求
<a name="idt-config-docker-components"></a>

IDT f AWS IoT Greengrass or V2 提供 Docker 资格测试，以验证您的设备是否可以使用 AWS提供的 [Docker 应用程序管理器组件下载您可以使用自定义 Dock](docker-application-manager-component.md) er 容器组件运行的 Docker 容器镜像。有关创建自定义 Docker 文档的更多信息，请参阅 [运行 Docker 容器](run-docker-container.md)。

要运行 Docker 资格认证测试，您的被测设备必须满足以下要求才能部署 Docker 应用程序管理器组件。
+ <a name="docker-engine-requirement"></a>Greengrass 核心设备上安装的 [Docker Engine](https://docs.docker.com/engine/) 1.9.1 或更高版本。版本 20.10 是经验证可与 AWS IoT Greengrass 核心软件配合使用的最新版本。在部署运行 Docker 容器的组件之前，必须直接在核心设备上安装 Docker。
+ <a name="docker-daemon-requirement"></a>在部署此组件之前，Docker 进程守护程序已启动并在核心设备上运行。
+ <a name="docker-user-permissions-requirement"></a>运行 Docker 容器组件的系统用户必须具有根或管理员权限，或者您必须将 Docker 配置为以非根用户或非管理员用户身份运行。
  + 在 Linux 设备上，您可向 `docker` 组中添加一个用户以调用 `docker` 命令，无需 `sudo`。
  + 在 Windows 设备上，您可将用户添加到 `docker-users` 组中以调用 `docker` 命令，无需管理员权限。

------
#### [ Linux or Unix ]

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

  ```
  sudo usermod -aG docker ggc_user
  ```

  有关更多信息，请参阅[以非根用户身份管理 Docker](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)。

------
#### [ 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 资格认证要求
<a name="idt-config-ml-components"></a>

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

[IDT f AWS IoT Greengrass or V2 提供机器学习资格测试，以验证您的设备是否可以使用 AWS提供的[机器学习组件，使用深度学习](machine-learning-components.md)[运行时或 TensorFlow Lite ML 框架在本地执行机器学习](https://github.com/neo-ai/neo-ai-dlr)推理。](https://www.tensorflow.org/lite/guide/python)有关在 Greengrass 设备上运行 ML 推理的更多信息，请参阅 [执行机器学习推理](perform-machine-learning-inference.md)。

要运行 ML 资格认证测试，您的被测设备必须满足以下要求才能部署机器学习组件。<a name="ml-component-requirements"></a>
+ 在运行 Amazon Linux 2 或 Ubuntu 18.04 的 Greengrass 核心设备上，[GNU C 库](https://www.gnu.org/software/libc/)（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 包含一个新摄像机堆栈，该堆栈默认处于启用状态且不兼容，因此您必须启用旧摄像机堆栈。<a name="raspberry-pi-bullseye-enable-legacy-camera-stack"></a>

**启用旧摄像机堆栈**

    1. 运行以下命令以打开 Raspberry Pi 配置工具。

       ```
       sudo raspi-config
       ```

    1. 选择**接口选项**。

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

    1. 重启 Raspberry Pi。

### HSM 资格认证要求
<a name="idt-config-hsm-components"></a>

AWS IoT Greengrass 提供 [PKCS \$111 提供程序组件](pkcs11-provider-component.md)，用于与设备上的 PKCS 硬件安全模块 (HSM) 集成。HSM 设置取决于您的设备和您选择的 HSM 模块。只要提供了 [IDT 配置设置](set-config.md)中记录的预期 HSM 配置，IDT 就会获得运行此可选功能资格认证测试所需的信息。