Share via


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

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.

  1. 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
    
  2. 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.

  3. 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.

  1. Jelentkezzen be a Azure Portal, és keresse meg a Device Provisioning Service-példányt.

  2. A navigációs menü Beállítások szakaszában válassza a Regisztrációk kezelése lehetőséget.

  3. Válassza a Regisztrációs csoport hozzáadása lehetőséget.

  4. 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.
  5. Válassza a Tovább: IoT Hubok lehetőséget.

  6. A következő lépésekkel adhatja hozzá a két IoT Hubot a regisztrációs csoporthoz:

    1. 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.

    2. 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.

    3. Kattintson a Mentés gombra.

    4. 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.

    5. A Cél IoT Hubok legördülő menüben válassza ki mindkét IoT Hubot.

  7. A Foglalási szabályzatnál válassza a Legalacsonyabb késés lehetőséget.

  8. Válassza az Áttekintés + létrehozás lehetőséget.

  9. A Felülvizsgálat + létrehozás lapon ellenőrizze az összes értéket, majd válassza a Létrehozás lehetőséget.

  10. 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.

  11. 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).

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. Nyisson meg két parancssori felületet.

  6. 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:

  1. 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
    
  2. Keresse meg és másolja ki az SDK legújabb kiadásához tartozó címkenevet.

  3. 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.

  4. 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
    
  5. 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  ..
    
  6. 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:

  1. 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
    
  2. A szkript a következő kulcshoz hasonló kimenetet ad ki:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. 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.

  1. 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.

    Nyerje ki a Device Provisioning Service végpontadatait a portál paneljéről.

  2. 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
    
  3. 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";
    
  4. 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, hogy SECURE_DEVICE_TYPE_SYMMETRIC_KEY a változó az hsm_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;
    
  5. 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=");
    
  6. Mentse a fájlt mindkét virtuális gépen.

  7. 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
    
  8. 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:

  1. Jelentkezzen be az Azure Portalra.

  2. Válassza az Erőforráscsoportok lehetőséget.

  3. 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).

  4. Az eredménylistában kattintson az erőforráscsoporttól jobbra lévő ikonra, majd kattintson az Erőforráscsoport törlése elemre.

  5. 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: