发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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

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

关注

评论

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

OceanBase 存储引擎详解

OceanBase 数据库

并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3

刘悦的技术博客

多线程 协程 Python3 协程原理

企业帮助中心的搭建步骤

小炮

帮助中心

零基础学编程?从这本豆瓣评分9.2的入门级神作开始

图灵社区

Python 零基础

一站式运维管理工具平台 OCP 到底有多好用,看这篇文章就够了!

OceanBase 数据库

数据对接 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 数据可视化控件 大屏

【模拟面试-2年测试工程师】「脱产1年」如何能拿下offer

测试猿温大大

OceanBase 在线体验环境,现已上线!

OceanBase 数据库

抓到Netty一个隐藏很深的内存泄露Bug | 详解Recycler对象池的精妙设计与实现

bin的技术小屋

中间件 池化技术 java netty 内存池

Map-Reduce 思想在 ABAP 编程中的一个实际应用案例

Jerry Wang

mapreduce abap CRM系统 企业级应用 3月月更

【面试-性能测试工程师】如何在项目中练手性能测试,莫慌

测试猿温大大

面试 性能测试 测试工程师

鸿蒙开发必备书籍【收藏】

坚果

鸿蒙 3月月更

Linux性能优化—内存实战篇

Linux服务器开发

性能优化 内存管理 Linux服务器开发 Linux内核 内核源码

【直播回顾】OpenHarmony知识赋能第四期第二课——GPIO驱动开发

OpenHarmony开发者

OpenHarmony GPIO 驱动开发

全新 OceanBase 社区版开发者中心 ODC 核心功能解读

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

一个 测试岗 面了 30 多人,不能再真实了...

六十七点五

软件测试 面试题 自动化测试 经验总结 测试工程师

抖音获客,抖音SEO询盘系统源码开发,思路分享,开发者掏心窝的说......

yunluohd168

短视频获客 抖音获客系统源码 大数据获客 抖音SEO获客源码

【三级等保】三级等保服务费用一年大概要多少?一年需要测评一次嘛?

行云管家

网络安全 等保 等级保护 三级等保

资产管理系统开发解决方案

低代码小观

企业管理 资产管理 CRM系统 企业管理软件

详解4种微服务框架接入Istio方案

华为云开发者联盟

微服务 k8s istio 服务治理 微服务框架

【模拟面试-4年实习】工作4年业务做的不深入,如何突破

测试猿温大大

面试 测试工程师

Meetup预告| AIOps指标相关算法体系分享

云智慧AIOps社区

机器学习 大数据 算法 AIOPS 智能运维

恒源云(Gpushare)_【存储优化】/hy-tmp可以扩/缩容啦

恒源云

云计算 存储 tmp

Apifox才是最强Postman替代品,看看国产软件到底有对牛!

Liam

后端 Postman API swagger java开发工具

ZEGO 自研客户端配置管理系统 —— 云控

ZEGO即构

后台开发 客户端配置 音视频架构

测试开发【Mock平台】01开篇:平台设计和整体规划

MegaQi

测试开发 测试平台开发教程 测试干货

HSC推出「万物生长计划」 赋能虎符交易所HOO新应用场景

区块链前沿News

Hoo 虎符交易所 虎符智能链

国内首届DataOps+MLOps meetup回顾

星策开源社区

人工智能 机器学习 DevOps Meetup MLOps

【模拟面试-半年实习】项目经验不突出,如何让面试官「眼前一亮」

测试猿温大大

面试 电商 测试工程师

2022年济南正规等保测评公司名单(排名不分先后)

行云管家

等保 等保测评 等保2.0 济南

两小时,掌握四个数字化工具!

明道云

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