NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

利用 AWS IoT Device Management 服务轻松部署设备组

  • 2019-09-25
  • 本文字数:6854 字

    阅读完需:约 22 分钟

利用 AWS IoT Device Management 服务轻松部署设备组

简介

物联网 (IoT) 提供了前所未有的规模在先前无法触及的领域采集数据、执行数字化交互。这种机会的重要性以多种不同的方式影响着个人、组织和政府机构。例如,在制造业中,许多现有产品制造商正在竞相将互连功能集成到他们的产品中,并将大量此类产品投入市场。初创公司和其他组织正在围绕连接能力和基于云的服务集成打造全新产品线。


为了解决预配置和管理互连事物的复杂难题,制造商需要设法简化各类任务并实现自动化,例如预配置设备标识,并将这些标识提供给安全且可重复的方式制造的设备。AWS IoT Device Management 服务提供了一项批量预配置互连事物的新功能,为这项艰巨任务提供了有力支持。


这一新功能允许客户一次性注册大量设备。AWS IoT Core 中每个事物的主体和权限配置均由证书、事物和策略资源构成。无论您的业务是什么性质,在使用 AWS IoT 服务开发解决方案时,您都需要创建一个“事物”来存储有关各设备的信息,创建证书来为“事物”提供安全凭证,并通过将证书附加到“事物”的适当策略来设置权限。AWS IoT 批量预配置功能可以简化注册流程并实现流程自动化。


以下是来自 AWS 客户 Trimble 的真实示例。Trimble 素以 GPS 技术而闻名,它将各种定位技术(包括 GPS、激光、光学和惯性技术)与应用程序软件、无线通信和服务相集成,以提供完整的商业解决方案。 “AWS IoT Device Management 帮助我们简化了设备注册过程,这使我们能够满足互连设备的生产吞吐量计划,”Trimble 高级工程师 Jim Coleman 这样说道。[1] Coleman 先生在 AWS reInvent 2017 大会的演讲中还分享了他的团队使用 AWS IoT 批量预配置功能将设备预配置吞吐量提高了 4 倍的故事。[2]


有关 AWS IoT 证书、事物、策略以及 AWS IoT 安全模型其余部分的更多详细信息,请参阅这篇文章。

IoT 队组预配置使用案例

在 AWS,我们一切从客户出发,在设计服务时立足客户视角反推工作。在考虑预配置使用案例时,我们自然也应采用这样的工作方法。我们的客户将如何与互连设备进行交互? 这种设备是否会有用户界面? 客户是否需要将其与移动设备配对? 是否有可供此设备连接、可通过浏览器配置的 WiFi 接入点? 它是否需要进行配置? 是否会有与该设备相关的服务订阅?


虽然我们不会尝试在此博文中回答上述所有问题,但我们将利用这些问题的影响范围,指导我们确定如何探索批量预配置解决方案的设计。让我们考虑这样一种情景:我们的客户从零售店购买了一台设备,通过蓝牙将其与运行用于配置设备的应用程序的移动设备配对。配置好设备后,通常设备的常规操作不再需要用到移动应用程序。该设备基本上采用独立运作方式,并具有自己的“身份”。


在工厂制造设备时,设备预配置有一组证书、一个事物名称,以及一项或多项 AWS IoT 策略。在设备开机并配置了移动应用程序的互联网访问权限后,设备可以直接连接到 AWS IoT Core 服务,提供凭证,并通过提供有效证书进行身份验证。已连接的设备有权根据预配置的策略与 AWS IoT Core 服务进行交互。

查看选项

虽然本文重点介绍的是 AWS IoT Device Management 批量预配置功能,但 AWS IoT Core 中还有其他选项可用于批量预配置设备。AWS IoT Core 包含一个名为“即时注册 (JITR)”的功能集,允许在首次连接设备时,向 AWS IoT Core 注册由客户提供的证书颁发机构 (CA) 签署的预配置及设备部署证书。可以在这篇文章中找到有关 AWS IoT JITR 功能的更多详细信息。

探索 AWS IoT Device Management 批量预配置功能

为了有效利用 AWS IoT Device Management 批量预配置功能,您需要在开始预配置任务之前准备好一些 AWS 资源。这些资源包括预配置模板、S3 存储桶位置、服务角色和数据文件。此外,您还需要创建 X.509 证书并生成证书签名请求 (CSR)。接下来,我们将进一步深入介绍这些资源。

创建预配置模板

预配置模板包含在使用模板预配置设备时需要替换的变量。词典(映射)用于为模板中使用的变量提供值。批量预配置任务将在任务运行时使用 JSON 数据文件作为替换变量值。


以下是最简单的预配置模板的完整示例。有关构建这些模板的更多详细信息,请参阅此处的 AWS IoT Core 文档。


将下面的内容粘贴到文件中,并将此文件另存为 provisioning-template.json。


{  "Parameters": {    "ThingName": {      "Type": "String"    },    "SerialNumber": {      "Type": "String"    },    "CSR": {      "Type": "String"    }  },  "Resources": {    "thing": {      "Type": "AWS::IoT::Thing",      "Properties": {        "ThingName": {          "Ref": "ThingName"        },        "AttributePayload": {          "version": "v1",          "serialNumber": {            "Ref": "SerialNumber"          }        }      }    },    "certificate": {      "Type": "AWS::IoT::Certificate",      "Properties": {        "CertificateSigningRequest": {          "Ref": "CSR"        },        "Status": "ACTIVE"      }    },    "policy": {      "Type": "AWS::IoT::Policy",      "Properties": {        "PolicyDocument": "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\",\"Action\": [\"iot:Publish\"],\"Resource\": [\"*\"]}]}"      }    }  }}

复制代码

创建证书和证书签名请求 (CSR)

接下来,我们将为设备创建证书和签名请求。在本示例中,我们将预配置 3 台使用唯一证书的设备。在本示例中,我们将在运行 Amazon Linux 的 AWS EC2 实例上使用 openssl 命令来创建证书。以下命令将为全部 3 台设备分别创建证书私钥文件和 CSR 文件。


openssl req -new -newkey rsa:2048 -nodes -keyout device_one.key -out device_one.csr -subj "/C=US/ST=WA/L=Seattle/O=MyOrg/CN=MyDept"
复制代码


openssl req -new -newkey rsa:2048 -nodes -keyout device_two.key -out device_two.csr -subj “/C=US/ST=WA/L=Seattle/O=MyOrg/CN=MyDept”


openssl req -new -newkey rsa:2048 -nodes -keyout device_three.key -out device_three.csr -subj "/C=US/ST=WA/L=Seattle/O=MyOrg/CN=MyDept"
复制代码

生成 JSON 数据文件并将其复制到 S3 存储桶

创建好预配置模板和 CSR 文件后,我们就可以构建 JSON 数据文件了。数据文件必须是使用换行符分隔的 JSON 文件。每行均包含预配置一台设备的所有参数值。在本示例中,我们的数据文件应如下所示:


{"ThingName": "device-one", "SerialNumber": "001", "CSR": “*** CSR FILE CONTENT ***"}{"ThingName": "device-two", "SerialNumber": "002", "CSR": “*** CSR FILE CONTENT ***"}{"ThingName": "device-three", "SerialNumber": "003", "CSR": “*** CSR FILE CONTENT ***"}
复制代码


请注意,上面的示例中省略了上文中的 CSR 文件内容。CSR 文件内容应设置为单行格式,并作为 CSR 参数的值包含在在内。格式设置正确的 CSR 文件内容字符串应删除 —–BEGIN CERTIFICATE REQUEST—– 和 —–END CERTIFICATE REQUEST—– 这两行,并将换行符或回车符替换为转义序列 \n,使得内容可以排列在一个字符串内。


以下示例展示了如何将 CSR 文件内容转换为单个字符串。下面是未经修改的示例 CSR 文件内容:


-----BEGIN CERTIFICATE REQUEST-----MIICkjCCAXoCAQAwTTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ4wDAYDVQQKEwVNeU9yZzEPMA0GA1UEAxMGTXlEZXB0MIIBIjANBgkqhkiG9w0BAQEFAAZCAQ8AMIIBCgKCAQEA5F5erQEDXqR0QgwDPlAE8u36c6XrpxA080KyaW8BQl0ZOwrxwZwtO/hpcg86d97DfY1gpw8RqftPEaVJe3451CWoc8a5AKpJg82LQroQI8DNkdHl+wgdkaf9GvYzFiDLIQ3oNGa27Zx58Ve8qh+ymAo6g3+dkdCfbcJhW/XqaJZeF5+lXGDXdrNotRealnm6kVJxMAqxEcJGpxDIRCaTjAESyLcZPyOnEGBuUs68eKT6P2Wiyv8rTaO9E59FaSNcl8AMiK23AJt5sql1ZybBV8o+WCQ3L2+nZnJVK9TME0ZZ+18AnfVKFhZYcoV2/UxXMAa3T6LFzw6DAhrH3QIDAQABoAAwDQYJKoZIhvcNAQEFBQADggEBAKCaWAvRargxBa9k1zZ2nI7y1mpuzTcgoOMjIDR/9DxGjS913AtDfpYm/cM+1x38lNfe3qRQHTmw3UnPUlNJSLTA6rCepllpMQSeXgaG60PTJ6/h0zvPwdUg1JOEE3lxlSJz4pHiT2Sdmyleg1hp7jezFqGEelKd+Xfdbfp7rNBESIq1ymWdagXnsyWjN34JqvWiS6J4NWzO2zlFkHghkbMOwOZJRrZuyOVscjDZVgqYHt9xJD4Rm6U4L6uFQabHElw2IwT6izSCzU50Ahjj89snBCKnLWCe0XTbojVkIg5RofqzP1VwYtx5ORq93/YOxHqrpWDTa7q64BFzp1v7LlQ=-----END CERTIFICATE REQUEST-----
复制代码


如果上面的内容包含在名为 device-one.csr 的文件中,则可以运行以下命令将文件处理为格式正确的字符串。


grep -v REQUEST device-one.csr | awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' > single-string-file.out
复制代码


文件 single-string-file.out 包含格式设置为单个字符串的 CSR 文件,此字符串可在 bulk-provisioning-data.json 文件中使用。


上述命令的示例输出如下所示。请注意,换行符已替换为“\n”,并且 BEGIN 和 END 行已删除。在数据文件中包含指定的各设备的单字符串 CSR 内容。


MIICkjCCAXoCAQAwTTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQH\nEwdTZWF0dGxlMQ4wDAYDVQQKEwVNeU9yZzEPMA0GA1UEAxMGTXlEZXB0MIIBIjAN\nBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5F5erQEDXqR0QgwDPlAE8u36c6Xr\npxA080KyaW8BQl0ZOwrxwZwtO/hpcg86d97CfY1gpw8RqftPEaVJe3451CWoc8a5\nAKpJg82LQroQI8DNkdHl+wgdkaf9GvYzFiDLIQ3oNGa27Zx58Ve8qh+ymAo6g3+d\nkdCfbcJhW/XqaJZeF5+lXGDXdrPccioASwybogusVJxMAqxEcJGpxDIRCaTjAES\nyLcZPyOnEGBuUs68eKT6P2Wiyv8rTaO9E59FaSNcl8ASillYAJt5sql1ZybBV8o+\nWCQ3L2+nZnJVK9TME0ZZ+18AnfVGFhZYcoV2/UxXMAa3T6LFzw6DAhrH3QIDAQAB\noAAwDQYJKoZIhvcNAQEFBQADNotRealAKCaWAvRargxBa9k1zZ2nI7y1mpuzTwooOMj\nIDR/9DxGjS913AtDfpYm/cM+1x38lNfe3qRQHTmw3UnPUlNJSLTA6rCepllpMQSe\nXgaG60PTJ6/h0zvLwdUg1JOEE3lxlSJz4pHiT2Sdmyleg1hp7jezFqGEelKd+Xfd\nbfp7rNBESIq1ymWdagXnsyWjN34JqvWiS6J4NWzO2zlFkHghkbMOwOZJRrZuyOVs\ncjDZVgqYHt9x
复制代码


将此 JSON 文件另存为 bulk-provisioning-data.json,并将此文件复制到位于您将运行预配置任务的区域内的 S3 存储桶中的某个位置。

创建服务角色

执行预配置任务时,IoT 服务必须能够在某个 S3 存储桶中找到数据文件。您可以使用现有存储桶,也可以创建一个新存储桶,专门用于在 AWS IoT Core 服务中预配置设备。无论选择哪种方式,您都需要创建一个角色,允许 AWS IoT Core 访问存储桶以检索数据文件。


创建角色时,信任策略应如下所示:



{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}
复制代码


创建策略以提供您的 S3 存储桶的权限。确保正确输入您的存储桶名称。


可根据以下示例指导您操作:



{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::replace_with_your_bucket_name/*" ] } ]}
复制代码


将该策略附加到角色。


接下来,您可以将 AWS 托管策略附加到该角色,以提供成功执行预配置步骤所需的 AWS IoT Core 服务权限。在 IAM 控制台中,您可以搜索“AWSIoTThings”以查找“AWSIoTThingsRegistration”AWS 托管策略。除了在之前步骤中创建的 S3 权限策略之外,还要将此策略附加到您的角色。


现在您已经创建了角色,请注意记录好角色 ARN,因为您将在后面的步骤中用到它。

运行批量预配置任务

现在就到了大家期盼已久的部分,运行批量预配置任务! 在此之前的所有步骤是为了创建此项活动所需的数据或配置。要运行批量预配置,您需要使用具有适当权限的用户,针对 AWS IoT Core 支持的区域安装和配置 AWS CLI。此示例使用的是附加了 AWS 托管策略 arn:aws:iam::aws:policy/AWSIoTFullAccess 的 IAM 用户。除了这项策略之外,请确保执行命令的 IAM 用户具有 IAM:PassRole 权限。


可以通过内联策略,为 IAM 用户添加 IAM:PassRole 权限。示例策略如下所示:



{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ]}
复制代码


切记将示例命令中的值替换为模板文件、数据文件、数据文件存储桶和角色 ARN 的相应值。


aws iot start-thing-registration-task --template-body file:///home/ec2-user/provisioning-template.json --input-file-bucket replace_with_your_bucket_name --input-file-key bulk-provisioning-data.json --role-arn arn:aws:iam::123456789012:role/iot-bulk-provisioning-role
复制代码


成功运行命令后,您应该会收到如下所示的任务 ID 输出:


{"taskId": "5d111206-093c-4ab3-1234-b2f14b0c208d"}
复制代码


您可以使用 list-thing-registration-tasks 命令检查最近执行的任务,如下所示。


aws iot list-thing-registration-tasks{"taskIds": ["d62ded50-1ac6-4424-5678-84fed7b9f916","5d111206-093c-4ab3-1234-b2f14b0c208d"]}
复制代码


接下来,您可以使用 describe-thing-registration-task 命令查看详细信息并查看注册任务的状态,如下所示。


aws iot describe-thing-registration-task --task-id 5d111206-093c-4ab3-1234-b2f14b0c208d{"status": "Completed","successCount": 3,"creationDate": 1511202602.898,"templateBody": “** removed for readability **","lastModifiedDate": 1511202604.694,"roleArn": "arn:aws:iam::123456789012:role/iot-bulk-provisioning-role","inputFileKey": "bulk-provisioning-data.json","inputFileBucket": "my_bucket","taskId": "5d111206-093c-4ab3-1234-b2f14b0c208d","failureCount": 0,"percentageProgress": 100}
复制代码


最后,您还可以使用 list-thing-registration-task-reports 命令获取更详细的报告,如下所示。


aws iot list-thing-registration-task-reports --task-id eacb0860-e99a-1234-5678-f7a976fc2408 --report-type RESULTS{"resourceLinks": ["https://aws-iot-btp-prod-us-east-1.s3.amazonaws.com/123456789012/a779514e-51f1-4027-beef-73447cafebaca/successful/a779514e-51f1-4027-bd2e-73447efcbaca-1?X-Amz-Security-Token=FQoDYXdzEE4aDOjiGWbWwt7xASULzSLYAb37lzpZBsW7HPpYS0ko8MtWntXCed0QhYKZ0i4hBJZ6JAoqvBE58LcytLTgmxUwg3NS2ZnbYEzH%2FH%2Fxd1XalbertMZCpYg2lF0fpbAjt2B%2FJog%2Fj0FtyflWztC9s0NdaolhFuEj3XNQpL3qHK41jKhITYA3imKdX75Z6x2%2BHRSjCpvvTrQllDLHS3dC1nFOXYXGd1ChjxnkjKkhQGPQlrAoGPR3TMMCpi73fDAtR72yQ0mTF%2FJHEZ4g6umLj%2FAbHlBeiA%2BQ99QhCaUQ3Sco1xL7BpJ7jkuYmCj%2B5ZbRBQ%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20171204T204440Z&X-Amz-SignedHeaders=host&X-Amz-Expires=86400&X-Amz-Credential=ASIAIOE5MA3ZIRF7WHAT%2F20171204%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=600b27c36c484cb8b3bfa707beefde0fe279d92ccb9f2a4848a13e95442b854"],"reportType": "RESULTS"}
复制代码


导航到“resourceLinks”中返回的链接,以获取包含新预配置的事物的对应签名证书值、事物 ARN 和策略 ARN 的 JSON 文件。


如果报告类型为 RESULTS 的 list-thing-registration-task-reports 返回空列表,则可能在处理数据文件时出现了错误。执行 —report-type 参数值设置为 ERRORS 的 list-thing-registration-task-reports 命令可以检索错误详情。返回的链接为错误报告链接,有助于进行故障排查。


至此,我们的 IoT 事物预配置已经完成,接下来即可将证书文件提供给制造部门,以便在事物离开组装生产线之前将其复制到设备中。然后即可将我们的产品打包并运送到零售商处,供客户购买和使用。

总结

使用 AWS IoT 批量预配置功能,设备制造商和供应商可以简化并自动执行多项任务,例如以安全且可重复的方式预配置设备标识,如本文示例中所示。本文的示例仅仅是入门级功能,AWS IoT Device Management 为组织部署和管理庞大的互连事物队组提供了更多功能。希望这篇博文能为您提供实用的帮助信息,我建议您了解有关 AWS IoT Core 新功能的更多信息,以帮助您的组织充分利用这些技术以及 AWS 提供的其他新技术。

了解更多

有关 AWS IoT Device Management 的更多信息


https://aws.amazon.com/iot-device-management


AWS IoT Device Management – 功能


https://aws.amazon.com/iot-device-management/features/


AWS IoT 设备预配置


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


相关文章


[1] AWS 宣布推出一系列全新 IoT 服务;将机器学习带到网络边缘


http://www.businesswire.com/news/home/20171129006079/en/AWS-Announces-Slew-New-IoT-Services-Brings


[2] AWS re:Invent 2017:AWS IoT Device Management (IOT330)


https://youtu.be/Qi1FVPXDPQc?t=1065


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/deploy-fleets-easily-with-aws-iot-device-management-services/


2019-09-25 15:49718
用户头像

发布了 1836 篇内容, 共 92.4 次阅读, 收获喜欢 73 次。

关注

评论

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

面向软件 IT 专业的高校大学生职业思考调查问卷

程序员架构进阶

职业规划 调查报告 就业 28天写作 4月日更

15个问题告诉你如何使用Java泛型

华为云开发者联盟

Java 接口 参数 Java泛型 泛型对象

探讨 JS 对象如何缓存属性的值

零维

JavaScript 大前端 设计模式

关于软件IT专业大学生对专业认知情况的调查问卷

花花

签约计划

如何基于 PANO SDK 实现 iOS 端屏幕共享互动

拍乐云Pano

ios sdk

软件IT专业大学生就业意向问卷调查

三掌柜

签约计划 问卷调查

Worktile 权限设计与实现

PingCode研发中心

项目管理 后端 权限管理

阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持

阿里云视频云

阿里云 音视频 WebRTC 视频解码 视频云

水性硅胶防滑透明浆

C13713145387

可能有点长的Spring MVC入门篇

北游学Java

Java spring ssm Spring MVC

10行C++代码实现高性能HTTP服务

万俊峰Kevin

c c++ workflow Open Source

大学生IT就业方向以及就业培训的调查问卷

麦洛

调查报告 调查采访能力考核 问卷调查

如何构造更好的团队

soolaugust

团队管理 架构

【InfoQ 写作平台 1 周年】我和写作平台剪不断的“孽缘”

三掌柜

征稿 InfoQ 写作平台 1 周年

AI数学基础之:P、NP、NPC问题

程序那些事

人工智能 AI 程序那些事

安全知识

笑春风

anyRTC 智能硬件解决方案

anyRTC开发者

音视频 WebRTC IoT 智能硬件

视频后期怎么添加AR贴图?一招教你搞定!

奈奈的杂社

视频剪辑 视频后期 剪辑 会声会影

鸿蒙系统(HOS)终于上线,微内核操作系统科普

北游学Java

Java 操作系统 微内核

为什么越来越多的人不敢结婚?

徐说科技

婚姻 情感 恐婚

你的开发好帮手:下一代云原生开发工具技术

华为云开发者联盟

云原生 编码 开发工具 代码补全 调测

面向软件 IT 专业的高校大学生就业与专业关联性的问卷调查

谙忆

大学生读书情况调研

hepingfly

读书 调研 大学生 阅读

从UCloud优刻得2020年全年财报,看云计算公司发展之路

Rust从0到1-代码组织-use关键字

rust 代码组织 use

Windows系统下电脑强制卡死、关机的邪恶方法

不脱发的程序猿

程序人生 技术人 4月日更 系统关机 计算机小技巧

圆梦阿里之后,我收集整理了这份“2021春招常见面试真题汇总”

比伯

Java 编程 架构 程序人生 计算机

五一小长假最新产物:阿里巴巴面试的参考指南(泰山版)

学Java关注我

Java 编程 程序员 架构 计算机

IT专业本科生毕业选择【就业】/【攻读硕士】调查问卷

Aldeo

考核 大学生毕业 问卷调查

华为云FusionInsight MRS:千余节点滚动升级业务无中断

华为云开发者联盟

大数据 数据湖 节点 集群 华为云FusionInsight MRS

索引的正确“打开姿势”

华为云开发者联盟

数据库 索引 B-tree Psort 分区

利用 AWS IoT Device Management 服务轻松部署设备组_安全_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章