在 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 相同的安全性。
具体说明因你的方法而异,因此请确保接下来按照正确选项卡上的说明操作。
任务如下:
先决条件
物理 TPM 和虚拟 TPM 解决方案的先决条件相同。
云资源
- 一个活动的 IoT 中心
- Azure 中的一个 IoT 中心设备预配服务实例,该实例已链接到 IoT 中心
- 如果没有设备预配服务实例,则可按照 IoT 中心设备预配服务快速入门的创建新的 IoT 中心设备预配服务和将 IoT 中心和设备预配服务相链接部分的说明进行操作。
- 运行设备预配服务后,从概述页复制“ID 范围”的值。 配置 IoT Edge 运行时时,需要使用此值。
设备要求
一台 Windows 开发计算机。 本文使用 Windows 10。
注意
将 TPM 证明与设备预配服务结合使用时,需要 TPM 2.0。
使用 TPM 时,只能创建单个设备预配服务注册,不能创建组设备预配服务注册。
设置 TPM
在本部分中,你将生成一个可用于检索 TPM 的注册 ID 和认可密钥的工具。
遵循设置 Windows 开发环境中的步骤安装和生成适用于 C 的 Azure IoT 设备 SDK。
在提升的 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
输出窗口会显示设备的“注册 ID”和“认可密钥” 。 请复制这些值,以便稍后在设备预配服务中为设备创建单个注册时使用。
提示
如果你不想使用 SDK 工具检索信息,则需要寻找其他方法来获取预配信息。 认可密钥对于每个 TPM 芯片都是唯一的,需从与之关联的 TPM 芯片制造商处获取。 可为 TPM 设备派生唯一的 注册 ID。 例如,可以创建认可密钥的 SHA-256 哈希。
获得注册 ID 和认可密钥后,即可继续操作。
创建设备预配服务注册
使用 TPM 的预配信息在设备预配服务中创建单个注册。
在设备预配服务中创建注册时,可以声明“初始设备孪生状态”。 在设备孪生中可以设置标记,以便按解决方案中所用的任何指标(例如区域、环境、位置或设备类型)将设备分组。 这些标记用于创建自动部署。
提示
本文中的步骤适用于 Azure 门户,但你也可使用 Azure CLI 创建单个注册。 有关详细信息,请参阅 az iot dps enrollment。 作为 CLI 命令的一部分,使用 edge-enabled 标志指定注册适用于单个 IoT Edge设备。
在 Azure 门户中,转到你的 IoT 中心设备预配服务实例。
在“设置”下,选择“管理注册”。
选择“添加单个注册”,然后完成以下步骤以配置注册:
对于“机制”,请选择“TPM”。
提供从 VM 或物理设备中复制的认可密钥和注册 ID。
根据需要,为设备提供一个 ID。 如果未提供设备 ID,则会使用注册 ID。
选择“True”,以声明 VM 或物理设备是 IoT Edge 设备。
选择要将设备连接到的已链接 IoT 中心,或者选择“链接到新的 IoT 中心”。 可以选择多个中心,设备将会根据所选分配策略被分配到其中一个中心。
根据需要,将标记值添加到“初始设备孪生状态”。 可以使用标记将设备组指定为模块部署的目标。 有关详细信息,请参阅大规模部署 IoT Edge 模块。
选择“保存” 。
既然此设备已存在注册,IoT Edge 运行时在安装期间可以自动预配设备。
安装 IoT Edge
在本节中,你将准备 IoT Edge 的 Windows VM 或物理设备。 然后安装 IoT Edge。
Azure IoT Edge 依赖于 OCI 兼容的容器运行时。 Moby 是一种基于 Moby 的引擎,包含在安装脚本中,这意味着无需执行其他步骤来安装引擎。
要安装 IoT Edge 运行时:
以管理员身份运行 PowerShell。
使用 PowerShell 的 AMD64 会话,不要使用 PowerShell(x86)。 如果不确定你使用的是哪种会话类型,请运行以下命令:
(Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"]
运行 Deploy-IoTEdge 命令,它将执行以下任务:
- 检查 Windows 计算机的版本是否受支持
- 启用容器功能
- 下载 moby 引擎和 IoT Edge 运行时
. {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; ` Deploy-IoTEdge
如果出现提示,请重启设备。
在设备上安装 IoT Edge 时,可使用附加参数来修改过程,包括:
- 定向流量,使其通过代理服务器
- 将安装程序指向本地目录进行脱机安装
有关这些附加参数的详细信息,请参阅用于带有 Windows 容器的 IoT Edge 的 PowerShell 脚本。
为设备预配其云标识
在设备上安装运行时后,请使用供设备用来连接到设备预配服务和 IoT 中心的信息来配置该设备。
了解在前面部分中收集的设备预配服务 ID 范围和设备注册 ID 。
在管理员模式下打开 PowerShell 窗口。 安装 IoT Edge 时,请务必使用 PowerShell 的 AMD64 会话,而不要使用 PowerShell (x86)。
Initialize-IoTEdge
命令在计算机上配置 IoT Edge 运行时。 该命令默认为使用 Windows 容器手动预配。 通过-Dps
标志使用设备预配服务,而不是手动预配。请将
paste_scope_id_here
和paste_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 模块部署到你的设备。 在设备上使用以下命令验证是否已成功安装并启动运行时。
检查 IoT Edge 服务的状态。
Get-Service iotedge
检查过去 5 分钟的服务日志。
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog
列出正在运行的模块。
iotedge list
后续步骤
使用设备预配服务注册过程可以在预配新设备的同时,设置设备 ID 和设备孪生标记。 可以在自动设备管理中,使用这些值将单个设备或设备组指定为目标。