你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:IoT Edge 1.5
重要
IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是较低的版本,请参阅更新 IoT Edge。
本文提供了使用 X.509 证书自动预配一个或多个 Linux IoT Edge 设备的分步说明。 使用 Azure IoT 中心设备预配服务 (DPS)自动预配 Azure IoT Edge 设备。 如果不熟悉自动预配,请在继续之前查看 预配概述 。
下面是使用 X.509 证书预配 IoT Edge 设备的步骤:
- 生成证书和密钥。
- 为单个设备创建 单个注册 ,或为一组设备创建 组注册 。
- 安装 IoT Edge 运行时并将设备注册到 IoT 中心。
X.509 证书允许缩放生产并简化设备预配。 X.509 证书通常排列在证书信任链中。 该链以自签名或受信任的根证书开头,链中的每个证书对下一个较低证书进行签名。 此模式创建了从设备上安装的根证书到每个中间证书,再到最终的下游设备证书的委托信任链。
提示
如果设备具有类似于 TPM 2.0 的硬件安全模块(HSM),请将 X.509 密钥安全地存储在 HSM 中。 了解如何使用 iotedge-tpm2cloud 示例在此蓝图中大规模实现零接触预配。
先决条件
云资源
- 一个活动的 IoT 中心
- Azure 中的一个 IoT 中心设备预配服务实例,该实例已链接到 IoT 中心
- 如果没有设备预配服务实例,则可按照 IoT 中心设备预配服务快速入门的创建新的 IoT 中心设备预配服务和将 IoT 中心和设备预配服务相链接部分的说明进行操作。
- 运行设备预配服务后,从概述页复制“ID 范围”的值。 配置 IoT Edge 运行时时,需要使用此值。
设备要求
使用物理或虚拟 Linux 设备作为 IoT Edge 设备。
生成设备标识证书
设备标识证书是通过证书信任链连接到顶级 X.509 证书颁发机构 (CA) 证书的下游设备证书。 设备标识证书的公用名 (CN) 必须设置为你希望该设备在 IoT 中心内使用的设备 ID。
设备标识证书仅用于预配 IoT Edge 设备,以及通过 Azure IoT 中心对设备进行身份验证。 这些证书不是用于签名的证书。 IoT Edge 设备向模块或下游设备显示的 CA 证书用于验证。 有关详细信息,请参阅 Azure IoT Edge 证书用法详细信息。
创建设备标识证书后,您将拥有两个文件:一个.cer
或.pem
文件,包含证书的公共部分;以及一个.cer
或.pem
文件,包含私钥。 如果在 DPS 中使用组注册,则还需要同一信任证书链中间或根 CA 证书的公钥部分。
要使用 X.509 设置自动预配,需要这些文件:
- 设备标识证书及其私钥证书。 如果创建单个注册,则设备标识证书会上传到 DPS。 私钥会传递到 IoT Edge 运行时。
- 至少具有设备标识和中间证书的全链证书。 完整链证书会传递到 IoT Edge 运行时。
- 证书信任链中的中间或根 CA 证书。 如果创建组注册,则此证书会上传到 DPS。
使用测试证书(可选)
如果没有证书颁发机构来创建新的标识证书并想要尝试此方案,请使用 Azure IoT Edge git 存储库中的脚本来生成测试证书。 仅使用这些证书进行开发测试。 请勿在生产环境中使用它们。
若要创建测试证书,请遵循创建演示证书用于测试 IoT Edge 设备功能中的步骤。 完成两个必需部分以设置证书生成脚本并创建根 CA 证书。 然后,遵循相应的步骤创建设备标识证书。 完成后,将具有以下证书链和密钥对:
<WRKDIR>/certs/iot-edge-device-identity-<name>-full-chain.cert.pem
<WRKDIR>/private/iot-edge-device-identity-<name>.key.pem
IoT Edge 设备上需要这两个证书。 如果您在 DPS 中使用单个注册,则上传 .cert.pem
文件。 如果在 DPS 中使用组注册,则还要在同一证书信任链中上传中间或根 CA 证书。 如果使用演示证书,请使用 <WRKDIR>/certs/azure-iot-test-only.root.ca.cert.pem
证书进行组注册。
创建 DPS 注册
使用生成的证书和密钥在 DPS 中为一个或多个 IoT Edge 设备创建注册。
如果要预配单个 IoT Edge 设备,请创建单个注册。 如果需要预配多个设备,请按照创建 DPS 组注册的步骤进行操作。
在 DPS 中创建注册时,可以声明“初始设备孪生状态”。 在设备孪生中可以设置标记,以便按解决方案中所需的任何指标(例如区域、环境、位置或设备类型)将设备分组。 这些标记用于创建自动部署。
有关设备预配服务中的注册的详细信息,请参阅如何管理设备注册。
创建 DPS 单独注册
单独注册采用设备标识证书的公共部分,并将其与设备上的证书进行匹配。
提示
本文中的步骤适用于 Azure 门户,但你也可使用 Azure CLI 创建单个注册。 有关详细信息,请参阅 az iot dps enrollment。 作为 CLI 命令的一部分,使用 edge-enabled 标志指定注册适用于单个 IoT Edge设备。
在 Azure 门户中,导航到 IoT 中心设备预配服务实例。
在“设置”下,选择“管理注册”。
选择“添加个人注册”,然后完成以下步骤以配置注册:
机制:选择“X.509”。
主要证书 .pem 或 .cer 文件:上传设备标识证书中的公共文件。 如果使用脚本生成了测试证书,请选择以下文件:
<WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem
IoT 中心设备 ID:根据需要,为设备提供一个 ID。 可以使用设备 ID 将单个设备指定为模块部署的目标。 如果未提供设备 ID,将使用 X.509 证书中的公用名 (CN)。
IoT Edge 设备:选择“True”,声明该注册适用于 IoT Edge 设备。
选择此设备可分配到的 IoT 中心:选择要将设备连接到的链接 IoT 中心。 可以选择多个中心,设备将根据所选的分配策略分配到其中的一个中心。
初始设备孪生状态:如果需要,请添加要添加到设备孪生的标记值。 可以使用标记将设备组指定为自动部署的目标。 例如:
{ "tags": { "environment": "test" }, "properties": { "desired": {} } }
选择“保存” 。
在“管理注册”下,可以查看刚创建的注册的“注册 ID”。 请记下该注册 ID,因为预配设备时可能会使用它。
既然此设备已存在注册,IoT Edge 运行时在安装期间可以自动预配设备。
安装 IoT Edge
在本部分,你将准备 IoT Edge 的 Linux 虚拟机或物理设备。 然后安装 IoT Edge。
运行以下命令以添加包存储库,然后将 Microsoft 包签名密钥添加到你的受信任密钥列表中。
重要
2022 年 6 月 30 日,Raspberry Pi OS Stretch 已从第 1 层 OS 支持列表中停用。 若要避免潜在的安全漏洞,请将主机 OS 更新为 Bullseye。
对于支持第 2 层的平台操作系统,Azure IoT Edge 版本中提供了安装包。 请参阅脱机安装或特定版本安装中的安装步骤(可选)。
安装可通过几个命令来完成。 打开终端并运行以下命令:
24.04:
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
22.04:
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
20.04:
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
有关操作系统版本的详细信息,请参阅 Azure IoT Edge 支持的平台。
注意
Azure IoT Edge 软件包受制于每个包(usr/share/doc/{package-name}
或 LICENSE
目录)中的许可条款。 使用包之前,请先阅读许可条款。 安装和使用包即表示你接受这些条款。 如果你不同意许可条款,请不要使用该包。
安装容器引擎
Azure IoT Edge 依赖于 OCI 兼容的容器运行时。 对于生产方案,建议使用 Moby 引擎。 Moby 引擎是官方支持用于 IoT Edge 的容器引擎。 Docker CE/EE 容器映像与 Moby 运行时兼容。 如果使用的是 Ubuntu Core Snap 应用,则 Docker Snap 应用由 Canonical 提供支持,并适用于生产环境。
安装 Moby 引擎。
sudo apt-get update; \
sudo apt-get install moby-engine
默认情况下,容器引擎不会设置容器日志大小限制。 随着时间的推移,这种情况可能会导致设备填满日志并耗尽磁盘空间。 但是,你可以将日志配置为在本地显示,不过这是可选操作。 若要了解有关日志记录配置的详细信息,请参阅 准备在生产环境中部署 IoT Edge 解决方案。
以下步骤说明如何将容器配置为使用 local
日志记录驱动程序作为日志记录机制。
创建或编辑现有 Docker 守护程序的配置文件
sudo nano /etc/docker/daemon.json
将默认日志记录驱动程序设置为
local
日志记录驱动程序,如示例中所示。{ "log-driver": "local" }
重启容器引擎以使更改生效。
sudo systemctl restart docker
安装 IoT Edge 运行时
IoT Edge 服务在 IoT Edge 设备上提供并维护安全标准。 该服务在每次开机时启动,并通过启动 IoT Edge 运行时的其余部分来启动设备。
注意
从版本 1.2 开始, Azure IoT 标识服务 将处理 IoT Edge 的标识预配和管理,以及需要与 IoT 中心通信的其他设备组件。
本部分中的步骤表示在可连接 Internet 的设备上安装最新 IoT Edge 版本的典型过程。 如果需要安装特定版本(如预发行版版本)或在脱机时需要安装,请按照本文后面的 脱机或特定版本安装 步骤作。
提示
如果已有运行较旧版本的 IoT Edge 设备,并且想要升级到最新版本,请使用 Update IoT Edge 中的步骤。 最新版本与先前的 IoT Edge 版本有很大不同,因此需要采取特定的步骤进行升级。
安装最新版本的 IoT Edge 和 IoT 标识服务包(如果不是最新版本):
22.04:
sudo apt-get update; \ sudo apt-get install aziot-edge
20.04:
sudo apt-get update; \ sudo apt-get install aziot-edge
为设备预配其云标识
在设备上安装运行时后,请使用供设备用来连接到设备预配服务和 IoT 中心的信息来设置该设备。
确保你具有以下信息:
- DPS 的“ID 范围”值。 从 Azure 门户中 DPS 实例的概述页获取此值。
- 设备上的设备标识证书链文件。
- 设备上的设备标识密钥文件。
根据 IoT Edge 安装随附的模板文件为设备创建配置文件。
sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
打开 IoT Edge 设备上的配置文件。
sudo nano /etc/aziot/config.toml
找到文件的 Provisioning 节。 取消注释使用 X.509 证书进行 DPS 预配的行,并确保注释掉所有其他预配行。
# DPS provisioning with X.509 certificate
[provisioning]
source = "dps"
global_endpoint = "https://global.azure-devices-provisioning.net"
id_scope = "SCOPE_ID_HERE"
# Uncomment to send a custom payload during DPS registration
# payload = { uri = "PATH_TO_JSON_FILE" }
[provisioning.attestation]
method = "x509"
registration_id = "REGISTRATION_ID_HERE"
identity_cert = "DEVICE_IDENTITY_CERTIFICATE_HERE" # For example, "file:///var/aziot/device-id.pem"
identity_pk = "DEVICE_IDENTITY_PRIVATE_KEY_HERE" # For example, "file:///var/aziot/device-id.key"
# auto_reprovisioning_mode = Dynamic
将
id_scope
的值更新为从 DPS 实例复制的作用域 ID。为设备输入一个
registration_id
,这是设备在 IoT 中心内拥有的 ID。 注册 ID 必须与标识证书的公用名称 (CN) 匹配。将
identity_cert
和identity_pk
的值更新为你的证书和密钥信息。可以将标识证书值作为文件 URI 提供,或者可以使用 EST 或本地证书颁发机构动态颁发。 根据所使用的格式,仅取消注释一行。
可以将标识私钥值作为文件 URI 或 PKCS#11 URI 提供。 根据所使用的格式,仅取消注释一行。
如果使用任何 PKCS#11 URI,请在配置文件中找到 PKCS#11 部分并输入 PKCS#11 配置信息。
有关证书的详细信息,请参阅管理 IoT Edge 证书。
有关预配配置设置的详细信息,请参阅配置 IoT Edge 设备设置。
(可选)找到文件的自动重新预配模式部分。 使用
auto_reprovisioning_mode
参数来配置设备的重新预配行为。 Dynamic - 设备在检测到它可能已从一个 IoT 中心移动到另一个时进行重新预配。 这是默认情况。 AlwaysOnStartup - 设备在重新启动时或在故障导致守护程序重启时进行重新预配。 OnErrorOnly - 从不自动触发设备重新预配。 如果设备在标识预配期间因连接错误而无法连接到 IoT Hub,则每种模式都有隐含的设备重新预配回退方案。 有关详细信息,请参阅 IoT 中心设备重新预配概念。(可选)取消注释
payload
参数以指定本地 JSON 文件的路径。 设备注册时,文件的内容将 作为附加数据发送到 DPS 。 这对于自定义分配很有用。 例如,如果要根据 IoT 即插即用模型 ID 分配设备而无需人工干预。保存并关闭该文件。
应用对 IoT Edge 所做的配置更改。
sudo iotedge config apply
验证是否成功安装
如果运行时成功启动,请转到 IoT 中心,并开始将 IoT Edge 模块部署到设备。
检查您创建的设备预配服务中的个人注册是否已被使用。 在 Azure 门户中,访问你的设备预配服务实例。 打开创建的个人注册的注册详细信息。 注册状态为“已分配”并且设备 ID 已列出。
在设备上运行这些命令,检查是否已安装并运行 IoT Edge。
检查 IoT Edge 服务的状态。
sudo iotedge system status
查看服务日志。
sudo iotedge system logs
列出正在运行的模块。
sudo iotedge list
后续步骤
通过设备预配服务注册过程,可以在预配新设备时设置设备 ID 和设备孪生标记。 使用这些值以具有自动设备管理的单个设备或设备组为目标。 了解如何使用 Azure 门户或使用 Azure CLI 大规模部署和监视 IoT Edge 模块。