4. diel - Microsoft AZURE - IoT Hub
V minulej lekcii sme sa z našej dosky pripojili k WiFi sieti a prvýkrát sa prihlásili do Azure. Dnešná lekcia je venovaná bezpečnosti IoT.
Bezpečnosť IoT
V tomto diele by sme si mali popísať službu IoT Hub, ktorá slúži na verifikáciu a manažmentu IoT zariadení. Zaujímavo povedané, čo? Verifikácia a manažment, vznosná čarovná slovíčka, ktoré nič nehovoria, sú ale nielen podľa môjho názoru sakramentsky dôležitá a budú čím ďalej tým viac.
V dnešnej dobe, kedy má každá škatuľka vlastnú IP adresu a je k nej možné pristupovať napríklad cez otvorené NAT porty, pokiaľ možno s jednoduchými heslami atp., Sa stáva ich použitia doslova hrozbou a Azure sa snažia problémom s kompromitácie zariadení proaktívne predchádzať.
Prečo teda manažment a verifikácia zariadenia? Odpoveď je "práve preto". Kadejaké zariadenie je pripojené do internetu, ale máloktoré je dostatočne patchovanie. V lepšom prípade je za firewallom a má dokonca nastavené heslo. Zo skúsenosti viem, že zariadenie často leží v nepekných podmienkach, niekde skryto po budove, občas sa nevie, že vôbec beží, alebo kdeže to leží. Tento problém sa v oblasti IoT začína stávať veľmi závažným a všetky takéto krabičky sa stávajú hrozbou. Lebo tie, ktoré napríklad nekomunikujú šifrovane, možno jednoducho odpočúvať, dajú sa jednoducho kompromitovať a mnohokrát sa o tom nikto ani nedozvie. Sme potom svedkami obrovských DDoS útokov práve cez takéto zariadenia. Alebo miliónových útrat za volania na platené linky vašej VOIP ústredne, pretože výrobca alebo administrátor práve nemajú správny firmware.
Microsoft Azure a jeho služba Event Hub, poťažmo jeho odnož pre IoT, nedovoľuje pripojenie bez jednoznačnej identifikácie zariadení a bez šifrovania TSL 1.2. Azure pre manažment zariadení používa práve už spomínaný IoT Hub. Každé zariadenie, ktoré sa skrze neho pokúša komunikovať do Azure, to musí robiť šifrovane a musia byť jednoznačne identifikovateľné. Možno ho tak v prípade kompromitácie, či už z akéhokoľvek dôvodu, jednoducho blokovať alebo zmazať.
U jedného zariadenia je manažment možná zbytočný luxus, ale ak si predstavíte, že sú tých zariadení stovky alebo tisíce, dáva IoT Hub veľmi dobrý zmysel.
My však necháme teórie a prejdime teda k samotnému nastavenie.
IOT Hub - vytvorenie
Do nášho riešenia si teda pridáme službu IoT húb. Voľbou + New v ľavom paneli pridáme zo sekcie
IoT Internet of Things > IoTHub
nový Hub s názvom HubIotDht22Spark a ako pricing tier vyberieme F1 free. Bude nám pre začiatok stačiť. Názov je desivý a je nutné ho voliť jednoznačne, takže aj vy budete riešiť, ako sa ten váš bude volať. Z názvu IoT hubu sa totiž skladá internetová adresa vášho Hubu. U mňa sa napríklad volá HubIotDht22Spark.azure-devices.net.
Náš IoT bude vedieť prijať 8000 správ za deň, čo nám s ohľadom na typ hodnôt, ktoré prijímame, stačí. Nezabudnite ho dať do správnej Resource group voľbou Use existing a výberom tej správnej. U mňa to je IoTDht22Spark. Nakoniec kliknite na tlačidlo Create.
Teraz máme po chvíli čakania vytvorený IoT Hub, ktorý vie prijímať dáta z našej vývojovej dosky.
Čo nám však chýba je pripojenie dosky k IoT hubu.
K tomu budeme potrebovať programík, ktorý sme si stiahli skôr, Device Explorer, a potrebné bezpečnostné kľúče. Tie získame v sekcii Shared Access Policies. Dostanete sa k nim dvojitým kliknutím na meno Vášho IoT Hubu v resource zozname.
Budeme potrebovať connection string iothubownera. Bude vyzerať nejako takto:
HostName=HubIotDht22Spark.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=Ij8kvPBW2 mHCzTKzwxMFiLzkK3AvCFecAgzkg=
Nepoužívajte môj kľúč. Je úmyselne zmenený. Rovnako tak budem postupovať aj s ostatnými kľúčmi v celom seriáli.
Device Explorer - connect to Azure
Spustite Device Explorer v záložke Configuration a vložte do poľa Connection Information váš kľúč. Tlačidlom update sa vám doplní sekcie Shared Access Signature a ste pripravení pripojiť sa k IoT Hub.
Ako sme si povedali v úvode, každé zariadenie musí byť pre Azure dostatočne identifikované. Musíme mu teda vytvoriť prihlasovacie kľúče. Tie vytvoríte v Device exploreru záložke Management, kliknutím na tlačidlo Create. V našom prípade zvolíme Device ID a necháme zaškrtnutím políčka Auto Generate Keys vygenerovať sadu šifrovacích kľúčov. Stlačením tlačidla vytvoríte tzv. Connection string vášho zariadenia, čo je v našom prípade ESP 8622 s DHT 22. Týmito kľúčmi sa budeme IoT hubu identifikovať.
Po vytvorení kľúčov je možné kľúče získať aj priamo v Azure v sekcii device, viď obrázok.
Chytrejším dôjde, že platnosť kľúča je spojená s časom. K tomu, aby sme mohli kľúče používať, je nutné, aby doska alebo zariadenie malo prístup k hodinám reálneho času. Sú s tým spojené drobné problémy, ktoré možno riešiť. Buď pripojením k NTP serveru, alebo vygenerovaním kľúče SAS s dlhšou platnosťou. Týmto variantom sa v našej ukážke nebudeme zaoberať a prípadných záujemcov odkazom na dokumentáciu k IOT hubu.
Vezmite teda Connection String, napríklad v IoT hubu kliknutím na tlačidlo vedľa poľa Connection string-primary key, a pridajte ho do remote_monitoring.c. Bude vyzerať nejako takto:
HostName=HubIotDht22Spark.azure-devices.net; DeviceId=spark; SharedAccessKey=b*****************************xC+mzULpMFZd0=
Asi nemá zmysel jednotlivé položky komentovať. Vo výsledku bude váš kód v IDE vyzerať nejako obdobne ako môj.
Program skompilujte a nahrajte do dosky. Ak ste všetko urobili dobre, všetko prebehne hladko a vaša doska sa pripojí k vašej sieti. Následne si stiahne čas z NTP servera a pošle hodnoty do IoT hubu. Všetko sa dá celkom dobre sledovať zo sériovej konzoly IDE. Len pozor na nastavenie správneho baudrate. Musia byť rovnaké ako v metóde alebo funkciu, ak chcete initSerial () v hlavnom súbore projektu.
void initSerial() { // Start serial and initialize stdout Serial.begin(115200); Serial.setDebugOutput(true); }
Pokiaľ je teda všetko v poriadku, bude doštička pripojená k vašej wifi a k IoT hubu. Na konzole sa teda zobrazia informácie o IP adrese, aktuálnej teplote a vlhkosti.
Prijímané dáta na strane Azure, presnejšie IoT hubu, môžete tiež pozorovať v Device exploreru v záložke Dáta, stlačením tlačidla monitor.
Pravdepodobne tam nebudete mať hodnotu EventTime, však to ničomu nevadí. Mám ju tam, lebo som ju z testovacích dôvodov potreboval.
Nezostáva než si niečo povedať o správe, ktorú odosielame. Jedná sa o protokol AMQP 1.0 (ISO / IEC 19464) https://www.amqp.org/, čo je jeden zo štandardov správ, ktorý Azure IOT HUB podporuje vedľa MQQT v3.1.1 a klasického WebSocket na 443. Viac možno nájsť v dokumentáciu https://docs.microsoft.com/...hub-devguide, preto sa nebudeme popisom komunikácie ďalej zaoberať. AMQP nie je nič iné ako JSON a bude vám určite pochopiteľný hneď na prvý pohľad.
Ak vidíte vaše správy prenikajúce do Azure, dovoľte, aby som vám zablahoželal, to najhoršie už máte za sebou. Dosiahli sme to, že naše krabička komunikuje von a dáva dáta do cloudu - v našom prípade AZURE.
Akonáhle sa odmeníte a pokocháte svojím umením, vrátime sa späť do reality a pripomenieme si, čo nám ešte chýba. Nemáme žiadnu vizualizáciu dát a dáta ani neukladáme. Na prácu s dátami a ich uloženie sa pozrieme v ďalších lekciách. Tešiť sa môžete na službu Stream Analytics, ukážku cloudového úložiska TableStorage a v neposlednom rade službu Bussiness Intelligent Power BI.