Oktatóanyag: Geokésés kiosztása
Ez az oktatóanyag bemutatja, hogyan építhet ki biztonságosan több szimulált szimmetrikus kulcseszközt egy IoT Hubs-csoport számára egy foglalási szabályzat használatával. IoT Hub Device Provisioning Service (DPS) a beépített kiosztási szabályzatokkal és az egyéni foglalási szabályzatok támogatásával támogatja a különböző foglalási forgatókönyveket.
A földrajzi hely/földrajzi késés kiépítése gyakori foglalási forgatókönyv. Ahogy az eszköz a helyek között mozog, a hálózati késés javul azáltal, hogy az eszközt az egyes helyekhez legközelebb eső IoT Hubra helyezik ki. Ebben a forgatókönyvben a régiókra kiterjedő IoT Hub-csoportok vannak kiválasztva a regisztrációkhoz. Ezekhez a regisztrációkhoz a beépített Legalacsonyabb késés kiosztási szabályzat van kiválasztva. Ez a szabályzat azt eredményezi, hogy a Device Provisioning Service kiértékeli az eszközkésést, és meghatározza a szekrény IoT Hubját az IoT Hubok csoportjából.
Ez az oktatóanyag az Azure IoT C SDK szimulált eszközmintáját használja az eszközök régiók közötti kiépítésének bemutatásához. Ebben az oktatóanyagban a következő lépéseket fogja végrehajtani:
- Az Azure CLI használatával hozzon létre két regionális IoT-központot (USA 2. nyugati régiója és USA keleti régiója)
- Olyan regisztráció létrehozása, amely a földrajzi hely (a legalacsonyabb késés) alapján épít ki eszközöket
- Az Azure CLI használatával két regionális Linux rendszerű virtuális gépet hozhat létre, amelyek ugyanazon régiókban (az USA 2. nyugati régiójában és az USA keleti régiójában) működnek eszközként.
- Az Azure IoT C SDK fejlesztési környezetének beállítása mindkét Linux rendszerű virtuális gépen
- Szimulálja az eszközöket, és ellenőrizze, hogy ki vannak-e építve az IoT Hubon a legközelebbi régióban.
Fontos
Egyes régiók időről időre korlátozásokat kényszeríthetnek a Virtual Machines létrehozására. Az útmutató írásakor a westus2 és eastus régiók lehetővé ták a virtuális gépek létrehozását. Ha egyik régióban sem tud létrehozni, próbálkozzon egy másik régióval. A virtuális gépek létrehozásakor az Azure földrajzi régióinak kiválasztásával kapcsolatos további információkért lásd: Régiók virtuális gépekhez az Azure-ban
Előfeltételek
Ha nem rendelkezik Azure-előfizetéssel, mindössze néhány perc alatt létrehozhat egy ingyenes fiókot a virtuális gép létrehozásának megkezdése előtt.
Hajtsa végre az IoT Hub Device Provisioning Service beállítása a Azure Portal című cikkben található lépéseket.
Használja a Bash-környezetet az Azure Cloud Shell. További információ: Rövid útmutató a Bashhez az Azure Cloud Shell-ban.
Ha inkább helyileg szeretné futtatni a PARANCSSORI referenciaparancsokat, telepítse az Azure CLI-t . Ha Windows vagy macOS rendszert használ, fontolja meg az Azure CLI Docker-tárolóban való futtatását. További információ: Az Azure CLI futtatása Docker-tárolóban.
Ha helyi telepítést használ, jelentkezzen be az Azure CLI-be az az login parancs futtatásával. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket. További bejelentkezési lehetőségekért lásd: Bejelentkezés az Azure CLI-vel.
Amikor a rendszer kéri, először telepítse az Azure CLI-bővítményt. További információ a bővítményekről: Bővítmények használata az Azure CLI-vel.
Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet.
Két regionális IoT Hub létrehozása
Ebben a szakaszban egy Azure-erőforráscsoportot és két új regionális IoT Hub-erőforrást fog létrehozni. Az egyik IoT Hub az USA 2. nyugati régiójához, a másik pedig az USA keleti régiójához lesz.
Fontos
Javasoljuk, hogy az oktatóanyagban létrehozott összes erőforráshoz ugyanazt az erőforráscsoportot használja. Ez megkönnyíti a tisztítást, miután végzett.
Az Azure Cloud Shell hozzon létre egy erőforráscsoportot az alábbi az group create paranccsal:
az group create --name contoso-us-resource-group --location eastus
Hozzon létre egy IoT Hubot az eastus helyen, és adja hozzá a létrehozott erőforráscsoporthoz az alábbi az iot hub create paranccsal (cserélje le
{unique-hub-name}
a elemet a saját egyedi nevére):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
A parancs végrehajtása eltarthat néhány percig.
Most hozzon létre egy IoT Hubot a westus2 helyen, és adja hozzá a létrehozott erőforráscsoporthoz az alábbi az iot hub create paranccsal (cserélje le
{unique-hub-name}
a saját egyedi nevére):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
A parancs végrehajtása eltarthat néhány percig.
Regisztráció létrehozása geokéséshez
Ebben a szakaszban egy új regisztrációs csoportot fog létrehozni az eszközeihez.
Az egyszerűség kedvéért ez az oktatóanyag szimmetrikus kulcsigazolást használ a regisztrációval. A biztonságosabb megoldás érdekében fontolja meg az X.509-tanúsítványigazolás megbízhatósági lánccal történő használatát.
Jelentkezzen be a Azure Portal, és keresse meg a Device Provisioning Service-példányt.
A navigációs menü Beállítások szakaszában válassza a Regisztrációk kezelése lehetőséget.
Válassza a Regisztrációs csoport hozzáadása lehetőséget.
A Regisztrációs csoport hozzáadása lap Regisztráció + kiépítés lapján adja meg a következő információkat a regisztrációs csoport részleteinek konfigurálásához:
Mező Leírás Igazolás Az Igazolási mechanizmusként válassza a Szimmetrikus kulcs lehetőséget. Szimmetrikus kulcsbeállítások Jelölje be a Szimmetrikus kulcsok automatikus létrehozása jelölőnégyzetet. Csoport neve Nevezze el a csoportnak a contoso-us-devices nevet, vagy adja meg a saját csoportnevét. A regisztrációs csoport neve kis- és nagybetűket nem megkülönböztető sztring (legfeljebb 128 karakter hosszú) alfanumerikus karakterekből és a speciális karakterekből: '-'
,'.'
,'_'
,':'
. Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-'
) kell lennie.Válassza a Tovább: IoT Hubok lehetőséget.
A következő lépésekkel adhatja hozzá a két IoT Hubot a regisztrációs csoporthoz:
A Regisztrációs csoport hozzáadása lap IoT Hubs lapján válassza a Hivatkozás hozzáadása az IoT Hubhoz lehetőséget a Cél IoT Hubok szakaszban.
A Hivatkozás hozzáadása az IoT Hubhoz lapon válassza ki az eastus régióban létrehozott IoT Hubot, és rendelje hozzá az iothubowner hozzáféréshez.
Kattintson a Mentés gombra.
Válassza ismét a Hivatkozás hozzáadása az IoT Hubhoz lehetőséget, és kövesse ugyanazokat a lépéseket a westus2 régióban létrehozott IoT Hub hozzáadásához.
A Cél IoT Hubok legördülő menüben válassza ki mindkét IoT Hubot.
A Foglalási szabályzatnál válassza a Legalacsonyabb késés lehetőséget.
Válassza az Áttekintés + létrehozás lehetőséget.
A Felülvizsgálat + létrehozás lapon ellenőrizze az összes értéket, majd válassza a Létrehozás lehetőséget.
A regisztrációs csoport létrehozása után válassza ki a contoso-us-devices nevet a regisztrációs csoportok listájából.
Másolja ki az elsődleges kulcsot. Ezzel a kulccsal később egyedi eszközkulcsokat hozhat létre mindkét szimulált eszközhöz.
Regionális Linux rendszerű virtuális gépek létrehozása
Ebben a szakaszban két regionális Linux rendszerű virtuális gépet hoz létre, egyet az USA 2. nyugati régiójában , egyet pedig az USA 2. keleti régiójában. Ezek a virtuális gépek minden régióból futtatnak egy eszközszimulációs mintát, amely bemutatja az eszközök mindkét régióból történő kiépítését.
A tisztítás megkönnyítése érdekében adja hozzá ezeket a virtuális gépeket ugyanahhoz az erőforráscsoporthoz, amely tartalmazza a létrehozott IoT Hubokat( contoso-us-resource-group).
Az Azure Cloud Shell futtassa a következő parancsot egy USA keleti régiójában lévő virtuális gép létrehozásához, miután végrehajtotta a következő paramétermódosításokat a parancsban:
--name: Adjon meg egy egyedi nevet az USA keleti régiójában található eszköz virtuális gépének.
--admin-username: Használja a saját rendszergazdai felhasználónevét.
--admin-password: Használja a saját rendszergazdai jelszavát.
az vm create \ --resource-group contoso-us-resource-group \ --name ContosoSimDeviceEast \ --location eastus \ --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \ --admin-username contosoadmin \ --admin-password myContosoPassword2018 \ --authentication-type password --public-ip-sku Standard
A parancs feldolgozása eltarthat néhány percig.
A parancs befejezése után másolja ki az USA keleti régiójában lévő virtuális gép publicIpAddress értékét.
Az Azure Cloud Shell futtassa az parancsot az USA 2. nyugati régiójában lévő virtuális gép létrehozásához, miután végrehajtotta a következő paramétermódosításokat a parancsban:
--name: Adjon meg egy egyedi nevet az USA 2. nyugati régiójában található regionális eszköz virtuális gépének.
--admin-username: Használja a saját rendszergazdai felhasználónevét.
--admin-password: Használja a saját rendszergazdai jelszavát.
az vm create \ --resource-group contoso-us-resource-group \ --name ContosoSimDeviceWest2 \ --location westus2 \ --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \ --admin-username contosoadmin \ --admin-password myContosoPassword2018 \ --authentication-type password --public-ip-sku Standard
A parancs feldolgozása eltarthat néhány percig.
A parancs befejezése után másolja ki az USA 2. nyugati régiójában lévő virtuális gép publicIpAddress értékét.
Nyisson meg két parancssori felületet.
Csatlakozzon az egyes rendszerhéjak egyik regionális virtuális gépéhez SSH használatával.
Adja át a rendszergazdai felhasználónevet és a paraméterekként kimásolt nyilvános IP-címet az SSH-nak. Amikor a rendszer kéri, adja meg a rendszergazdai jelszót.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$
ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
Az Azure IoT C SDK fejlesztési környezetének előkészítése
Ebben a szakaszban az Azure IoT C SDK-t fogja klónozni minden egyes virtuális gépen. Az SDK egy mintát tartalmaz, amely szimulálja az egyes régiók eszközkiépítését.
Minden virtuális gép esetében:
Telepítse a CMake, a g++, a gcc és a Git eszközt a következő parancsokkal:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
Keresse meg és másolja ki az SDK legújabb kiadásához tartozó címkenevet.
Klónozza az Azure IoT Device SDK for C-t mindkét virtuális gépen. Használja az előző lépésben talált címkét a
-b
paraméter értékeként, például:lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Ez a művelet várhatóan több percig is eltarthat.
Hozzon létre egy új cmake mappát az adattárban, és váltson erre a mappára.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmake
Futtassa a következő parancsot, amely az SDK egy, a fejlesztési ügyfélplatformra jellemző verzióját hozza létre:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
A sikeres létrehozást követően a kimenet utolsó sorai a következőhöz hasonlóan néznek majd ki:
-- IoT Client SDK Version = 1.7.0 -- Provisioning SDK Version = 1.7.0 -- Looking for include file stdint.h -- Looking for include file stdint.h - found -- Looking for include file stdbool.h -- Looking for include file stdbool.h - found -- target architecture: x86_64 -- Performing Test CXX_FLAG_CXX11 -- Performing Test CXX_FLAG_CXX11 - Success -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1") -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.58.0") -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so -- target architecture: x86_64 -- iothub architecture: x86_64 -- Configuring done -- Generating done -- Build files have been written to: /home/contosoadmin/azure-iot-sdk-c/azure-iot-sdk-c
Egyedi eszközkulcsok származtatása
Ha szimmetrikus kulcsigazolást használ csoportregisztrációkkal, nem használja közvetlenül a regisztrációs csoport kulcsait. Ehelyett az egyes eszközök regisztrációs csoportkulcsából származtat egy egyedi kulcsot.
Az oktatóanyag jelen részében egy eszközkulcsot fog létrehozni a csoport főkulcsából az eszköz egyedi regisztrációs azonosítójának HMAC-SHA256 kiszámításához. Az eredmény ezután Base64 formátumba lesz konvertálva.
Fontos
Ne foglalja bele a csoport főkulcsát az eszközkódba.
Eastus és westus2 eszközök esetén:
Hozza létre az egyedi kulcsot az openssl használatával. A következő Bash-rendszerhéjszkriptet fogja használni (cserélje le
{primary-key}
a elemet a regisztrációs csoport korábban kimásolt elsődleges kulcsára , és cserélje le a elemet{contoso-simdevice}
az egyes eszközök saját egyedi regisztrációs azonosítójára. A regisztrációs azonosító egy kis- és nagybetűket nem megkülönböztető sztring (legfeljebb 128 karakter hosszú) alfanumerikus karakterekből, valamint a speciális karakterekből:'-'
,'.'
,'_'
,':'
. Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-'
) kell lennie.KEY={primary-key} REG_ID={contoso-simdevice} keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000) echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
A szkript a következő kulcshoz hasonló kimenetet ad ki:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Most minden eszköz saját származtatott eszközkulccsal és egyedi regisztrációs azonosítóval rendelkezik, amellyel szimmetrikus kulcsigazolást végezhet a regisztrációs csoporttal az üzembe helyezési folyamat során.
Az egyes régiókból származó eszközök szimulálása
Ebben a szakaszban frissíteni fog egy kiépítési mintát az Azure IoT C SDK-ban mindkét regionális virtuális géphez.
A mintakód egy eszköz rendszerindítási sorozatát szimulálja, amely elküldi a kiépítési kérelmet a Device Provisioning Service-példánynak. A rendszerindítási sorrend miatt az eszköz felismerhető és hozzárendelhető a késés alapján legközelebbi IoT Hubhoz.
A Azure Portal válassza a Device Provisioning Service Áttekintés lapját, és jegyezze fel az azonosító hatókörének értékét.
Mindkét virtuális gépen nyissa meg a ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c fájlt szerkesztésre.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
Mindkét virtuális gépen keresse meg az
id_scope
állandót, és cserélje le az értéket a korábban kimásolt Azonosító hatóköre értékre.static const char* id_scope = "0ne00002193";
Mindkét virtuális gépen keresse meg a
main()
függvény definícióját ugyanabban a fájlban. Győződjön meg arról, hogySECURE_DEVICE_TYPE_SYMMETRIC_KEY
a változó azhsm_type
alábbi módon van beállítva, hogy megfeleljen a regisztrációs csoport igazolási módszerének.Mentse a fájl módosításait mindkét virtuális gépen.
SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Mindkét virtuális gépen keresse meg a hívását
prov_dev_set_symmetric_key_info()
a prov_dev_client_sample.c fájlban, amely megjegyzésként van megfűzve.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
Törölje a függvényhívások megjegyzését, és cserélje le a helyőrző értékeket (beleértve a szögletes zárójeleket is) az előző szakaszban származtatott minden egyes eszköz egyedi regisztrációs azonosítójára és származtatott eszközkulcsára. Az alábbi kulcsok példák. Használja a korábban létrehozott kulcsokat.
USA keleti régiója:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
USA nyugati régiója:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
Mentse a fájlt mindkét virtuális gépen.
Mindkét virtuális gépen keresse meg az alább látható mintamappát, és hozza létre a mintát.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config Debug
Ha a buildelés sikeres volt , futtassa prov_dev_client_sample.exemindkét virtuális gépen az egyes régiókból származó eszközök szimulálásához. Figyelje meg, hogy minden eszköz a szimulált eszköz régiójához legközelebbi IoT Hubhoz van lefoglalva.
Futtassa a szimulációt:
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
Példa az USA keleti virtuális gépének kimenetére:
contosoadmin@ContosoSimDeviceEast:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample Provisioning API Version: 1.2.9 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-east-hub.azure-devices.net, deviceId: contoso-simdevice-east Press enter key to exit:
Példa az USA nyugati virtuális gépének kimenetére:
contosoadmin@ContosoSimDeviceWest:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample Provisioning API Version: 1.2.9 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-west-hub.azure-devices.net, deviceId: contoso-simdevice-west Press enter key to exit:
Az erőforrások eltávolítása
Ha folytatni szeretné az oktatóanyagban létrehozott erőforrások használatát, elhagyhatja őket. Ellenkező esetben az alábbi lépésekkel törölheti az oktatóanyag által létrehozott összes erőforrást a szükségtelen költségek elkerülése érdekében.
Az itt leírt lépések feltételezik, hogy ebben az oktatóanyagban az összes erőforrást a contoso-us-resource-group nevű erőforráscsoport utasításai szerint hozta létre.
Fontos
Az erőforráscsoport törlése nem vonható vissza. Az erőforráscsoport és a benne foglalt erőforrások véglegesen törlődnek. Figyeljen, nehogy véletlenül rossz erőforráscsoportot vagy erőforrásokat töröljön. Ha az IoT Hubot egy meglévő, megtartani kívánt erőforrásokat tartalmazó erőforráscsoportban hozta létre, az erőforráscsoport törlése helyett törölheti csak magát az IoT Hub-erőforrást.
Az erőforráscsoport törlése név szerint:
Jelentkezzen be az Azure Portalra.
Válassza az Erőforráscsoportok lehetőséget.
A Szűrés név alapján... szövegmezőbe írja be az erőforrásokat tartalmazó erőforráscsoport nevét( contoso-us-resource-group).
Az eredménylistában kattintson az erőforráscsoporttól jobbra lévő … ikonra, majd kattintson az Erőforráscsoport törlése elemre.
A rendszer kérni fogja, hogy erősítse meg az erőforráscsoport törlését. Írja be ismét az erőforráscsoport nevét a megerősítéshez, majd válassza a Törlés lehetőséget. A rendszer néhány pillanaton belül törli az erőforráscsoportot és a benne foglalt erőforrásokat.
Következő lépések
Az egyéni foglalási szabályzatokkal kapcsolatos további információkért lásd: