Självstudie: Etablera geo-svarstid

Den här självstudien visar hur du på ett säkert sätt etablerar flera simulerade symmetriska nyckelenheter till en grupp IoT Hubs med hjälp av en allokeringsprincip. IoT Hub Device Provisioning Service (DPS) stöder olika allokeringsscenarier via dess inbyggda allokeringsprinciper och dess stöd för anpassade allokeringsprinciper.

Etablering för geoplats/geo-svarstid är ett vanligt allokeringsscenario. När en enhet flyttas mellan platser förbättras nätverksfördröjningen genom att enheten etableras till den IoT-hubb som är närmast varje plats. I det här scenariot väljs en grupp IoT-hubbar, som sträcker sig över flera regioner, för registreringar. Den inbyggda allokeringsprincipen lägsta svarstid väljs för dessa registreringar. Den här principen gör att Device Provisioning-tjänsten utvärderar enhetens svarstid och fastställer stängningen av IoT-hubben från gruppen med IoT-hubbar.

I den här självstudien används ett simulerat enhetsexempel från Azure IoT C SDK för att demonstrera hur du etablerar enheter mellan regioner. Du utför följande steg i den här självstudien:

  • Använd Azure CLI för att skapa två regionala IoT-hubbar (USA, västra 2 och USA, östra)
  • Skapa en registrering som etablerar enheter baserat på geoplats (kortast svarstid)
  • Använd Azure CLI för att skapa två regionala virtuella Linux-datorer som fungerar som enheter i samma regioner (USA, västra 2 och USA, östra)
  • Konfigurera utvecklingsmiljön för Azure IoT C SDK på båda de virtuella Linux-datorerna
  • Simulera enheterna och kontrollera att de har etablerats till IoT-hubben i den närmaste regionen.

Viktigt

Vissa regioner kan då och då framtvinga begränsningar för skapandet av Virtual Machines. När den här guiden skrevs tillät regionerna westus2 och eastus skapandet av virtuella datorer. Om du inte kan skapa i någon av dessa regioner kan du prova en annan region. Mer information om hur du väljer geografiska Azure-regioner när du skapar virtuella datorer finns i Regioner för virtuella datorer i Azure

Krav

Skapa två regionala IoT-hubbar

I det här avsnittet skapar du en Azure-resursgrupp och två nya regionala IoT Hub-resurser. En IoT-hubb kommer att vara för regionen USA, västra 2 och den andra för regionen USA, östra .

Viktigt

Vi rekommenderar att du använder samma resursgrupp för alla resurser som skapats i den här självstudien. Detta underlättar rensningen när du är klar.

  1. I Azure Cloud Shell skapar du en resursgrupp med följande kommando az group create:

    az group create --name contoso-us-resource-group --location eastus
    
  2. Skapa en IoT-hubb på platsen eastus och lägg till den i resursgruppen som du skapade med följande az iot hub create-kommando (ersätt {unique-hub-name} med ditt eget unika namn):

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

    Det här kommandot kan ta några minuter att slutföra.

  3. Skapa nu en IoT-hubb på platsen westus2 och lägg till den i resursgruppen som du skapade med följande az iot hub create-kommando (ersätt {unique-hub-name} med ditt eget unika namn):

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

    Det här kommandot kan ta några minuter att slutföra.

Skapa en registrering för geo-svarstid

I det här avsnittet skapar du en ny registreringsgrupp för dina enheter.

För enkelhetens skull använder den här självstudien symmetrisk nyckelattestering med registreringen. För en säkrare lösning bör du överväga att använda X.509-certifikatattestering med en förtroendekedja.

  1. Logga in på Azure Portal och gå till instansen av enhetsetableringstjänsten.

  2. Välj Hantera registreringar i avsnittet Inställningar på navigeringsmenyn.

  3. Välj Lägg till registreringsgrupp.

  4. På fliken Registrering + etablering på sidan Lägg till registreringsgrupp anger du följande information för att konfigurera information om registreringsgruppen:

    Fält Beskrivning
    Attestering Välj Symmetrisk nyckel som attesteringsmetod.
    Inställningar för symmetrisk nyckel Markera rutan Generera symmetriska nycklar automatiskt .
    Gruppnamn Ge gruppen namnet contoso-us-devices eller ange ditt eget gruppnamn. Namnet på registreringsgruppen är en skiftlägesokänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-').
  5. Välj Nästa: IoT-hubbar.

  6. Använd följande steg för att lägga till dina två IoT-hubbar i registreringsgruppen:

    1. På fliken IoT-hubbar på sidan Lägg till registreringsgrupp väljer du Lägg till länk till IoT Hub i avsnittet Mål-IoT-hubbar .

    2. På sidan Lägg till länk till IoT Hub väljer du den IoT-hubb som du skapade i regionen eastus och tilldelar den åtkomsten iothubowner .

    3. Välj Spara.

    4. Välj Lägg till länk till IoT Hub igen och följ samma steg för att lägga till IoT-hubben som du skapade i regionen westus2 .

    5. I listrutan Mål-IoT-hubbar väljer du båda IoT-hubbarna.

  7. För Allokeringsprincip väljer du Lägsta svarstid.

  8. Välj Granska + skapa.

  9. På fliken Granska + skapa kontrollerar du alla dina värden och väljer sedan Skapa.

  10. När registreringsgruppen har skapats väljer du namnet contoso-us-devices i listan över registreringsgrupper.

  11. Kopiera primärnyckeln. Den här nyckeln används senare för att generera unika enhetsnycklar för båda simulerade enheterna.

Skapa regionala virtuella Linux-datorer

I det här avsnittet skapar du två regionala virtuella Linux-datorer (VM), en i USA, västra 2 och en i USA, östra 2. De här virtuella datorerna kör ett exempel på enhetssimulering från varje region för att demonstrera enhetsetablering för enheter från båda regionerna.

För att göra rensningen enklare lägger du till dessa virtuella datorer i samma resursgrupp som innehåller de IoT-hubbar som skapades, contoso-us-resource-group.

  1. I Azure Cloud Shell kör du följande kommando för att skapa en virtuell dator i regionen USA, östra när du har gjort följande parameterändringar i kommandot:

    --name: Ange ett unikt namn för din virtuella dator för regionala enheter i USA, östra .

    --admin-username: Använd ditt eget administratörsanvändarnamn.

    --admin-password: Använd ditt eget administratörslösenord.

    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
    

    Kommandot tar fem minuter att slutföra.

  2. När kommandot har slutförts kopierar du publicIpAddress-värdet för din virtuella dator i regionen USA, östra.

  3. I Azure-Cloud Shell kör du kommandot för att skapa en virtuell dator i regionen USA, västra 2 efter att ha gjort följande parameterändringar i kommandot:

    --name: Ange ett unikt namn för din virtuella dator för regionala enheter i USA, västra 2 .

    --admin-username: Använd ditt eget administratörsanvändarnamn.

    --admin-password: Använd ditt eget administratörslösenord.

    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
    

    Kommandot tar fem minuter att slutföra.

  4. När kommandot har slutförts kopierar du värdet publicIpAddress för den virtuella datorn i regionen USA, västra 2.

  5. Öppna två kommandoradsgränssnitt.

  6. Anslut till en av de regionala virtuella datorerna i varje gränssnitt med hjälp av SSH.

    Skicka ditt administratörsanvändarnamn och den offentliga IP-adress som du kopierade som parametrar till SSH. Ange administratörslösenordet när du uppmanas att göra det.

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

Förbereda Azure IoT C SDK-utvecklingsmiljön

I det här avsnittet ska du klona Azure IoT C SDK på varje virtuell dator. SDK:n innehåller ett exempel som simulerar en enhetsetablering från varje region.

För varje virtuell dator:

  1. Installera CMake, g++, gcc och Git med följande kommandon:

    sudo apt-get update
    sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
    
  2. Leta upp och kopiera taggnamnet för den senaste versionen av SDK:t.

  3. Klona Azure IoT Device SDK för C på båda de virtuella datorerna. Använd taggen som du hittade i föregående steg som värde för parametern -b , till exempel: 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
    

    Den här åtgärden kan förväntas ta flera minuter att slutföra.

  4. Skapa en ny cmake-mapp på lagringsplatsen och ändra till den mappen.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Kör följande kommando, som skapar en version av SDK:et som är specifik för utvecklingsklientplattformen:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. När bygget är klart ser de sista utdataraderna ut ungefär som följande utdata:

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

Härled unika enhetsnycklar

När du använder symmetrisk nyckelattestering med gruppregistreringar använder du inte registreringsgruppnycklarna direkt. I stället härleder du en unik nyckel från registreringsgruppnyckeln för varje enhet.

I den här delen av självstudien genererar du en enhetsnyckel från grupphuvudnyckeln för att beräkna ett HMAC-SHA256 av enhetens unika registrerings-ID. Resultatet konverteras sedan till Base64-format.

Viktigt

Ta inte med din grupphuvudnyckel i enhetskoden.

För enheter med bådeeastus och westus2 :

  1. Generera din unika nyckel med hjälp av openssl. Du använder följande Bash-gränssnittsskript (ersätt {primary-key} med registreringsgruppens primärnyckel som du kopierade tidigare och ersätt {contoso-simdevice}med ditt eget unika registrerings-ID för varje enhet. Registrerings-ID:t är en skiftlägesokänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-').

    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. Skriptet matar ut något som liknar följande nyckel:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Nu har varje enhet sin egen härledda enhetsnyckel och unika registrerings-ID för att utföra symmetrisk nyckelattestering med registreringsgruppen under etableringsprocessen.

Simulera enheterna från varje region

I det här avsnittet uppdaterar du ett etableringsexempel i Azure IoT C SDK för båda de regionala virtuella datorerna.

Exempelkoden simulerar en enhetsstartsekvens som skickar etableringsbegäran till instansen av enhetsetableringstjänsten. Startsekvensen gör att enheten identifieras och tilldelas till den IoT-hubb som är närmast baserat på svarstiden.

  1. I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten och noterar värdet för ID-omfång.

    Extrahera information om enhetsetableringstjänstens slutpunkt från portalbladet.

  2. På båda virtuella datorerna öppnar du ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c för redigering.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. På båda de virtuella datorerna letar du upp konstanten id_scope och ersätter värdet med det ID-omfångsvärde som du kopierade tidigare.

    static const char* id_scope = "0ne00002193";
    
  4. På båda de virtuella datorerna letar du reda på definitionen för main() funktionen i samma fil. Kontrollera att variabeln hsm_type är inställd på SECURE_DEVICE_TYPE_SYMMETRIC_KEY enligt nedan för att matcha registreringsgruppens attesteringsmetod.

    Spara ändringarna i filerna på båda de virtuella datorerna.

    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. På båda de virtuella datorerna letar du reda på anropet till prov_dev_set_symmetric_key_info() i prov_dev_client_sample.c som har kommenterats ut.

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

    Avkommentera funktionens anrop och ersätt platshållarvärdena (inklusive vinkelparenteserna) med unika registrerings-ID:n och härledda enhetsnycklar för varje enhet som du härledde i föregående avsnitt. Nycklarna som visas nedan är exempel. Använd de nycklar som du genererade tidigare.

    USA, östra:

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

    USA, västra:

    // Set the symmetric key if using they auth type
    prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
    
  6. Spara filen på båda de virtuella datorerna.

  7. På båda de virtuella datorerna navigerar du till exempelmappen som visas nedan och skapar exemplet.

    cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/
    cmake --build . --target prov_dev_client_sample --config Debug
    
  8. När bygget är klar kör duprov_dev_client_sample.exe på båda de virtuella datorerna för att simulera en enhet från varje region. Observera att varje enhet allokeras till den IoT-hubb som är närmast den simulerade enhetens region.

    Kör simuleringen:

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

    Exempel på utdata från den virtuella datorn USA, östra:

    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:
    
    

    Exempel på utdata från den virtuella datorn i USA, västra:

    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:
    

Rensa resurser

Om du planerar att fortsätta arbeta med resurser som skapats i den här självstudien kan du lämna dem. Annars kan du använda följande steg för att ta bort alla resurser som skapats av den här självstudien för att undvika onödiga avgifter.

Stegen här förutsätter att du har skapat alla resurser i den här självstudien enligt anvisningarna i samma resursgrupp med namnet contoso-us-resource-group.

Viktigt

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser som ingår i den tas bort permanent. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat IoT Hub:en inuti en befintlig resursgrupp som innehåller resurser som du vill behålla, ta bara bort själva IoT Hub-resursen i stället för att ta bort resursgruppen.

Så här tar du bort resursgruppen efter namn:

  1. Logga in på Azure-portalen.

  2. Välj Resursgrupper.

  3. I textrutan Filtrera efter namn... skriver du namnet på resursgruppen som innehåller dina resurser, contoso-us-resource-group.

  4. Till höger av din resursgrupp i resultatlistan klickar du på ... och därefter Ta bort resursgrupp.

  5. Du uppmanas att bekräfta borttagningen av resursgruppen. Skriv namnet på resursgruppen igen för att bekräfta och välj sedan Ta bort. Efter en liten stund tas resursgruppen och resurser som finns i den bort.

Nästa steg

Mer information om anpassade allokeringsprinciper finns i