初探 IoT 设备信息交互的集散地 AWS IoT Core 入门介绍 邱越俊,AWS 解决方案架构师 2018 年 6 月 12 日
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
AWS IoT 设备 SDKs & AWS SDK AWS SDK:C++, Java,.Net, Node.js, Python, PHP, Ruby, Go, ios/android 设备 SDK:embedded C, Node.js, java, Python, Arduino Yun, ios/android
AWS IoT 设备 SDK https://aws.amazon.com/cn/iot/sdk/
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
连接设备安全 - 认证 双向证书认证 AWS IoT 签发证书 用户自签证书 ( 在 AWS IoT 上即时注册设备证书 )
证书和密钥 私钥 (authenticate the device) 'device-123.pem.key', 设备证书 (register the device with IoT) 'device-123.pem.crt 根 CA (authenticate IoT) rootca.pem.crt
数据传输安全 -TLS 0010 TLS 0010001000100010 TLS 00100010
IoT Policy SDK Private Key & Certificate & CA-Root 设备证书 IoT Policy 策略 设备 AWS IoT
IoT 访问权限授权策略 控制物联网设备允许的操作权限 : 连接, 发布, 订阅, 接收, 影子操作 访问权限与设备证书关联 { "Effect": "Allow", "Action": [ "iot:connect" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:client/clientid1", "arn:aws:iot:us-east-1:123456789012:client/clientid2", "arn:aws:iot:us-east-1:123456789012:client/clientid3" ] }, { "Effect": "Allow", "Action": [ "iot:publish", "iot:subscribe", "iot:receive" ], "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/foo/bar" ] }
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
协议和认证方式 Protocol Auth Port 常用场景 MQTT X.509 证书 8883 终端设备, 长连接 HTTP X.509 证书 8443 终端设备, 短连接 HTTP SigV4 443 服务器, 短连接 MQTT over WebSocket SigV4 443 控制终端, 长连接 MQTT 只支持 X.509 证书, 不支持 SigV4 HTTP 只支持发布, 不支持订阅 MQTT over Websocket 支持 SigV4 的发布和订阅
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
AWS IoT 设备注册表 设备注册表 创建设备的唯一标识, 管理设备元数据 ( 如属性, 能力 ),JSON 文件 组织和跟踪设备 $ aws iot list-things --thing-type-name "LightBulb $ aws iot describe-thing --thing-name "MyLightBulb" $ aws iot list-things --attribute-name "wattage" --attribute-value "75" Mobile App Shadow {Thing Name, Sensor Temp,, GetTemp(), Output LED} Registry
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
设备控制 ( 影子 Shadow) 设备 MQTT 当前状态 HTTP/ MQTT over WebSocket 控制 目标状态
AWS IoT 设备影子工作原理 1. 设备发布当前状态 5. 设备影子同步更新的状态 6. 设备发布当前状态 Shadow AWS IoT 3. 应用程序请求设备的当前状态 4. 应用程序请求更改设备状态 7. 设备影子确认状态更改 2. 持久化 JSON 数据存储 Device SDK
设备影子 Thing Shadow Mobile App 向设备影子上报当前状态 从设备影子获取目标状态 展示设备上报状态 展示目标状态 展现设备上报状态和目标状态的差异 获取最近一次上报的状态 设置目标状态 获取状态修改确认 { "state" : { desired" : { "lights": { "color": "RED" }, "engine" : "ON" }, "reported" : { "lights" : { "color": "GREEN" }, "engine" : "ON" }, "delta" : { "lights" : { "color": "RED" } } }, "version" : 10 }
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
消息加工处理 --- AWS IoT 规则引擎 规则引擎将 AWS IoT 连接到外部终端节点和 AWS 服务 操作 1. AWS 服务 ( 直接集成 ) Amazon S3 Amazon DynamoDB Amazon Kinesis 2. AWS 的其余部分 ( 通过 Amazon Kinesis AWS Lambda Amazon S3 及其他服务 ) Amazon RDS Amazon Glacier Rules Engine Amazon SNS AWS Lambda Amazon SQS Amazon Redshift Amazon EC2 3. 外部终端节点 ( 通过 Lambda 和 SNS)
规则引擎 : 直接对接 AWS 其他服务 调用 Lambda 函数 将对象存储到 S3 存储桶中 插入, 更新 DynamoDB 表 发布到 SNS 主题 发布到 Amazon Kinesis stream 发布到 Kinesis Firehose 重新发布到 AWS IoT 获取一个 CloudWatch 指标或改变告警状态 发布到 Amazon ES 写入到 SQS 队列
例如 : 规则引擎 & 实时流式数据处理 N:1 入站的传感器流式数据 ( 数据降噪 ) 规则引擎过滤 转换 汇总传感器数据后, 发送至亚马逊 Kinesis 处理实时流式数据 Kinesis 流式数据共享至其它业务系统将流式数据的实时处理结果导入至数据库 应用或其它亚马逊服务
例如 : 规则引擎 & 推送通知服务 推送通知支持苹果 APNS 推送通知服务 谷歌 GCM 云消息服务 亚马逊 ADM 设备消息服务, 微软 WNS 推送服务亚马逊 SNS 推送通知服务 ->HTTP 协议终端 ( 短信 邮件 ) 通过亚马逊 SNS 推送通知服务, 调用第三方 HTTP 协议终端, 支持订阅和重试
AWS IoT 规则引擎 SELECT DATA FROM TOPIC WHERE FILTER 简单且熟悉的语法 - 使用 SQL 语句来定义筛选条件 - 可选 WHERE 子句函数改进了信号 / 噪音 - 数十种 functions() 可用 - 字符串操作 ( 正则表达式支持 ) - 数学运算 - UUID Timestamp rand 等多个 / 同时操作 - 有时需要您采取多种操作
IoT 规则样例 { } sql : SELECT * FROM RaspberryPi/EchoNumber WHERE EchoNumber > 80", "description": "Store all sensor data into dynamodb and firehose", "ruledisabled":false, "actions": [{ "dynamodb": { "tablename": IoT_DynamoDB_Table", "rolearn": "arn:aws:iam::123456789012:role/aws_iot_dynamodb", "hashkeyfield": "sensor_id", "hashkeyvalue": "${topic()}", "rangekeyfield": "timestamp "rangekeyvalue": "${timestamp()}", } }]
AWS IoT Core 认证和鉴权通过双向身份验证和加密进行保护 规则引擎依据规则与路由传递资料给后端 AWS 服务 AWS 服务 - - - - - 第三方服务 设备 SDK 多种客户端连结库, 进行身份验证和交换信息 设备网关通过 MQTT, WebSockets, HTTP 与设备通信 注册表管理你的设备 影子为设备间断性的连接能力保有持久的状态 应用 AWS 物联网 API
Thank You!