千家信息网

AWS物联网中如何将设备安全地接入AWS IoT

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍AWS物联网中如何将设备安全地接入AWS IoT,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 简介AWS IoT解决方案是一个全托管的云平台,使互联设备可以
千家信息网最后更新 2026年11月01日AWS物联网中如何将设备安全地接入AWS IoT

这篇文章给大家介绍AWS物联网中如何将设备安全地接入AWS IoT,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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">

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\"

]

}

]

}">

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文件,消息内容也正是文件中的字段,由此证明设备发送消息成功。

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

关于AWS物联网中如何将设备安全地接入AWS IoT就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

设备 支持 命令 身份 认证 接入 方式 消息 用户 不同 角色 输入 安全 身份认证 服务 配置 成功 控制台 环境 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中关村互联网科技集团 科技信息互联网 互联网科技与金融科技 互联网科技金融公司 互联网与未来科技 浩特互联网科技 上海喔噻互联网科技 银川新华互联网科技学校地址 济南华为互联网科技产业总部基地 字节跳动和互联网科技 受益于互联网科技的高速发展 世界互联网科技公司市值排名 乌苏新华互联网科技做什么的 民营互联网公司国防科技 阿里互联网科技企业 中和天地互联网科技有限公司 湖北辰鑫科技互联网 广西泛欧互联网科技有限公司 互联网金融金融科技 广东猫王互联网科技有限公司电话 互联网 的科技创新 融势互联网科技 深圳国际航运科技和互联网 浙江互联网科技研学营 玉溪互联网科技怎么选 深圳市优智互联网科技有限公司 电子科技大学互联网创业大赛 内蒙古九一互联网科技 兰石爱特工业互联网科技分公司 互联网科技大会大佬
0