春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

使用 AWS IoT 来构建全球性的物联网解决方案

  • 2019 年 9 月 20 日
  • 本文字数:2043 字

    阅读完需:约 7 分钟

使用 AWS IoT 来构建全球性的物联网解决方案

客户使用 AWS IoT 来构建全球性的分布式物联网解决方案。连接到 AWS IoT 的设备必须在某个 AWS 区域预置。但在向全球配送设备时,您不需要知道该设备开始运行时将连接到哪个 AWS IoT 区域。在本博文中,我将介绍一个全球性的 AWS IoT 设备预置流程。


预置 IoT 设备

设备必须预置后才能与 AWS IoT Core 配合使用。要预置的设备必须满足下列条件:


  • 该设备应在注册表中作为事物创建。

  • 其 X.509 证书必须已经注册并且与该事物关联。

  • 该证书必须已经附加了一个 IoT 策略。

  • 要连接到 AWS IoT,该设备必须知道 AWS IoT 终端节点。


全球设备预置

为了实现自动化的全球设备预置,我使用了一个利用 Amazon API Gateway、AWS Lambda、AWS IoT Core 和 Amazon DynamoDB 构建的架构。该设备将预置请求发送到一个 Amazon API Gateway 终端节点。Amazon API Gateway 调用一个 AWS Lambda 函数,该函数通过某个方法来找到最适合该设备的区域,然后在该区域预置该设备。


您将在 GitHub 上找到此示例实施、文档以及 AWS CloudFormation 模板。所提供的 AWS CloudFormation 模板用于创建示例实施所需的 AWS 资源。有关示例实施设置以及设备预置的信息,请参阅 https://github.com/aws-samples/aws-iot-global-device-provisioning。


在此例中,最佳的区域为地理上最靠近该设备的区域。为确定最近的区域,您必须确定设备的 IP 地址和地理位置,从而计算距离最近 AWS 区域的距离。如果无法查询到地理位置,则将使用默认 AWS 区域。


在我的实施中,我使用 ipstack.com 来查询设备 IP 地址的地理位置。要使用 ipstack.com API,您需要拥有 API 访问密钥。请遵循 https://ipstack.com 上的注册步骤。确定最佳区域的 AWS Lambda 函数会从某个环境变量中获取该 API 访问密钥。


在成功完成预置后,下列资源和信息将会返回到设备:


  • 一个私有密钥(如果设备尚没有私有密钥)。

  • 一个 X.509 证书。

  • AWS IoT 终端节点。

  • 为确保预置流程的安全,设备必须签署事物名称并将在预置请求将签名发送到 Amazon API Gateway。这种方法与 AWS IoT 中用于自定义授权方的方法类似。每个设备都必须安装有预置用的私有密钥和用于 API Gateway 的 URL。


签名通过验证后,将在一个 DynamoDB 表中执行查询。“未预置”状态意味着该设备可以预置,并且预置流程将会启动。


架构



预置流程

GitHub 存储库包含了一个程序,该程序可以与设备上的预置解决方案交互。除将该程序安装到设备上外,您还需要一个私有密钥和您的 API Gateway URL。


下面是设备预置的工作流程:


  1. 设备使用私有密钥签署它的事物名称,然后向 Amazon API Gateway 一条预置请求。设备使用自己的私有密钥或使用 AWS IoT Core 发布的私有密钥。如果设备使用自己的私有密钥,它将在预置请求中提供代码签名请求 (CSR)。如果请求中没有“CSR”,则 AWS IoT 会创建私有密钥。

  2. 示例预置请求:


{'thing-name': 'mydevice3', 'thing-name-sig': 'R725rxa+vnrMkvsydqS/lbZDDPzBTBXlKI5teO4OX1pKE9jRn/cUailOJczie2zMXUFUtO83sPr+HtRkjJQHDBrA2HDH87G21nMQdJT8K4RGHP6KRfpOhBYT7e162TnKc8DdUBh+Yh4T78dMePuaW4/PPkEbaRf6O7ieBZMITYmeETRDkkDwRD/jAcuEthmBSxRFw1YOzphw36atqS3+J0chc6lnAgCwbZhfPDI98HkLzgVaaXJlJ12ryXtyPA3D1Ptf+mUIci+DbharLsRCiaGsLrnCnoaL4y+vnD2LO0SwS05xhQtFI+0khq3pvGBMtw4HC/+AExI3I1jV3f9EBA=='}
复制代码


  1. Amazon API Gateway 调用 AWS Lambda 函数

  2. AWS Lambda 函数执行下列步骤:

  3. a. 验证事物名称的签名。如果验证失败,则 Lambda 函数将返回一条错误消息,然后终止。

  4. b. 在一个 DynamoDB 表中查询该事物名称,从而确定设备是否是预置候选设备。Lambda 函数会检查设备 (thing_name) 的 prov_status 属性是否设置为未预置。如果已如此设置,则将预置该设备。否则将会返回一条错误消息。还有更先进和更安全的方式来验证设备是否应该预置(例如令牌)。与签署事物名称的方法类似,令牌也可以通过密钥来签署。

  5. DynamoDB 中的示例条目:


{ "thing_name": { "S": "mydevice3" }, "prov_status": { "S": "unprovisioned" } }
复制代码


c. 计算 IoT 设备的最佳 AWS 区域。此计算会查找设备 IP 地址与某个 AWS 区域之间的最短距离。


d. 预置设备。这意味着将在设备注册表中创建该设备。将会创建一个证书以及(可选)密钥。如果还没有 IoT 策略,则也将创建一个。


e. 使用已经预置的设备的时间和区域更新 DynamoDB 表。


f. 以 JSON 格式返回应答。应答包含 IoT 终端节点、证书以及私有密钥(如果预置请求中没有发送 CSR)。


4. 收到应答后,设备将会存储密钥、证书和终端节点。现在设备已经准备就绪,可以立即与 AWS IoT Core 交互。


小结

AWS IoT Device Management 提供了多种设备预置选项以方便设备的注册。在您使用其他 AWS 服务时,您可以实施解决方案以在您选择的 AWS 区域自动将设备注册到 AWS IoT Core。


请在评论中留下您的反馈。如果您对此解决方案的实施有任何疑问或问题,请在 AWS IoT 论坛中开一条线索。


本文转载自 AWS 博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/provision-devices-globally-with-aws-iot/


2019 年 9 月 20 日 11:56395
用户头像

发布了 1469 篇内容, 共 51.4 次阅读, 收获喜欢 57 次。

关注

评论

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

写博客是一种乐趣,一种需要培养的乐趣,【性能优化实战】

Java 程序员 后端

分享我的2021京东4面面经,送给备战金三银四的你,Java小程序开发实例

Java 程序员 后端

分布式系统的一致性级别划分及Zookeeper一致性级别分析

Java 程序员 后端

前端同事老是说swagger不好用,我用了knife4j后,同事爽得不行

Java 程序员 后端

力荐:提高千倍效率的一些 Java 代码小技巧,java语言程序设计教程朱晓龙课后答案

Java 程序员 后端

分布式系统改造方案——数据篇,Java架构师视频

Java 程序员 后端

初来乍到,IT职场人,有些黑话要先了解,太牛了

Java 程序员 后端

十个超酷的java谋生方式,你喜欢吗?,linux网络编程书籍

Java 程序员 后端

写了一年golang,来聊聊进程、线程与协程,javamap底层原理

Java 程序员 后端

刚从蚂蚁金服面试回来,分享我拿到社招Java研发岗offer的过程

Java 程序员 后端

创建和销毁对象-考虑用静态工厂方法代替构造器,熬夜整理出Java后端学习路线

Java 程序员 后端

前端必备 Nginx 配置,kafka原理解析

Java 程序员 后端

加班2个月,肛出最强干货之“Spring全家桶,rabbitmq消息队列原理

Java 程序员 后端

单机下如何让Java程序支持百万长连接,你知道吗?,云计算架构师认证

Java 程序员 后端

分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起

Java 程序员 后端

删了HDFS又能怎样?记一次删库不跑路事件,kafka的架构图

Java 程序员 后端

前端向后端进发之----Springboot JPA增删改查,外包Java后端开发三年

Java 程序员 后端

初来乍到,IT职场人,有些黑话要先了解(1),springboot定时任务注解原理

Java 程序员 后端

千万级电商项目从0到1到100全过程 涵盖Java程序员不同成长阶段的问题及优选解决方案!

Java 程序员 后端

卧槽,牛皮了!某程序员苦刷这两份算法PDF47天,java大神需要掌握的技术

Java 程序员 后端

创业神器-JAVA开源网盘系统推荐,springaop实现原理面试题

Java 程序员 后端

制作Docker镜像,用来下载OpenJDK11源码,分享一点面试小经验

Java 程序员 后端

制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)

Java 程序员 后端

出招吧!腾讯专家手敲《Redis源码日志笔记,如何成为一个更好的Java开发者

Java 程序员 后端

第15份敏捷年度状态报告

Bruce Talk

敏捷 Agile

初识动态规划,java程序设计教程第三版机械工业出版社

Java 程序员 后端

十月一奉上九大核心专题,630页内容,祝你收割大厂offer

Java 程序员 后端

千万别踩坑,一面就凉透!Java,java语言程序设计基础篇第十一版答案

Java 程序员 后端

分享23种追女生的方式,教你同时把追MM和设计模式融汇贯通(下

Java 程序员 后端

分享成功逆袭到美团面试心得:面试题(含答案,springboot面试题

Java 程序员 后端

华为架构师亲手操刀,世界五百强都在用的kafka也就那么回事

Java 程序员 后端

使用 AWS IoT 来构建全球性的物联网解决方案_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章