AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWSIoT

這篇文章給大家介紹AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)致力于網(wǎng)站建設(shè)、成都網(wǎng)站制作,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場(chǎng)競(jìng)爭(zhēng)中脫穎而出。 選擇成都創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!

1 簡(jiǎn)介

AWS IoT解決方案是一個(gè)全托管的云平臺(tái),使互聯(lián)設(shè)備可以輕松安全地與云應(yīng)用程序及其他設(shè)備交互。AWS IoT可以支持?jǐn)?shù)十億太設(shè)備和數(shù)萬億條消息,并且可以對(duì)這些消息進(jìn)行處理并將其安全可靠地路由至AWS終端節(jié)點(diǎn)和其他設(shè)備。AWS IoT平臺(tái)支持您將設(shè)備連接到AWS服務(wù)和其他設(shè)備,保證數(shù)據(jù)和交互的安全,處理設(shè)備數(shù)據(jù)并對(duì)其執(zhí)行操作,以及支持應(yīng)用程序與即便處于離線狀態(tài)的設(shè)備進(jìn)行交互。

使用AWS IoT的第一步是將設(shè)備連接到AWS IoT Core服務(wù)。AWS IoT支持多種接入?yún)f(xié)議,身份認(rèn)證方法和授權(quán)策略。

2 AWS IoT支持的協(xié)議

設(shè)備要接入AWS IoT,首先要使用AWS IoT支持的協(xié)議來跟IoT平臺(tái)交互。

2.1 HTTP協(xié)議

http協(xié)議是互聯(lián)網(wǎng)中最為常見的協(xié)議。http協(xié)議支持后面提到的所有認(rèn)證和授權(quán)方式。但是在物聯(lián)網(wǎng)的場(chǎng)景中,它也有協(xié)議開銷比較大等確定,另外http只有請(qǐng)求響應(yīng)的模式不支持物聯(lián)網(wǎng)場(chǎng)景中非常重要的訂閱模式,不能支持下行命令的下發(fā)。

2.2 MQTT協(xié)議

MQTT協(xié)議是物聯(lián)網(wǎng)場(chǎng)景中使用最為廣泛的協(xié)議,具有協(xié)議開銷小,支持發(fā)布訂閱等所有模式的有點(diǎn)。

2.3 MQTT over WEBSOCKET

MQTT over websocket是基于websocket上的MQTT協(xié)議,使用443端口,在網(wǎng)絡(luò)環(huán)境可達(dá)性上比MQTT更有優(yōu)勢(shì),但是也相對(duì)復(fù)雜一些。

3 AWS IoT支持的認(rèn)證和授權(quán)方式

設(shè)備接入AWS IoT的時(shí)候,必須要進(jìn)行認(rèn)證,確認(rèn)設(shè)備的合法身份。通過認(rèn)證后,還需要對(duì)設(shè)備的請(qǐng)求進(jìn)行鑒權(quán),只有經(jīng)過授權(quán)的請(qǐng)求才會(huì)被AWS IoT接受。不同的設(shè)備認(rèn)證方式,其授權(quán)方式也可能有所不同。

AWS IoT支持的認(rèn)證方式有4種,分別是IAM身份、Cognito身份、X.509證書和自定義身份驗(yàn)證。

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

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

4 準(zhǔn)備工作

4.1 創(chuàng)建操作環(huán)境

在aws上創(chuàng)建一臺(tái)EC2服務(wù)器,創(chuàng)建的過程中,需要?jiǎng)?chuàng)建一個(gè)角色來訪問該ec2

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

點(diǎn)擊"創(chuàng)建新的IAM角色"

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

點(diǎn)擊"創(chuàng)建角色"

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

選擇"AWS產(chǎn)品"->"EC2",點(diǎn)擊"下一步"

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

選擇"AdministratorAccess",點(diǎn)擊"下一步",標(biāo)簽部分可以忽略,直接點(diǎn)擊"下一步"

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

輸入指定角色名稱,"創(chuàng)建角色",再回到之前創(chuàng)建EC2的界面,刷新角色

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

然后繼續(xù)ec2相關(guān)配置,直至創(chuàng)建成功(具體步驟略)。

4.2 配置操作環(huán)境

遠(yuǎn)程登錄到創(chuàng)建的ec2服務(wù)器(具體過程略)

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

因?yàn)椴僮魍ㄟ^AWS CLI進(jìn)行,而我創(chuàng)建是ec2中沒有安裝好CLI,所以需要自己安裝,安裝的步驟參見https://docs.aws.amazon.com/zh_cn/cli/latest/userguide/install-linux.html#install-linux-awscli,具體安裝過程省略,可能會(huì)需要經(jīng)過多次嘗試,不同的操作系統(tǒng)版本會(huì)有微笑差異,自己體會(huì)吧。最終CLI安裝成功,如下圖:

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

配置AWS CLI,其中的區(qū)域我選擇的是美東-弗吉尼亞,所以填us-east-1,輸出格式通常為json。

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

準(zhǔn)備操作目錄,現(xiàn)在創(chuàng)建一個(gè)新的操作目錄 awsiotaccessdemo。

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

然后下載aws iot的Root CA證書。設(shè)備連接應(yīng)該優(yōu)先選擇ATS端點(diǎn),使用ATS的CA文件,因?yàn)楹竺娴淖远x身份驗(yàn)證暫時(shí)不支持ATS端點(diǎn),所以也需要下載VeriSign端點(diǎn)的CA證書。

執(zhí)行命令 wgethttps://www.amazontrust.com/repository/AmazonRootCA1.pem

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

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

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

安裝依賴的軟件包,執(zhí)行如下命令

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,執(zhí)行命令account_id=`aws sts get-caller-identity | jq .Account|sed 's/"//g'`

獲取Account的IoT Endpoint前綴,執(zhí)行命令endpoint_prefix=`aws iot describe-endpoint \

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

再把剛剛獲取的Account Id和Endpoint前綴配置到環(huán)境變量中,執(zhí)行如下命令:

echo "export account_id=$account_id">

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

4.3 配置IoT消息接收監(jiān)控頁(yè)面

登錄AWS IoT控制臺(tái),點(diǎn)擊“測(cè)試”條目,輸入訂閱主題“IoTDemo/#”

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

點(diǎn)擊“訂閱主題”,后續(xù)所有IoT Core收到的消息都會(huì)在下方顯示出來。

5 使用IAM身份認(rèn)證接入

前面已經(jīng)列出了aws支持的設(shè)備接入認(rèn)證方式,本文將嘗試以不同的身份驗(yàn)證方式接入。

用戶可以使用IAM提供身份來認(rèn)證設(shè)備。設(shè)備需要預(yù)置或者通過其他方式獲取security

credential,在使用SigV4的簽名算法對(duì)請(qǐng)求進(jìn)行簽名。AWS

IoT服務(wù)則通過簽名來認(rèn)證設(shè)備的身份,通過身份認(rèn)證后,IoT再根據(jù)身份擁有的IAM Policy來對(duì)請(qǐng)求進(jìn)行鑒權(quán)。

IAM身份認(rèn)證方式示意圖如下:

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

5.1 創(chuàng)建一個(gè)IAM用戶,IoTDeviceUser

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

為IoTDeviceUser用戶創(chuàng)建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控制臺(tái),查看剛剛創(chuàng)建的IAM 用戶

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

從上圖可見成功創(chuàng)建了IoTDeviceUser用戶,但是還沒有指定策略。其實(shí)IAM用戶的創(chuàng)建及策略操作等都可以在控制臺(tái)進(jìn)行,而且更方便,前面采用CLI只是為了體驗(yàn)一下操作。

5.2 設(shè)備使用HTTP協(xié)議接入

1)為設(shè)備創(chuàng)建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用戶,執(zhí)行命令

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

--policy-arn ${device_IAM_http_policy_arn}

把IAM Policy綁定到IAM用戶,執(zhí)行命令aws iam attach-user-policy --user-name IoTDeviceUser \

--policy-arn ${device_IAM_http_policy_arn}

3)生成模擬設(shè)備程序

執(zhí)行如下命令:

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

#!/usr/bin/env python

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

import boto3

import argparse

import json

#獲取參數(shù)

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

    注意:代碼中的區(qū)域要填寫正確。

4)運(yùn)行模擬設(shè)備程序

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

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

5)再去IoT控制臺(tái)查看收到的消息

AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT

由上圖可見消息來自剛剛創(chuàng)建的.py文件,消息內(nèi)容也正是文件中的字段,由此證明設(shè)備發(fā)送消息成功。

后續(xù)我將繼續(xù)嘗試用不同的身份認(rèn)證和不同的協(xié)議接入。

關(guān)于AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWS IoT就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁(yè)名稱:AWS物聯(lián)網(wǎng)中如何將設(shè)備安全地接入AWSIoT
當(dāng)前URL:http://bm7419.com/article18/gepodp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、定制網(wǎng)站域名注冊(cè)、服務(wù)器托管營(yíng)銷型網(wǎng)站建設(shè)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)