1 简介

AWS IoT解决方案是一个全托管的云平台,使互联设备可以轻松安全地与云应用程序及其他设备交互。AWS IoT可以支持数十亿太设备和数万亿条消息,并且可以对这些消息进行处理并将其安全可靠地路由至AWS终端节点和其他设备。AWS IoT平台支持您将设备连接到AWS服务和其他设备,保证数据和交互的安全,处理设备数据并对其执行操作,以及支持应用程序与即便处于离线状态的设备进行交互。

使用AWS IoT的第一步是将设备连接到AWS IoT Core服务。AWS IoT支持多种接入协议,身份认证方法和授权策略。

2 AWS IoT支持的协议

设备要接入AWS IoT,首先要使用AWS IoT支持的协议来跟IoT平台交互。

2.1 HTTP协议

http协议是互联网中最为常见的协议。http协议支持后面提到的所有认证和授权方式。但是在物联网的场景中,它也有协议开销比较大等确定,另外http只有请求响应的模式不支持物联网场景中非常重要的订阅模式,不能支持下行命令的下发。

2.2 MQTT协议

MQTT协议是物联网场景中使用最为广泛的协议,具有协议开销小,支持发布订阅等所有模式的有点。

2.3 MQTT over WEBSOCKET

MQTT over websocket是基于websocket上的MQTT协议,使用443端口,在网络环境可达性上比MQTT更有优势,但是也相对复杂一些。

3 AWS IoT支持的认证和授权方式

设备接入AWS IoT的时候,必须要进行认证,确认设备的合法身份。通过认证后,还需要对设备的请求进行鉴权,只有经过授权的请求才会被AWS IoT接受。不同的设备认证方式,其授权方式也可能有所不同。

AWS IoT支持的认证方式有4种,分别是IAM身份、Cognito身份、X.509证书和自定义身份验证。

AWS IoT支持的售前策略由2种,分别是IAM policy和IoT policy。

 

4 准备工作

4.1 创建操作环境

在aws上创建一台EC2服务器,创建的过程中,需要创建一个角色来访问该ec2

 

点击"创建新的IAM角色"

 

点击"创建角色"

 

选择"AWS产品"->"EC2",点击"下一步"

 

选择"AdministratorAccess",点击"下一步",标签部分可以忽略,直接点击"下一步"

 

输入指定角色名称,"创建角色",再回到之前创建EC2的界面,刷新角色

 

然后继续ec2相关配置,直至创建成功(具体步骤略)。

4.2 配置操作环境

远程登录到创建的ec2服务器(具体过程略)

 

因为操作通过AWS CLI进行,而我创建是ec2中没有安装好CLI,所以需要自己安装,安装的步骤参见https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-linux.html#install-linux-awscli,具体安装过程省略,可能会需要经过多次尝试,不同的操作系统版本会有微笑差异,自己体会吧。最终CLI安装成功,如下图:

 

配置AWS CLI,其中的区域我选择的是美东-弗吉尼亚,所以填us-east-1,输出格式通常为json。

 

准备操作目录,现在创建一个新的操作目录 awsiotaccessdemo。

 

然后下载aws iot的Root CA证书。设备连接应该优先选择ATS端点,使用ATS的CA文件,因为后面的自定义身份验证暂时不支持ATS端点,所以也需要下载VeriSign端点的CA证书。

执行命令 wgethttps://www.amazontrust.com/repository/AmazonRootCA1.pem

 

再执行命令 wgethttps://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem

 

安装依赖的软件包,执行如下命令

sudo yum install python-pip jq -y

pip install boto3 --user

pip install AWSIoTPythonSDK --user

pip install flask --user

pip install paho-mqtt --user

然后获取Account Id,执行命令account_id=`aws sts get-caller-identity | jq .Account|sed 's/"//g'`

获取Account的IoT Endpoint前缀,执行命令endpoint_prefix=`aws iot describe-endpoint \

| jq .endpointAddress | sed 's/"//g'| awk -F . '{print $1}'`

再把刚刚获取的Account Id和Endpoint前缀配置到环境变量中,执行如下命令:

echo "export account_id=$account_id" >> ~/.bashrc

echo "export endpoint_prefix=$endpoint_prefix" >> ~/.bashrc

4.3 配置IoT消息接收监控页面

登录AWS IoT控制台,点击“测试”条目,输入订阅主题“IoTDemo/#”

 

点击“订阅主题”,后续所有IoT Core收到的消息都会在下方显示出来。

5 使用IAM身份认证接入

前面已经列出了aws支持的设备接入认证方式,本文将尝试以不同的身份验证方式接入。

用户可以使用IAM提供身份来认证设备。设备需要预置或者通过其他方式获取security

credential,在使用SigV4的签名算法对请求进行签名。AWS

IoT服务则通过签名来认证设备的身份,通过身份认证后,IoT再根据身份拥有的IAM Policy来对请求进行鉴权。

IAM身份认证方式示意图如下:

 

5.1 创建一个IAM用户,IoTDeviceUser

输入命令aws iam create-user --user-name IoTDeviceUser

为IoTDeviceUser用户创建AccessKey

输入命令aws iam create-access-key \

--user-name IoTDeviceUser > /tmp/IoT_demo_access_key

记录下AccessKeyId和SecretAccessKey,输入以下命令:

AccessKeyId=`cat /tmp/IoT_demo_access_key| jq .AccessKey.AccessKeyId| sed 's/"//g'`

SecretAccessKey=`cat /tmp/IoT_demo_access_key| jq .AccessKey.SecretAccessKey| sed 's/"//g'`

登录到IAM控制台,查看刚刚创建的IAM 用户

 

从上图可见成功创建了IoTDeviceUser用户,但是还没有指定策略。其实IAM用户的创建及策略操作等都可以在控制台进行,而且更方便,前面采用CLI只是为了体验一下操作。

5.2 设备使用HTTP协议接入

1)为设备创建IAM Policy,输入命令:

device_IAM_http_policy_arn=`aws iam create-policy \

--policy-name IoTDeviceIAMHttpPolicy \

--policy-document "{

\"Version\": \"2012-10-17\",

\"Statement\": [

{

\"Sid\": \"VisualEditor0\",

\"Effect\": \"Allow\",

\"Action\": \"iot:Publish\",

\"Resource\": [

\"arn:aws:iot:us-east-1:${account_id}:topic/IoTDemo/device_IAM_http\"

]

}

]

}" | jq .Policy.Arn | sed 's/"//g'`

2)将IAM Policy绑定到IAM用户,执行命令

aws iam attach-user-policy --user-name IoTDeviceUser \

--policy-arn ${device_IAM_http_policy_arn}

把IAM Policy绑定到IAM用户,执行命令aws iam attach-user-policy --user-name IoTDeviceUser \

--policy-arn ${device_IAM_http_policy_arn}

3)生成模拟设备程序

执行如下命令:

cat <<-EOF > ~/awsIoTAccessDemo/device_IAM_http.py

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import boto3

import argparse

import json

#获取参数

parser = argparse.ArgumentParser(description='Send data to IoT Core')

parser.add_argument('--data', default="data from device_IAM_http",

help='data to IoT core topic')

parser.add_argument('--AccessKeyId', required=True,

help='AccessKeyId')

parser.add_argument('--SecretAccessKey', required=True,

help='SecretAccessKey')

args = parser.parse_args()

data = args.data

access_key_id = args.AccessKeyId

secret_access_key = args.SecretAccessKey

device_name = 'device_IAM_http'

region = 'us-east-1'

topic = "IoTDemo/"+device_name

iot_data_client = boto3.client('iot-data',region_name=region,aws_access_key_id=access_key_id,aws_secret_access_key=secret_access_key)

response = iot_data_client.publish(

topic=topic,

qos=0,

payload=json.dumps({"source":device_name, "data":data})

)

EOF

注意:代码中的区域要填写正确。

4)运行模拟设备程序

python device_IAM_http.py --data "data from device IAM http." \

--AccessKeyId ${AccessKeyId} --SecretAccessKey ${SecretAccessKey}

5)再去IoT控制台查看收到的消息

 

由上图可见消息来自刚刚创建的.py文件,消息内容也正是文件中的字段,由此证明设备发送消息成功。

后续我将继续尝试用不同的身份认证和不同的协议接入。

参考文档:

https://amazonaws-china.com/cn/blogs/china/connect-your-devices-to-aws-iot-securely-1/?nc1=b_rp

原文地址:https://www.jianshu.com/p/cf6940d18dfe

AWS物联网解决方案之:如何将设备安全地接入AWS IoT的更多相关文章

  1. Dynamics AX 2012 的工业物联网解决方案

    Dynamics AX 2012 的工业物联网解决方案 物联网 物联网的概念在这两年非常火,包括近期很火的共享单车初创公司--摩拜单车,在产品中运用了Azure Iot物联网技术.但是,物联网并不是一 ...

  2. 让用户使用第三方账号(如亚马逊账号)接入AWS IoT系统

    我们想象这么一个IoT应用场景:厂商A使用AWS IoT来开发物联网解决方案,那么A把设备卖给用户的时候,需要使用户能够登入AWS IoT系统来控制其购买的A的设备,也就是说给用户分配适当的权限.下面 ...

  3. Azure IoT 技术研究系列2-起步示例之设备注册到Azure IoT Hub

    上篇博文中,我们主要介绍了Azure IoT Hub的基本概念.架构.特性: Azure IoT 技术研究系列1-入门篇 本文中,我们继续深入研究,做一个起步示例程序:模拟设备注册到Azure IoT ...

  4. [视频演示].NET Core开发的iNeuOS物联网平台,实现从设备&PLC、云平台、移动APP数据链路闭环

    目       录 1.      概述... 1 2.      登陆信息... 2 3.      设备驱动... 3 4.      组态建模... 3 5.      手机APP. 5 6.  ...

  5. AWS 移动推送到iOS设备,Amazon Pinpoint

    前言 第一次对接aws,遇到的坑是真多.现在记录一下.本文主要用到的是[Amazon Pinpoint]推送. 开发人员的指南:https://docs.aws.amazon.com/zh_cn/pi ...

  6. 最全NB-IoT/eMTC物联网解决方案名录汇总

    NB-IoT/eMTC等蜂窝物联网技术的成熟和商用,占据低功耗广域网络(LPWAN)的主流地位,推动全球物联网新一轮发展热潮,越来越多的行业开始采用物联网方案来解决解决实际问题.实现落地应用,越来越多 ...

  7. 极具性价比优势的工业控制以及物联网解决方案-米尔MYD-C8MMX开发板测评

    今天要进行测评的板子是来自米尔电子的MYD-C8MMX开发板.MYD-C8MMX开发板是米尔电子基于恩智浦,i.MX 8M Mini系列嵌入式应用处理器设计的开发套件,具有超强性能.工业级应用.10年 ...

  8. 开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

    [开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上, ...

  9. 阿里云 IOT 对接设备开发 C# 开发设备对接阿里云 IOT平台

    一,创建阿里云 IOT 产品.设备 目前阿里云每月赠送 100 万条流量,可以免费使用基础版.高级版,开通后即可免费使用. 阿里云 IOT 平台地址 https://iot.console.aliyu ...

随机推荐

  1. C指针的运算

    指针的运算在数组中才有意义 int *p; p++,一定是在一片连续的区域才有意义,当然越界也会带来诸多问题. void main() { ; int *p = &num;//这根本无界可言 ...

  2. 2、python--第二天练习题

    #1.有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中. #即: {'k ...

  3. 02_通过位置变量创建 Linux 系统账户及密码

    #!/bin/bash#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数useradd "$1"echo "$2" | passwd --stdin ...

  4. 编写测试类实现并发访问固定URL(亲测能用!!!)

    1.类目录 2.LatchTest.java类 package com.test; import java.util.concurrent.CountDownLatch; public class L ...

  5. CF768F Barrels and boxes

    嘟嘟嘟 此题不难. 这种题做几道就知道些套路了:我们枚举酒有几堆,这样就能算出食物有多少堆以及他们的排列数,那么概率就是合法方案数 / 总方案数. 设酒有\(i\)堆,那么就有\(C_{w - 1} ...

  6. seq2seq聊天模型(二)——Scheduled Sampling

    使用典型seq2seq模型,得到的结果欠佳,怎么解决 结果欠佳原因在这里 在训练阶段的decoder,是将目标样本["吃","兰州","拉面" ...

  7. mac charles 代理https

    1.安装根证书:help - ssl proxying - install charles root certificate 2.这时候会弹出一个根证书界面,如果没有弹出,则可以去chrome,高级设 ...

  8. 使用python开发ansible自定义模块的简单案例

    安装的版本ansible版本<=2.7,<=2.8是不行的哦 安装模块 pip install ansible==2.7 先导出环境变量 我们自定义模块的目录. 我存放的目录 export ...

  9. iOS测试-如何指标量化app耗电量和性能XCTest Metrics

    对于app端的专项测试,Android端我们可以用adb或者一些三方工具进行(例如itest)进行实时的性能监控,iOS端的话也可以用用一些三方的工具,但是需要嵌入到我们的项目当中,今天来介绍下Xco ...

  10. python pywin32 安装

    pip install pywin32 参考: https://blog.csdn.net/qq_38161040/article/details/85075158