Zelfstudie: Inrichten voor geo-latentie

Deze zelfstudie laat zien hoe u meerdere gesimuleerde symmetrische sleutelapparaten veilig 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.

Inrichting voor geolocatie/geolatentie is een veelvoorkomend toewijzingsscenario. Naarmate een apparaat tussen locaties wordt verplaatst, wordt de netwerklatentie verbeterd doordat het apparaat wordt ingericht voor de IoT-hub die zich het dichtst bij elke locatie bevindt. In dit scenario wordt een groep IoT-hubs, die verschillende regio's omvatten, geselecteerd voor inschrijvingen. Het ingebouwde toewijzingsbeleid voor laagste latentie is geselecteerd voor deze inschrijvingen. Dit beleid zorgt ervoor dat de Device Provisioning Service de latentie van het apparaat evalueert en de ioT-hub van de groep ioT-hubs bepaalt.

In deze zelfstudie wordt gebruikgemaakt van een voorbeeld van een gesimuleerd apparaat uit de Azure IoT C SDK om te laten zien hoe u apparaten in verschillende regio's kunt inrichten. 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 die fungeren als apparaten in dezelfde regio's (VS - west 2 en VS - oost)
  • De ontwikkelomgeving voor de Azure IoT C SDK instellen 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 Virtual Machines. Op het moment van schrijven van deze handleiding was het maken van VM's toegestaan in de regio's westus2 en eastus . Als u niet in een 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-hubresources. 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 eenvoudiger nadat u klaar bent.

  1. Maak in de 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 door {unique-hub-name} 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 in de locatie westus2 en voeg deze toe aan de resourcegroep die u hebt gemaakt met de volgende opdracht az iot hub create (vervang door {unique-hub-name} 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.

Ter vereenvoudiging wordt in deze zelfstudie gebruikgemaakt van Attestation met 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 de 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
    Attestation Selecteer Symmetrische sleutel als het Attestation-mechanisme.
    Instellingen voor symmetrische sleutels Schakel het selectievakje Automatisch symmetrische sleutels genereren in.
    Groepsnaam Geef uw groep de naam contoso-us-devices of geef uw eigen groepsnaam op. De naam van de inschrijvingsgroep is een 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 Doel-IoT-hubs .

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

    3. Selecteer Opslaan.

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

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

  7. Selecteer voor toewijzingsbeleid de optie Laagste latentie.

  8. Selecteer Controleren + maken.

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

  10. Nadat de 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 uit elke regio om de inrichting van apparaten voor apparaten uit beide regio's te demonstreren.

Om het opschonen gemakkelijker te maken, voegt u deze VM's toe aan dezelfde resourcegroep die de Gemaakte IoT-hubs bevat, contoso-us-resource-group.

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

    --name: voer een unieke naam in voor de 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. Zodra de opdracht is voltooid, kopieert u de publicIpAddress-waarde voor de VM in de regio VS - oost.

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

    --name: voer een unieke naam in voor uw regionale apparaat-VM VS - west 2 .

    --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. Zodra de opdracht is voltooid, kopieert u de publicIpAddress-waarde voor uw 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 de beheerder en het openbare IP-adres dat u hebt gekopieerd als parameters door 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 de inrichting van een apparaat 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 map cmake 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 om een versie van de SDK te bouwen 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 attestation met 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 sleutel van de inschrijvingsgroep 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 de groepshoofdsleutel niet op in de apparaatcode.

Voor apparateneastus en westus2 :

  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 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 de volgende sleutel uit:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Nu heeft elk apparaat een eigen afgeleide apparaatsleutel en unieke registratie-id voor het uitvoeren van symmetrische sleutelattestation 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.

De voorbeeldcode simuleert een opstartvolgorde van een apparaat die de inrichtingsaanvraag verzendt naar uw Device Provisioning Service-exemplaar. De opstartvolgorde zorgt ervoor dat het apparaat wordt herkend en toegewezen aan de IoT-hub die zich het dichtst bij de latentie bevindt.

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

    Haal de eindpuntgegevens van Device Provisioning Service op uit de portalblade.

  2. Open ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c op beide VM's 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 waarde van het id-bereik 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 op SECURE_DEVICE_TYPE_SYMMETRIC_KEY zoals hieronder wordt weergegeven, zodat deze overeenkomt met de attestation-methode van de inschrijvingsgroep.

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

    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 is uitgeschakeld.

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

    Verwijder de opmerking bij de functie-aanroepen en vervang de waarden van de tijdelijke aanduiding (inclusief de punthaken) door de unieke registratie-id's en afgeleide apparaatsleutels voor elk apparaat dat u in de vorige sectie hebt afgeleid. De sleutels die hieronder worden weergegeven, 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. Ga 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 uprov_dev_client_sample.exe uit op beide VM's om een apparaat uit elke regio te simuleren. U ziet dat elk apparaat is 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 wilt blijven werken met resources die in deze zelfstudie zijn gemaakt, kunt u deze laten staan. Gebruik anders de volgende stappen om alle resources te verwijderen die in deze zelfstudie zijn gemaakt om onnodige kosten te voorkomen.

Bij de stappen hier wordt ervan uitgegaan dat u alle resources in deze zelfstudie hebt gemaakt volgens de instructies 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 de Azure-portal.

  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