写点什么

利用 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:49851
用户头像

发布了 1848 篇内容, 共 113.5 次阅读, 收获喜欢 78 次。

关注

评论

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

由浅入深,聊聊OkHttp的那些事(很长,很细节)

Petterp

android okhttp

宋红康2023版Java视频发布

小谷哥

大数据培训零基础的方法有哪些

小谷哥

GaussDB(DWS)性能调优:indexscan导致的性能问题识别与优化

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

用javascript分类刷leetcode22.字典树(图文视频讲解)

js2030code

JavaScript LeetCode

大咖说·图书分享|狼书(卷3):Node.js高级技术

大咖说

node.js 阿里云 开发者

嵌入式ARM设计编程(一) 简单数据搬移

timerring

arm

IoTLink 版本更新 v1.5.2

山东云则信息科技

物联网

倒带ChunJun,同心前行|2022年度回顾&2023年共建规划

袋鼠云数栈

开源

前端工程师leetcode算法面试必备-二叉树的构造和遍历

js2030code

JavaScript LeetCode

设计模式第五讲-装饰器模式和代理模式详解

C++后台开发

数据结构 设计模式 后端开发 Linux服务器开发 C++开发

云小课|使用SpringBoot快速构建FunctionGraph HTTP函数

华为云开发者联盟

开发 HTTP 华为云 企业号 2 月 PK 榜 华为云开发者联盟

前端工程师leetcode算法面试必备-二叉树深度广度遍历

js2030code

JavaScript LeetCode

Flink X Hologres构建企业级Streaming Warehouse

阿里云大数据AI技术

大数据 数仓 企业号 2 月 PK 榜 分层技术

如何快速实现多指标计算

jiangxl

实战分享,电路板设计后这样干,一个人也能轻松搞定项目!

华秋PCB

PCB PCB打样 PCB设计

特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】

汀丶人工智能

人工智能 自然语言处理 知识图谱 2月月更 2月日更

前端培训学习方法有哪些

小谷哥

熊猫小说家功能升级:支持阅读原文+更多功能等你解锁

澜舟孟子开源社区

NLP 大模型 AIGC 澜舟科技

镜舟城市行|镜舟联手永洪科技共话数智运营

镜舟科技

数据库

fabric.js开发图片编辑器的细节实现

秦少卫

架构 编辑器 Fabric.js 前端编辑器

安擎董事长俞跃渊:打造智能算力,创新产业价值

科技热闻

软件测试/测试开发 | Web 控件定位与常见操作

测试人

软件测试 自动化测试 测试开发 Web自动化测试

TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理

TDengine

数据库 tdengine 时序数据库

安势信息入选 SegmentFault思否「2022 中国新锐技术先锋企业」

安势信息

软件成分分析 清源CleanSource SCA 安势信息 技术先锋 SegmentFault

2023最新Java面试手册(性能优化+微服务架构+并发编程+开源框架)

小小怪下士

Java 程序员 面试 金三银四

Cloud Kernel SIG月度动态:发布ANCK 5.10-013版本、完整支持Intel SPR处理器

OpenAnolis小助手

开源 版本 内核 龙蜥社区 sig

MRS+LakeFormation:打造一站式湖仓,释放数据价值

华为云开发者联盟

大数据 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

特定领域知识图谱融合方案:学以致用-问题匹配鲁棒性评测比赛验证【四】

汀丶人工智能

自然语言处理 知识图谱 2月月更 2月日更 实体对齐

StarRocks获评「2022 中国开源社区健康案例」!

StarRocks

数据库 开源

详解Redisson分布式限流的实现原理

华为云开发者联盟

后端 开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

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