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 ligger 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 för lägsta svarstid har valts för dessa registreringar. Den här principen gör att Enhetsetableringstjänsten utvärderar enhetens svarstid och fastställer garderobens IoT-hubb 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 (lägsta 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å tillämpa begränsningar för skapande av virtuella datorer. 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
Förutsättningar
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Slutför stegen i Konfigurera IoT Hub Device Provisioning Service med Azure Portal.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
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 kommer att vara 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 gör rensningen enklare när du är klar.
I Azure Cloud Shell skapar du en resursgrupp med följande az group create-kommando :
az group create --name contoso-us-resource-group --location eastus
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 kan ta några minuter att slutföra det här kommandot.
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 kan ta några minuter att slutföra det här kommandot.
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.
Logga in på Azure Portal och navigera till instansen av enhetsetableringstjänsten.
Välj Hantera registreringar i avsnittet Inställningar i navigeringsmenyn.
Välj Lägg till registreringsgrupp.
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 Attest Välj Symmetrisk nyckel som attesteringsmekanism. Inställningar för symmetrisk nyckel Markera rutan Generera symmetriska nycklar automatiskt. Gruppnamn Ge din grupp namnet contoso-us-devices eller ange ditt eget gruppnamn. Namnet på registreringsgruppen är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-'
,'.'
,'_'
,':'
. Det sista tecknet måste vara alfanumeriskt eller streck ('-'
).Välj Nästa: IoT-hubbar.
Använd följande steg för att lägga till dina två IoT-hubbar i registreringsgruppen:
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.
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 till iothubowner.
Välj Spara.
Välj Lägg till länk till IoT Hub igen och följ samma steg för att lägga till den IoT-hubb som du skapade i regionen westus2 .
I listrutan Mål-IoT-hubbar väljer du båda IoT-hubbarna.
För allokeringsprincipen väljer du Lägsta svarstid.
Välj Granska + skapa.
På fliken Granska + skapa kontrollerar du alla dina värden och väljer sedan Skapa.
När registreringsgruppen har skapats väljer du namnet contoso-us-devices i listan över registreringsgrupper.
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.
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 några minuter att slutföra.
När kommandot har slutförts kopierar du värdet publicIpAddress för den virtuella datorn i regionen USA, östra.
I Azure Cloud Shell kör du kommandot för att skapa en virtuell dator i 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 några minuter att slutföra.
När kommandot har slutförts kopierar du publicIpAddress-värdet för din virtuella dator i usa, västra 2.
Öppna två kommandoradsgränssnitt.
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:
Installera CMake, g++, gcc och Git med hjälp av följande kommandon:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
Leta upp och kopiera taggnamnet för den senaste versionen av SDK:t.
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.
Skapa en ny cmake-mapp i lagringsplatsen och ändra till den mappen.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmake
Kör följande kommando, som skapar en version av SDK:et som är specifik för din utvecklingsklientplattform:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
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 en HMAC-SHA256 av det unika registrerings-ID:t för enheten. Resultatet konverteras sedan till Base64-format.
Viktigt!
Inkludera inte grupphuvudnyckeln i enhetskoden.
För både eastus - och westus2-enheter :
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ägeskä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
Skriptet matar ut något som liknar följande nyckel:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Nu har varje enhet en egen härledd enhetsnyckel och ett unikt 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.
I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten och noterar värdet för ID-omfång.
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
På båda de virtuella datorerna letar du reda på konstanten
id_scope
och ersätter värdet med det ID-omfångsvärde som du kopierade tidigare.static const char* id_scope = "0ne00002193";
På båda de virtuella datorerna letar du reda på definitionen för
main()
funktionen i samma fil. Kontrollera att variabelnhsm_type
är inställdSECURE_DEVICE_TYPE_SYMMETRIC_KEY
på 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;
På båda de virtuella datorerna hittar du 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 funktionen anropar 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=");
Spara filen på båda de virtuella datorerna.
På båda de virtuella datorerna går 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
När bygget har slutförts kör du prov_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 i 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 instruktionerna 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:
Logga in på Azure-portalen.
Välj Resursgrupper.
I textrutan Filtrera efter namn... skriver du namnet på resursgruppen som innehåller dina resurser, contoso-us-resource-group.
Till höger av din resursgrupp i resultatlistan klickar du på ... och därefter Ta bort resursgrupp.
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