Share via


Zelfstudie: Inrichten voor geolatentie

Deze zelfstudie laat zien hoe u veilig meerdere gesimuleerde symmetrische sleutelapparaten kunt inrichten voor een groep IoT Hubs met behulp van een toewijzingsbeleid. IoT Hub Device Provisioning Service (DPS) ondersteunt verschillende toewijzingsscenario's via het ingebouwde toewijzingsbeleid en de ondersteuning voor aangepast toewijzingsbeleid.

Inrichten voor geolocatie/geolatentie is een algemeen toewijzingsscenario. Wanneer een apparaat tussen locaties wordt verplaatst, wordt de netwerklatentie verbeterd door het apparaat in te richten op de IoT-hub die zich het dichtst bij elke locatie bevindt. In dit scenario worden voor inschrijvingen een groep IoT-hubs geselecteerd die zich over verschillende regio's bevinden. Het ingebouwde toewijzingsbeleid voor laagste latentie is geselecteerd voor deze inschrijvingen. Dit beleid zorgt ervoor dat Device Provisioning Service de apparaatlatentie evalueert en de closet IoT-hub uit de groep IoT-hubs bepaalt.

In deze zelfstudie wordt een voorbeeld van een gesimuleerd apparaat uit de Azure IoT C SDK gebruikt om te laten zien hoe u apparaten in verschillende regio's inricht. In deze zelfstudie voert u de volgende stappen uit:

  • De Azure CLI gebruiken om twee regionale IoT-hubs te maken (VS - west 2 en VS - oost)
  • Een inschrijving maken die apparaten inricht op basis van geolocatie (laagste latentie)
  • Gebruik de Azure CLI om twee regionale Linux-VM's te maken om te fungeren als apparaten in dezelfde regio's (VS - west 2 en VS - oost)
  • De ontwikkelomgeving instellen voor de Azure IoT C SDK op beide Linux-VM's
  • Simuleer de apparaten en controleer of ze zijn ingericht voor de IoT-hub in de dichtstbijzijnde regio.

Belangrijk

Sommige regio's kunnen van tijd tot tijd beperkingen afdwingen voor het maken van virtuele machines. Op het moment van schrijven van deze handleiding hebben de regio's westus2 en eastus het maken van VM's toegestaan. Als u geen van deze regio's kunt maken, kunt u een andere regio proberen. Zie Regio's voor virtuele machines in Azure voor meer informatie over het kiezen van geografische Azure-regio's bij het maken van VM's

Vereisten

Twee regionale IoT-hubs maken

In deze sectie maakt u een Azure-resourcegroep en twee nieuwe regionale IoT Hub-resources. De ene IoT-hub is voor de regio VS - west 2 en de andere voor de regio VS - oost.

Belangrijk

Het is raadzaam om dezelfde resourcegroep te gebruiken voor alle resources die in deze zelfstudie zijn gemaakt. Dit maakt het opschonen gemakkelijker nadat u klaar bent.

  1. Maak in Azure Cloud Shell een resourcegroep met de volgende opdracht az group create :

    az group create --name contoso-us-resource-group --location eastus
    
  2. Maak een IoT-hub op de locatie eastus en voeg deze toe aan de resourcegroep die u hebt gemaakt met de volgende opdracht az iot hub create (vervang {unique-hub-name} door uw eigen unieke naam):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
    

    Het volledig uitvoeren van de opdracht kan even duren.

  3. Maak nu een IoT-hub op de locatie westus2 en voeg deze toe aan de resourcegroep die u hebt gemaakt met de volgende opdracht az iot hub create (vervang {unique-hub-name} door uw eigen unieke naam):

    az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
    

    Het volledig uitvoeren van de opdracht kan even duren.

Een inschrijving voor geolatentie maken

In deze sectie maakt u een nieuwe inschrijvingsgroep voor uw apparaten.

Voor het gemak maakt deze zelfstudie gebruik van Attestation voor symmetrische sleutels bij de inschrijving. Voor een veiligere oplossing kunt u gebruikmaken van de verklaring met het X.509-certificaat met een vertrouwensketen.

  1. Meld u aan bij Azure Portal en navigeer naar uw Device Provisioning Service-exemplaar.

  2. Selecteer Inschrijvingen beheren in de sectie Instellingen van het navigatiemenu.

  3. Selecteer Inschrijvingsgroep toevoegen.

  4. Geef op het tabblad Registratie en inrichting van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om de details van de inschrijvingsgroep te configureren:

    Veld Beschrijving
    Attest Selecteer symmetrische sleutel als attestation-mechanisme.
    Instellingen voor symmetrische sleutels Schakel het selectievakje Symmetrische sleutels genereren automatisch in.
    Groepsnaam Geef uw groep een naam op voor contoso-us-apparaten of geef uw eigen groepsnaam op. De naam van de inschrijvingsgroep is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-', '.', '_', . ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn.
  5. Selecteer Volgende: IoT-hubs.

  6. Gebruik de volgende stappen om uw twee IoT-hubs toe te voegen aan de inschrijvingsgroep:

    1. Selecteer op het tabblad IoT-hubs van de pagina Inschrijvingsgroep toevoegen de optie Koppeling toevoegen aan IoT-hub in de sectie IoT-doelhubs.

    2. Selecteer op de pagina Koppeling toevoegen aan IoT-hub de IoT-hub die u in de regio Eastus hebt gemaakt en wijs deze toe aan de iothubowner-toegang .

    3. Selecteer Opslaan.

    4. Selecteer Koppeling toevoegen aan IoT-hub opnieuw en volg dezelfde stappen om de IoT-hub toe te voegen die u in de regio westus2 hebt gemaakt.

    5. Selecteer in het vervolgkeuzemenu Doel-IoT-hubs beide IoT-hubs.

  7. Selecteer voor het toewijzingsbeleid de laagste latentie.

  8. Selecteer Controleren + maken.

  9. Controleer op het tabblad Controleren en maken al uw waarden en selecteer Vervolgens Maken.

  10. Zodra uw inschrijvingsgroep is gemaakt, selecteert u de naam contoso-us-devices in de lijst met inschrijvingsgroepen.

  11. Kopieer de primaire sleutel. Deze sleutel wordt later gebruikt om unieke apparaatsleutels te genereren voor beide gesimuleerde apparaten.

Regionale Linux-VM's maken

In deze sectie maakt u twee regionale virtuele Linux-machines (VM's), één in VS - west 2 en één in VS - oost 2. Deze VM's voeren een voorbeeld van apparaatsimulatie uit vanuit elke regio om apparaatinrichting voor apparaten uit beide regio's te demonstreren.

Als u het opschonen eenvoudiger wilt maken, voegt u deze VM's toe aan dezelfde resourcegroep die de IoT-hubs bevat die zijn gemaakt, contoso-us-resource-group.

  1. Voer in Azure Cloud Shell de volgende opdracht uit om een VM voor de regio VS - oost te maken nadat u de volgende parameterwijzigingen in de opdracht hebt aangebracht:

    --name: Voer een unieke naam in voor de regionale VM van uw regionale apparaat in VS - oost.

    --admin-username: Gebruik uw eigen gebruikersnaam voor beheerders.

    --admin-password: Gebruik uw eigen beheerderswachtwoord.

    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
    

    Het uitvoeren van deze opdracht duurt enkele minuten.

  2. Nadat de opdracht is voltooid, kopieert u de publicIpAddress-waarde voor de VM in de regio VS - oost.

  3. Voer in Azure Cloud Shell de opdracht uit om een regio-VM vs - west 2 te maken nadat u de volgende parameterwijzigingen in de opdracht hebt aangebracht:

    --name: Voer een unieke naam in voor de regionale VM van uw vs - west 2-apparaat .

    --admin-username: Gebruik uw eigen gebruikersnaam voor beheerders.

    --admin-password: Gebruik uw eigen beheerderswachtwoord.

    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
    

    Het uitvoeren van deze opdracht duurt enkele minuten.

  4. Nadat de opdracht is voltooid, kopieert u de publicIpAddress-waarde voor de regio-VM VS - west 2.

  5. Open twee opdrachtregelshells.

  6. Maak verbinding met een van de regionale VM's in elke shell met behulp van SSH.

    Geef de gebruikersnaam van uw beheerder en het openbare IP-adres door dat u als parameters hebt gekopieerd naar SSH. Voer het beheerderswachtwoord in wanneer u hierom wordt gevraagd.

    ssh contosoadmin@1.2.3.4
    
    contosoadmin@ContosoSimDeviceEast:~$
    
    ssh contosoadmin@5.6.7.8
    
    contosoadmin@ContosoSimDeviceWest:~$
    

De ontwikkelomgeving voorbereiden voor de Azure IoT C-SDK

In deze sectie kloont u de Azure IoT C SDK op elke VM. De SDK bevat een voorbeeld waarmee een apparaatinrichting vanuit elke regio wordt gesimuleerd.

Voor elke VM:

  1. Installeer CMake, g++, gcc en Git met behulp van de volgende opdrachten:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. Zoek en kopieer de tagnaam voor de nieuwste versie van de SDK.

  3. Kloon de Azure IoT Device SDK voor C op beide VM's. Gebruik de tag die u in de vorige stap hebt gevonden als de waarde voor de -b parameter, bijvoorbeeld: 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
    

    Deze bewerking kan enkele minuten in beslag nemen.

  4. Maak een nieuwe cmake-map in de opslagplaats en ga naar die map.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Voer de volgende opdracht uit, waarmee een versie van de SDK wordt gebouwd die specifiek is voor uw ontwikkelclientplatform:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. Zodra het bouwen is voltooid, zijn de laatste paar uitvoerregels vergelijkbaar met de volgende uitvoer:

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

Unieke apparaatsleutels afleiden

Wanneer u een attestation voor symmetrische sleutels gebruikt met groepsinschrijvingen, gebruikt u de sleutels van de inschrijvingsgroep niet rechtstreeks. In plaats daarvan leidt u een unieke sleutel af van de inschrijvingsgroepssleutel voor elk apparaat.

In dit deel van de zelfstudie genereert u een apparaatsleutel van de groepshoofdsleutel om een HMAC-SHA256 van de unieke registratie-id voor het apparaat te berekenen. Het resultaat wordt vervolgens geconverteerd naar de Base64-indeling.

Belangrijk

Neem uw groepshoofdsleutel niet op in de apparaatcode.

Voor zowel eastus- als westus2-apparaten :

  1. Genereer uw unieke sleutel met behulp van openssl. U gebruikt het volgende Bash-shellscript (vervang door {primary-key} de primaire sleutel van de inschrijvingsgroep die u eerder hebt gekopieerd en vervang deze door {contoso-simdevice}uw eigen unieke registratie-id voor elk apparaat. De registratie-id is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-', '.', '_'. ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn.

    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. Het script voert ongeveer als de volgende sleutel uit:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Elk apparaat heeft nu een eigen afgeleide apparaatsleutel en unieke registratie-id om symmetrische sleutelattestatie uit te voeren met de inschrijvingsgroep tijdens het inrichtingsproces.

De apparaten uit elke regio simuleren

In deze sectie werkt u een inrichtingsvoorbeeld bij in de Azure IoT C SDK voor beide regionale VM's.

Met de voorbeeldcode wordt een opstartvolgorde van een apparaat gesimuleerd waarmee de inrichtingsaanvraag naar uw Device Provisioning Service-exemplaar wordt verzonden. De opstartvolgorde zorgt ervoor dat het apparaat wordt herkend en toegewezen aan de IoT-hub die het dichtst bij de latentie ligt.

  1. Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service en noteer de waarde van het id-bereik.

    Informatie over Device Provisioning Service-eindpunten extraheren uit de portalblade.

  2. Open op beide VMS ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c om te bewerken.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. Zoek op beide VM's de id_scope constante en vervang de waarde door de id-bereikwaarde die u eerder hebt gekopieerd.

    static const char* id_scope = "0ne00002193";
    
  4. Zoek op beide VM's de definitie voor de main() functie in hetzelfde bestand. Zorg ervoor dat de hsm_type variabele is ingesteld SECURE_DEVICE_TYPE_SYMMETRIC_KEY op zoals hieronder wordt weergegeven, zodat deze overeenkomt met de attestation-methode voor de inschrijvingsgroep.

    Sla uw wijzigingen op in de bestanden op beide VM's.

    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. Zoek op beide VM's de aanroep naar prov_dev_set_symmetric_key_info() in prov_dev_client_sample.c die als commentaar wordt weergegeven.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Verwijder opmerkingen bij de functie-aanroepen en vervang de waarden van de tijdelijke aanduidingen (inclusief de punthaken) door de unieke registratie-id's en afgeleide apparaatsleutels voor elk apparaat dat u in de vorige sectie hebt afgeleid. De onderstaande sleutels zijn voorbeelden. Gebruik de sleutels die u eerder hebt gegenereerd.

    VS - oost:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
    

    VS - west:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. Sla het bestand op beide VM's op.

  7. Navigeer op beide VM's naar de onderstaande voorbeeldmap en bouw het voorbeeld.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. Zodra de build is voltooid, voert u prov_dev_client_sample.exe uit op beide VM's om een apparaat vanuit elke regio te simuleren. U ziet dat elk apparaat wordt toegewezen aan de IoT-hub die het dichtst bij de regio van het gesimuleerde apparaat ligt.

    Voer de simulatie uit:

    ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
    

    Voorbeelduitvoer van de VM VS - oost:

    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:
    
    

    Voorbeelduitvoer van de VM VS - west:

    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:
    

Resources opschonen

Als u van plan bent om door te gaan met resources die in deze zelfstudie zijn gemaakt, kunt u ze verlaten. Gebruik anders de volgende stappen om alle resources te verwijderen die in deze zelfstudie zijn gemaakt om onnodige kosten te voorkomen.

In de volgende stappen wordt ervan uitgegaan dat u alle resources in deze zelfstudie hebt gemaakt, zoals aangegeven in dezelfde resourcegroep met de naam contoso-us-resource-group.

Belangrijk

Het verwijderen van een resourcegroep kan niet ongedaan worden gemaakt. De resourcegroep en alle resources daarin worden permanent verwijderd. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de IoT Hub in een bestaande resourcegroep hebt gemaakt met resources die u wilt behouden, moet u alleen de IoT Hub-resource zelf verwijderen in plaats van de resourcegroep te verwijderen.

U verwijdert als volgt de resourcegroep op naam:

  1. Meld u aan bij het Azure-portaal.

  2. Selecteer Resourcegroepen.

  3. Typ in het tekstvak Filteren op naam... de naam van de resourcegroep die uw resources bevat, contoso-us-resource-group.

  4. Klik rechts van de resourcegroep in de lijst met resultaten op ... en vervolgens op Resourcegroep verwijderen.

  5. U wordt gevraagd om het verwijderen van de resourcegroep te bevestigen. Typ ter bevestiging nogmaals de naam van de resourcegroep. Selecteer vervolgens Verwijderen. Na enkele ogenblikken worden de resourcegroep en alle resources in de groep verwijderd.

Volgende stappen

Zie voor meer informatie over aangepast toewijzingsbeleid