已更新 2025年7月
AWS IoT Fleet Provisioning 演示
引言
AWS IoT Fleet Provisioning 演示展示了为一批 IoT 设备预置唯一证书,
并使用 Fleet Provisioning(队列预置)功能将其注册到 AWS IoT 核心的方法。该演示
展示了能在板上生成公私密钥对的设备是如何利用
通用声明证书(遍及整批设备),为其生成的密钥对
向 AWS IoT 核心请求唯一证书,并在 AWS IoT 核心中将自身注册为
AWS IoT 事物资源的过程。
有关AWS IoT Fleet Provisioning 功能的更多信息,请参阅
使用 Fleet Provisioning 预置无证书设备
(位于 AWS IoT 开发者指南中)。Fleet Provisioning 有两种预置工作流程:
通过声明预置
和通过受信任的用户预置
。
此演示展示了如何使用声明预置工作流程,
通过向 AWS IoT 核心注册通用声明,使用唯一证书预置设备的过程。此演示项目使用
Visual Studio 免费社区版
。
在启动 Fleet Provisioning 演示之前,我们建议您使用 corePKCS11相互身份验证演示 (MQTT) 来连接 AWS IoT。 这将确保 AWS IoT 连接正常运行以及 corePKCS11 凭证管理 功能正常执行。
源代码组织
演示项目名为
fleet_provisioning_demo.sln
1FreeRTOS-Plus/Demo/AWS/Fleet_Provisioning_Windows_Simulator/Fleet_Provisioning_With_CSR_Demo
在运行演示前设置 AWS 资源
要使用 AWS IoT 核心的 Fleet Provisioning 功能,您必须在您的 AWS 账户中设置 IAM 角色和 Provisioning 模板。这些 AWS 资源可通过 AWS 控制台 设置,也可通过 AWS CLI 以编程方式进行设置。下列说明将指导您 使用 AWS CLI 设置这些资源。(在下列示例命令中,将
<aws-region>
<aws-account-id>
-
导航至 FreeRTOS-Plus/Demo/AWS/Fleet_Provisioning_Windows_Simulator/CSR_Demo
中的演示子文件夹。
-
创建队列预置模板所需的 IAM 角色。
1aws iam create-role \2 --role-name "FleetProvisioningDemoRole" \3 --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Action":"sts:AssumeRole","Effect":"Allow","Principal":{"Service":"iot.amazonaws.com"}}]}' -
将 “AWSIoTThingsRegistration” 策略附加至上一步骤创建的角色上。这 使得该角色可以注册新的 AWS IoT 事物。
1aws iam attach-role-policy \2 --role-name "FleetProvisioningDemoRole" \3 --policy-arn arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration -
创建 AWS IoT 策略, Fleet Provisioning 声明将把其附加至新创建的事物上。您可以修改 IoT 事物策略示例,使其可同演示一起使用, 该示例可在 "example_iot_thing_policy.json
" 文件中找到 。在运行以下命令之前,请修改
文件, 将所有出现在尖括号中的下列项目都替换掉:example_iot_thing_policy.json- 将 替换成您所选择的 AWS 区域(例如 us-west-2)<aws-region>
- 将 替换成您的 AWS 账户 ID<aws-account-id>
1aws iot create-policy \2--policy-name FleetProvisioningDemoThingPolicy \3--policy-document file://example_iot_thing_policy.json - 将
-
创建 IoT 事物类型。此事物类型将被附加至 Fleet Provisioning 演示创建的所有事物上, 以方便清理。
1aws iot create-thing-type --thing-type-name "fp_demo_things" -
创建将用于预置演示应用程序的模板资源。这只需 进行一次。有关队列预置模板的更多信息,请参阅 本指南
。 与演示一起使用的示例队列预置模板可在 example_fleet_provisioning_template.json
文件中找到 。
1aws iot create-provisioning-template2 --template-name FleetProvisioningDemoTemplate3 --provisioning-role-arn arn:aws:iam::<aws-account>:role/FleetProvisioningDemoRole4 --template-body file://example_fleet_provisioning_template.json5 --enabled -
完成队列预置模板后, 您可使用下列 CLI 命令验证其是否创建成功。
1aws iot describe-provisioning-template --template-name FleetProvisioningDemoTemplate -
创建声明证书和私钥,用于演示中的声明预置工作流程。 在命令的输出中,要注意步骤 10 中的 "
"。certificateId1aws iot create-keys-and-certificate2 --certificate-pem-outfile "ClaimCertificate.pem"3 --public-key-outfile "ClaimPubKey.pem"4 --private-key-outfile "ClaimPrivateKey.pem"5 --set-as-active -
为声明证书创建 IoT 策略。下列 AWS CLI 命令就是 用于创造 IoT 政策的命令。声明证书策略示例可在 "example_claim_policy.json
" 文件中找到 。运行
前,请修改 "example_claim_policy.json", 将所有出现在尖括号中的下列项目都替换掉:create-policy command- 将 替换成您所选择的 AWS 区域(例如 us-west-2)<aws-region>
- 将 替换成您的 AWS 账户 ID<aws-account-id>
1aws iot create-policy \2 --policy-name FleetProvisioningDemoClaimPolicy \3 --policy-document file://example_claim_policy.json - 将
-
将策略附加至声明证书上。将
替换为 您在步骤 8 中创建的声明证书的 ID。<Claim-Cert-ID>
1aws iot attach-policy \2 --target "arn:aws:iot:<aws-region>:<aws-account-id>:cert/<Claim-Cert-ID>" \3 --policy-name "FleetProvisioningDemoClaimPolicy"
配置演示项目
-
此演示使用 FreeRTOS-Plus-TCP TCP/IP 堆栈, 因此,请按照 TCP/IP 入门项目的说明操作:
-
安装了必要组件 (如 WinPCap)。
-
设置了 MAC 地址(可选)。
-
在您的主机上选择以太网接口 。
上述设置应在
文件 FreeRTOSConfig.h 中更改
(该文件位于 Fleet Provisioning 演示项目中)。
- 配置 。用户必须定义下列宏,才能让演示运行:demo_config.h
1democonfigMQTT_BROKER_ENDPOINT2democonfigROOT_CA_PEM3democonfigPROVISIONING_TEMPLATE_NAME
- 将您在步骤 6 中创建的声明证书和私钥文件转换为 DER 格式。这一步
可手动完成,也可使用所包含的 Python 脚本 来完成。fleet_provisioning_demo_setup.py
方案 1 - 使用所包含的 Python 脚本:
-
此脚本需使用 Python 3。如果您未安装“加密” Python 模块, 请运行命令
pip3 install cryptography -
导航至文件夹
...FreeRTOS-Plus\Demo\AWS\Fleet_Provisioning_Windows_Simulator\Fleet_Provisioning_With_CSR_Demo -
将密钥和证书 PEM 文件的绝对路径传递至
, 这将在运行脚本的相同位置输出等效的 .dat 文件。fleet_provisioning_demo_setup.py -
将
文件移至*.dat...\FreeRTOS-Plus\Demo\AWS\Fleet_Provisioning_Windows_Simulator\Fleet_Provisioning_With_CSR_Demo -
运行脚本:
1python3 fleet_provisioning_demo_setup.py -c ClaimCertificate.pem -k ClaimPrivateKey.pem
方案 2 - 手动转换 PEM 文件:
- 采用您所喜欢的方法将 PEM 文件转换为 PKCS #11兼容的 DER 格式。
以下是使用 OpenSSL 转换此文件格式的示例:
- openssl x509 -outform der -in "ClaimCertificate.pem" -out corePKCS11_Claim_Certificate.dat
- openssl pkcs8 -topk8 -inform PEM -outform der -in "ClaimPrivateKey.pem" -out corePKCS11_Claim_Key.dat
- 将 文件移至*.dat...\FreeRTOS-Plus\Demo\AWS\Fleet_Provisioning_Windows_Simulator\Fleet_Provisioning_With_CSR_Demo
构建演示项目
演示项目使用社区免费版 Visual Studio。
要构建演示,请执行如下操作:
-
从 Visual Studio IDE 中打开 Visual Studio 解决方案 文件
。FreeRTOS-Plus/Demo/AWS/Fleet_Provisioning_Windows_Simulator/Fleet_Provisioning_With_CSR_Demo/fleet_provisioning_demo.sln -
在 IDE 的 “Build” 菜单中选择 “Build Solution”。
功能
演示展示了 Fleet Provisioning 功能的 声明预置 工作流程,该功能为 AWS IoT 核心所有,该核心使用 corePKCS11 进行凭据管理。
-
演示使用步骤 13 中准备的声明凭证连接到 AWS IoT MQTT 代理。
-
演示使用 corePKCS11创建和存储新的密钥对和证书文件。这些凭据 之后将用于预置新的 AWS IoT 事物。
-
调用 CreateCertificateWithCsr MQTT API
提出证书签名请求 (CSR),以便 AWS IoT 确认并签署 证书。
-
调用 RegisterThing MQTT API
创建新的,且使用密钥对和新签名证书的 AWS IoT 事物。
-
预置新事物后,演示将断开与 AWS IoT MQTT 代理的连接。
-
演示使用新创建的事物凭据连接到 AWS IoT MQTT 代理,以验证 该事物是否已成功注册。
prvFleetProvisioningTask()
下列屏幕截图显示了演示正确执行时的预期输出:
