在 Windows 上使用 TPM 大规模创建和预配 IoT Edge 设备

适用于:“是”图标 IoT Edge 1.1

重要

IoT Edge 1.1 终止支持日期为 2022 年 12 月 13 日。 请查看 Microsoft 产品生命周期,了解此产品、服务、技术或 API 的受支持情况。 有关更新到最新版本的 IoT Edge 的详细信息,请参阅 更新 IoT Edge

本文提供有关使用受信任的平台模块 (TPM) 为 Windows 设备自动预配 Azure IoT Edge 的说明。 可以通过 Azure IoT 中心设备预配服务自动预配 IoT Edge 设备。 如果你不熟悉自动预配过程,请在继续操作之前查看预配概述

注意

从 Azure IoT Edge 1.2 版开始,将不再支持带有 Windows 容器的 Azure IoT Edge。

请考虑使用新方法在 Windows 设备上运行 IoT Edge:Azure IoT Edge for Linux on Windows

若要使用 Azure IoT Edge for Linux on Windows,可按照等效操作指南中的步骤操作。

本文概述了两种方法。 根据解决方案的体系结构选择你的首选方法:

  • 使用物理 TPM 硬件自动预配 Windows 设备。
  • 自动预配运行模拟 TPM 的 Windows 设备。 建议仅将此方法用作测试方案。 模拟 TPM 无法提供与物理 TPM 相同的安全性。

具体说明因你的方法而异,因此请确保接下来按照正确选项卡上的说明操作。

任务如下:

  • 检索设备的预配信息。
  • 为设备创建个人注册。
  • 安装 IoT Edge 运行时并将设备连接到 IoT 中心。

先决条件

物理 TPM 和虚拟 TPM 解决方案的先决条件相同。

云资源

  • 一个活动的 IoT 中心
  • Azure 中的一个 IoT 中心设备预配服务实例,该实例已链接到 IoT 中心

设备要求

一台 Windows 开发计算机。 本文使用 Windows 10。

注意

将 TPM 证明与设备预配服务结合使用时,需要 TPM 2.0。

使用 TPM 时,只能创建单个设备预配服务注册,不能创建组设备预配服务注册。

设置 TPM

在本部分中,你将生成一个可用于检索 TPM 的注册 ID 和认可密钥的工具。

  1. 遵循设置 Windows 开发环境中的步骤安装和生成适用于 C 的 Azure IoT 设备 SDK。

  2. 在提升的 PowerShell 会话中运行以下命令,以生成 SDK 工具来检索 TPM 的设备预配信息。

    cd azure-iot-sdk-c\cmake
    cmake -Duse_prov_client:BOOL=ON ..
    cd provisioning_client\tools\tpm_device_provision
    make
    .\tpm_device_provision
    
  3. 输出窗口会显示设备的“注册 ID”和“认可密钥” 。 请复制这些值,以便稍后在设备预配服务中为设备创建单个注册时使用。

提示

如果你不想使用 SDK 工具检索信息,则需要寻找其他方法来获取预配信息。 认可密钥对于每个 TPM 芯片都是唯一的,需从与之关联的 TPM 芯片制造商处获取。 可为 TPM 设备派生唯一的 注册 ID。 例如,可以创建认可密钥的 SHA-256 哈希。

获得注册 ID 和认可密钥后,即可继续操作。

创建设备预配服务注册

使用 TPM 的预配信息在设备预配服务中创建单个注册。

在设备预配服务中创建注册时,可以声明“初始设备孪生状态”。 在设备孪生中可以设置标记,以便按解决方案中所用的任何指标(例如区域、环境、位置或设备类型)将设备分组。 这些标记用于创建自动部署

提示

本文中的步骤适用于 Azure 门户,但你也可使用 Azure CLI 创建单个注册。 有关详细信息,请参阅 az iot dps enrollment。 作为 CLI 命令的一部分,使用 edge-enabled 标志指定注册适用于单个 IoT Edge设备。

  1. Azure 门户中,转到你的 IoT 中心设备预配服务实例。

  2. 在“设置”下,选择“管理注册”。

  3. 选择“添加单个注册”,然后完成以下步骤以配置注册:

    1. 对于“机制”,请选择“TPM”。

    2. 提供从 VM 或物理设备中复制的认可密钥和注册 ID。

    3. 根据需要,为设备提供一个 ID。 如果未提供设备 ID,则会使用注册 ID。

    4. 选择“True”,以声明 VM 或物理设备是 IoT Edge 设备。

    5. 选择要将设备连接到的已链接 IoT 中心,或者选择“链接到新的 IoT 中心”。 可以选择多个中心,设备将会根据所选分配策略被分配到其中一个中心。

    6. 根据需要,将标记值添加到“初始设备孪生状态”。 可以使用标记将设备组指定为模块部署的目标。 有关详细信息,请参阅大规模部署 IoT Edge 模块

    7. 选择“保存” 。

既然此设备已存在注册,IoT Edge 运行时在安装期间可以自动预配设备。

安装 IoT Edge

在本节中,你将准备 IoT Edge 的 Windows VM 或物理设备。 然后安装 IoT Edge。

Azure IoT Edge 依赖于 OCI 兼容的容器运行时。 Moby 是一种基于 Moby 的引擎,包含在安装脚本中,这意味着无需执行其他步骤来安装引擎。

要安装 IoT Edge 运行时:

  1. 以管理员身份运行 PowerShell。

    使用 PowerShell 的 AMD64 会话,不要使用 PowerShell(x86)。 如果不确定你使用的是哪种会话类型,请运行以下命令:

    (Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"]
    
  2. 运行 Deploy-IoTEdge 命令,它将执行以下任务:

    • 检查 Windows 计算机的版本是否受支持
    • 启用容器功能
    • 下载 moby 引擎和 IoT Edge 运行时
    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Deploy-IoTEdge
    
  3. 如果出现提示,请重启设备。

在设备上安装 IoT Edge 时,可使用附加参数来修改过程,包括:

  • 定向流量,使其通过代理服务器
  • 将安装程序指向本地目录进行脱机安装

有关这些附加参数的详细信息,请参阅用于带有 Windows 容器的 IoT Edge 的 PowerShell 脚本

为设备预配其云标识

在设备上安装运行时后,请使用供设备用来连接到设备预配服务和 IoT 中心的信息来配置该设备。

  1. 了解在前面部分中收集的设备预配服务 ID 范围和设备注册 ID 。

  2. 在管理员模式下打开 PowerShell 窗口。 安装 IoT Edge 时,请务必使用 PowerShell 的 AMD64 会话,而不要使用 PowerShell (x86)。

  3. Initialize-IoTEdge 命令在计算机上配置 IoT Edge 运行时。 该命令默认为使用 Windows 容器手动预配。 通过 -Dps 标志使用设备预配服务,而不是手动预配。

    请将 paste_scope_id_herepaste_registration_id_here 的占位符值替换为前面收集的数据。

    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Initialize-IoTEdge -Dps -ScopeId paste_scope_id_here -RegistrationId paste_registration_id_here
    

验证是否成功安装

如果运行时成功启动,请进入 IoT 中心,开始将 IoT Edge 模块部署到你的设备。 在设备上使用以下命令验证是否已成功安装并启动运行时。

  1. 检查 IoT Edge 服务的状态。

    Get-Service iotedge
    
  2. 检查过去 5 分钟的服务日志。

    . {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
    
  3. 列出正在运行的模块。

    iotedge list
    

后续步骤

使用设备预配服务注册过程可以在预配新设备的同时,设置设备 ID 和设备孪生标记。 可以在自动设备管理中,使用这些值将单个设备或设备组指定为目标。

了解如何使用 Azure 门户Azure CLI 大规模部署和监视 IoT Edge 模块。