最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

关注

评论

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

数据开发也能双轮驱动?

乌龟哥哥

10月月更

Sonatype Nexus 管理员初始密码

HoneyMoose

Vue虚拟dom是如何被创建的

yyds2026

Vue

“程”风破浪的开发者|慢慢踏上算法学习之旅

Aion

学习方法 算法 10月月更 “程”风破浪的开发者

Qt|模态窗口如何实现进入页面等待加载数据效果

中国好公民st

c++ qt 10月月更

智能化运维场景分析

阿泽🧸

10月月更 智能化运维

【愚公系列】2022年10月 Go教学课程 035-接口和继承和转换与空接口

愚公搬代码

10月月更

在线问题反馈模块实战(七):安装部署swagger2

bug菌

springboot 项目实战 10月月更

微信小程序云开发收费调整,大家怎么看?

江拥羡橙

微信小程序 云开发 10月月更

el-table表格还可以这么玩

江拥羡橙

Vue 3 Element UI 10月月更

CentOS 上安装 Sonatype Nexus 仓库

HoneyMoose

React源码中的dom-diff

夏天的味道123

React

【资损】资损防控的系统规范-渠道网关类设计

小明Java问道之路

架构 安全 金融 10月月更 资损

Fabric8 Docker Maven Plugin 如何让部署的时候执行 Docker 打包推送

HoneyMoose

Vue中的diff算法深度解析

yyds2026

Vue

“程”风破浪的开发者|代码规范

over℡

学习方法 “程”风破浪的开发者

加密标准中DES与AES到底是什么?两者有啥区别?

wljslmz

信息安全 加密 AES 10月月更 DES

PHP出发(php+apache+MySQL)

江拥羡橙

php MySQL apache 社区 10月月更

GaussDB(DWS)如何实现实时,批量和交付式查询一站式开发

乌龟哥哥

10月月更

CentOS部署Harbor镜像仓库

程序员欣宸

Docker 10月月更 habor

“程”风破浪的开发者|镜像仓库迁移的方法

琦彦

学习方法 Harbor 10月月更 “程”风破浪的开发者

golang中的切片

六月的

Go slice

“程”风破浪的开发者|如何更好的学习专业知识

海风极客

学习方法 10月月更 “程”风破浪的开发者

【一Go到底】第二十一天---defer

指剑

Go golang 10月月更

【设计模式】Java 语言不同的编程范式-第1章

跟着飞哥学编程

设计模式 编程范式 java 编程 10月月更

SAP | 内部表的表类型

暮春零贰

SAP 10月月更 内部表

数据湖(六):Hudi与Flink整合

Lansonli

10月月更 Hudi与Flink整合

Maven docker-maven-plugin 插件 Push 413 错误

HoneyMoose

【资损】资损防控的系统规范-收单类服务设计

小明Java问道之路

架构 安全 金融 10月月更 资损

IP报文在阿里云上的神奇之旅:同地域内云上通信

阿里技术

通信 IP 路由

Webpack中的高级特性

Geek_02d948

webpack

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