写点什么

使用 AWS IoT Core 即时预配置

  • 2019-09-19
  • 本文字数:3770 字

    阅读完需:约 12 分钟

使用 AWS IoT Core 即时预配置

在之前的一篇有关设备证书即时注册的博文中,我们讨论了如何使用即时预配置 (JITR) 激活设备证书及如何在自动注册设备后立即将策略附加到证书中。JITR 可触发注册事件。您必须创建 AWS IoT Core 规则来侦听注册事件主题,并且当确定注册事件时,会在机载设备中执行您的 Lambda 代码。


在此博文中,我将向您展示如何使用新功能即时预配置 (JITP) 来预置资源。JITP 使您可以登记自己的设备,无需创建 AWS IoT Core 规则和 Lambda 函数。您需要将预置模板与 IAM 角色一起附加到 CA 证书中。JITP 将基于预置模板创建、更新和附加资源。该角色将被输入,以授予 AWS IoT 权限来调用代表您进行预置所需的 API。


下图显示了 JITR 与 JITP 之间的差异。



JITP 流的步骤比 JITR 少

创建 CA 证书

与 JITR 一样,首先要创建一个 CA 证书。我们在终端中只使用 OpenSSL 创建示例 CA 证书。


$ openssl genrsa -out rootCA.key 2048$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
复制代码


执行这些命令后,我们将获得两个文件 rootCA.key 和 rootCA.pem,稍后,我们将这两个文件用作示例 CA 证书。

创建服务角色

由于 JITP 需要权限才能调用 AWS IoT Core API,我们将创建一个角色并将该角色与 CA 证书关联。通过 IAM 控制台创建此角色比使用 CLI 更容易。我们已经具有策略 AWSIoTThingsRegistration,该策略可用于创建 JITP 特定的服务角色。


在 IAM 控制台中,选择“角色”,然后选择“创建角色”按钮。



为 JITP 创建角色


在选择将使用此角色的服务下,选择 IoT。



将 IoT 选为可信服务


审核策略。输入该角色的名称和描述。



审核策略



提供角色名称和角色描述


现在,我们拥有名称为 JITPRole 的角色,当我们注册或更新 CA 证书时,我们将在 registrationConfig 字段中使用该角色。

创建预置模板

必须将预置模板附加到 CA 证书中,以便 JITP 工作流在设备首次连接到 AWS IoT Core 时预置模板中指定的资源。对于 JITP,我们可以在模板中使用下列参数。


  • AWS::IoT::Certificate::Country

  • AWS::IoT::Certificate::Organization

  • AWS::IoT::Certificate::OrganizationalUnit

  • AWS::IoT::Certificate::DistinguishedNameQualifier

  • AWS::IoT::Certificate::StateName

  • AWS::IoT::Certificate::CommonName

  • AWS::IoT::Certificate::SerialNumber

  • AWS::IoT::Certificate::Id

  • 前 7 个预置模板参数的值从所预置设备的证书中的主题字段中提取。 AWS::IoT::Certificate::Id 参数指的是内部生成的 ID,而非证书中包含的 ID。 您可以使用 AWS IoT 规则内的 principle() 函数获取此 ID 值。


我们使用的是以下示例模板。我们需要转义模板中的 templateBody 值的 JSON 字符串。



{"templateBody":"{ \"Parameters\" : { \"AWS::IoT::Certificate::Country\" : { \"Type\" : \"String\" }, \"AWS::IoT::Certificate::Id\" : { \"Type\" : \"String\" } }, \"Resources\" : { \"thing\" : { \"Type\" : \"AWS::IoT::Thing\", \"Properties\" : { \"ThingName\" : {\"Ref\" : \"AWS::IoT::Certificate::Id\"}, \"AttributePayload\" : { \"version\" : \"v1\", \"country\" : {\"Ref\" : \"AWS::IoT::Certificate::Country\"}} } }, \"certificate\" : { \"Type\" : \"AWS::IoT::Certificate\", \"Properties\" : { \"CertificateId\": {\"Ref\" : \"AWS::IoT::Certificate::Id\"}, \"Status\" : \"ACTIVE\" } }, \"policy\" : {\"Type\" : \"AWS::IoT::Policy\", \"Properties\" : { \"PolicyDocument\" : \"{\\\"Version\\\": \\\"2012-10-17\\\",\\\"Statement\\\": [{\\\"Effect\\\":\\\"Allow\\\",\\\"Action\\\": [\\\"iot:Connect\\\",\\\"iot:Publish\\\"],\\\"Resource\\\" : [\\\"*\\\"]}]}\" } } } }","roleArn":"arn:aws:iam::123456789012:role/JITPRole"}
复制代码


我们声明,我们在使用两个预置参数 AWS::IoT::Certificate::Country 和 AWS::IoT::Certificate::Id,而且我们将在“资源”部分中使用它们。JITP 工作流会将参考替换为从证书中提取的值,并且会预置模板中指定的资源。


更具体地说,JITP 工作流将创建:


  • 一个事物资源。

  • 一个策略资源。

  • 然后,它将会:

  • 将策略附加到证书中。

  • 将证书附加到事物中。

  • 将证书状态更新为 ACTIVE。

  • 现在,我们将整个模板与我们从前面的步骤中获得的角色 ARN 一起放入本地文件 provisioning-template.json 中。


有关预置模板的更多信息,请参阅 AWS IoT Core 开发人员指南中的预置模板。

注册 CA 证书

现在,我们已创建示例 CA 证书,我们将在 AWS IoT Core 中注册该证书。要使用 JITP,我们需要将模板和角色与 CA 证书关联。我们可以在注册 CA 证书或稍后更新 CA 证书时完成此步骤。在此示例中,我们将使用模板和角色 ARN 注册 CA 证书。您还可以调用 UpdateCACertificate API 或 update-ca-certificate CLI 命令来更改 CA 证书的状态、启用自动注册状态并通过提供模板和角色 ARN 来设置注册配置。


遵照以下步骤来注册 CA 证书。


首先,我能从 AWS IoT Core 中获取注册代码。此代码将被用作私有密钥验证证书的公用名。


$ aws iot get-registration-code
复制代码


然后,我们为私有密钥验证证书生成一个密钥对。我们将获得名为 verificationCert.key 的文件。


$ openssl genrsa -out verificationCert.key 2048
复制代码


现在,我们执行以下命令来创建私有密钥验证证书的 CSR。我们将获得名为 verificationCert.csr 的文件。


$ openssl req -new -key verificationCert.key -out verificationCert.csr
复制代码


现在,我们需要使用注册代码设置证书的公用名字段:


国家/地区名称(2 个字母代码)[AU]:


州名或省名(全名)[]:


所在地名称(例如,城市)[]:


组织名称(例如,公司)[]:


组织部门名称(例如,部门)[]:


公用名(例如服务器 FQDN 或您的名称)[]: XXXXXXXREGISTRATION-CODEXXXXXXX


电子邮件地址 []:


我们使用 CSR 创建私有密钥验证证书。当我们注册 CA 证书时,我们将使用从此步骤中获得的 verificationCert.pem 文件。


$ openssl x509 -req -in verificationCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out verificationCert.pem -days 500 -sha256
复制代码


最后,我们调用 register-ca-certificate CLI 命令来注册 CA 证书。


$ aws iot register-ca-certificate --ca-certificate file://rootCA.pem --verification-cert file://verificationCert.pem --set-as-active --allow-auto-registration --registration-config file://provisioning-template.json
复制代码


我们将收到返回的 HTTP 200 响应,包括已注册的 CA 证书 ARN 和证书 ID。注册 CA 证书后,我们仍然可以调用 UpdateCACertificate API 或 update-ca-certificate CLI 命令在需要时更新注册的 CA 证书。

使用 CA 证书签署的证书自动预置设备

现在,我们已在启用 auto-registration-status 的状态下注册示例 CA 证书并将该证书与预置模板关联,我们可以尝试使用 CA 证书来创建设备证书。设备证书在首次连接到 AWS IoT Core 时自动预置。


要创建设备证书,我们在终端中运行以下命令:


$ openssl genrsa -out deviceCert.key 2048$ openssl req -new -key deviceCert.key -out deviceCert.csr
复制代码


运行这些命令后,我们可以设置证书的主题字段,如国家/地区名称、公用名等等,并将它们传递到 JITP 中。


现在,我们使用设备证书连接到 AWS IoT Core。连接时,我们需要发送设备证书及其注册 CA 证书(示例 CA 证书)。


$ openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.crt -days 365 -sha256
复制代码


然后,我们会创建一个包含设备证书及其注册 CA 证书的文件。


$ cat deviceCert.crt rootCA.pem > deviceCertAndCACert.crt
复制代码


最后,我们需要 MQTT Mosquitto 客户端使用设备证书连接并发布到 AWS IoT Core 中:


$ mosquitto_pub --cafile root.cert --cert deviceCertAndCACert.crt --key deviceCert.key -h <prefix>.iot.us-east-1.amazonaws.com -p 8883 -q 1 -t foo/bar -I anyclientID --tls-version tlsv1.2 -m "Hello" -d
复制代码


注:root.cert 是 AWS IoT 根证书。要下载该证书,单击此处。在当前目录中将该证书另存为“root.cert”。 由于终端节点的 不同,我们需要运行 describe-endpoint 命令来检索终端节点。


$ aws iot describe-endpoint
复制代码


连接并发布至 AWS IoT Core 后,预置工作流将在 TLS 握手期间自动预置模板中指定的资源。在示例中:


  • 我们为设备创建了事物资源。

  • 创建了示例 CA 证书签署的证书,并将该证书的状态设置为 ACTIVE。

  • 创建了策略资源并将其附加到证书中,并且将证书附加到事物资源上。

  • 现在,设备已完全预置好。您可以使用 AWS IoT 控制台验证这些资源的预置是否符合预期。

小结

在此博文中,我们展示了 JITP 如何简化预置 IoT 设备所需的工作。AWS IoT Core 现在可提供独立、安全的预置系统,帮助制造商在登记设备时节省时间。我们希望您尝试此新功能。欢迎在评论区中留下问题和其他反馈。

了解更多

AWS IoT Core


https://aws.amazon.com/iot-core/


AWS IoT Core 功能


https://aws.amazon.com/iot-core/features/


AWS IoT 设备预置


http://docs.aws.amazon.com/iot/latest/developerguide/iot-provision.html


本文转载自 AWS 博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/setting-up-just-in-time-provisioning-with-aws-iot-core/


2019-09-19 10:31894
用户头像

发布了 1959 篇内容, 共 167.7 次阅读, 收获喜欢 82 次。

关注

评论

发布
暂无评论
发现更多内容

Visual Studio 现已支持新的、更简洁的解决方案文件(slnx)格式

追逐时光者

C# .net 微软 Visual Studio 2022

.NET应用中的高效分布式同步解决方案

追逐时光者

C# .net 微软

一个基于 .NET 8 开源免费、高性能、低占用的博客系统

追逐时光者

C# .net 微软 博客系统

Visual Studio 2022 中的 EF Core 反向工程和模型可视化扩展插件

追逐时光者

.net 微软 Visual Studio

一个开源免费、功能丰富的 WPF 自定义控件资源库

追逐时光者

C# .net 微软 WPF

Exchange安全漏洞分析:ProxyOracle攻击链详解

qife122

网络安全 exchange

一个遵循 Material Design 设计规范、开源免费的 Blazor 组件库

追逐时光者

C# .net 微软

一套基于 .NET 开源的低代码、权限、工作流、动态接口平台

追逐时光者

C# .net 微软

一款轻量、友好、跨平台的 .NET SDK 管理工具

追逐时光者

C# .net 微软

.NET 使用 DocNET 库快速高效的操作 PDF 文档

追逐时光者

C# .net 微软 PDF

一款开源免费、通用的 WPF 主题控件包

追逐时光者

C# .net 微软 WPF

2025 年实用、全面的 VS Code 插件推荐!

追逐时光者

Visual Studio

DDD本质论:从哲学到数学,再到工程实践的完整指南之理论篇

canonical

领域驱动设计 DDD 领域模型 可逆计算

使用Quarkus构建首个Keycloak MCP服务器实战指南

qife122

Quarkus MCP

C#中IsNullOrEmpty和IsNullOrWhiteSpace的区别?

追逐时光者

C# .net 微软

一款超级经典复古的 Windows 9x 主题风格 Avalonia UI 控件库,满满的回忆杀!

追逐时光者

C# .net 微软

使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统

追逐时光者

C# .net 微软 权限管理系统

不写一行代码 .NET 使用 FluentCMS 快速构建现代化内容管理系统(CMS)

追逐时光者

C# .net 微软 CMS

EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了!

追逐时光者

C# .net 微软 EF Core

一款基于 .NET 开源免费、轻量快速、跨平台的 PDF 阅读器

追逐时光者

C# .net 微软

使用 xUnit 快速编写 .NET 应用单元测试

追逐时光者

C# .net 微软 单元测试

GitHub 汉化神器,2步快速解锁中文化 GitHub 界面!

追逐时光者

GitHub

一种更简单的方式运行 C# 代码,简化 C# 开发体验!

追逐时光者

C# .net 微软

一款实用的 Visual Studio 发布部署插件,助力提高部署效率!

追逐时光者

.net 微软 Visual Studio 2022

一个基于 .NET 开源、便捷、高效的远程桌面控制工具

追逐时光者

C# .net 微软 远程工具

提高 .NET 编程效率的 Visual Studio 使用技巧和建议!

追逐时光者

.net 微软 Visual Studio 2022

Multi Rename Tool for Mac(批量重命名工具)

春天的风暖暖的

精选 5 款 .NET 开源、功能强大的工作流系统,告别重复造轮子!

追逐时光者

C# .net 微软

一个基于 .NET 8 + Ant Design Blazor 开发的简洁现代后台管理框架

追逐时光者

C# .net 微软

推荐 3 种 .NET Windows 桌面应用程序自动更新解决方案

追逐时光者

C# .net 微软

2个 GitHub 实用辅助神器,帮你快速了解和上手 GitHub 开源项目(附带GitHub加速器)!

追逐时光者

GitHub

使用 AWS IoT Core 即时预配置_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章