Kurz: Zřízení geografické latence
V tomto kurzu se dozvíte, jak bezpečně zřídit více simulovaných zařízení symetrických klíčů pro skupinu IoT Hubs pomocí zásad přidělování. Služba IoT Hub Device Provisioning Service (DPS) podporuje různé scénáře přidělování prostřednictvím předdefinovaných zásad přidělování a podpory vlastních zásad přidělování.
Zřizování geografické polohy nebo geografické latence je běžným scénářem přidělování. Při přesunu zařízení mezi umístěními se latence sítě vylepšuje tím, že je zařízení zřízené pro centrum IoT, které je nejblíže každému umístění. V tomto scénáři je pro registrace vybraná skupina ioT Hubů, která se nachází napříč oblastmi. Pro tyto registrace je vybraná předdefinovaná zásada přidělení nejnižší latence . Tato zásada způsobí, že služba Device Provisioning vyhodnotí latenci zařízení a určí centrum IoT, které je mimo skupinu ioT Hubů.
Tento kurz používá ukázku simulovaného zařízení ze sady Azure IoT C SDK k předvedení způsobu zřizování zařízení napříč oblastmi. V tomto kurzu provedete následující kroky:
- Použití Azure CLI k vytvoření dvou regionálních center IoT (USA – západ 2 a USA – východ)
- Vytvoření registrace, která zřizuje zařízení na základě geografické polohy (nejnižší latence)
- Použití Azure CLI k vytvoření dvou místních virtuálních počítačů s Linuxem, které budou fungovat jako zařízení ve stejných oblastech (USA – západ 2 a USA – východ)
- Nastavení vývojového prostředí pro sadu Azure IoT C SDK na obou virtuálních počítačích s Linuxem
- Simulujte zařízení a ověřte, že jsou zřízená v centru IoT v nejbližší oblasti.
Důležité
Některé oblasti můžou občas vynucovat omezení vytváření virtuálních počítačů. V době psaní tohoto průvodce povolily vytváření virtuálních počítačů oblasti westus2 a eastus . Pokud v některé z těchto oblastí nemůžete vytvořit, můžete zkusit jinou oblast. Další informace o výběru geografických oblastí Azure při vytváření virtuálních počítačů najdete v tématu Oblasti pro virtuální počítače v Azure.
Požadavky
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Proveďte kroky v části Nastavení služby IoT Hub Device Provisioning pomocí webu Azure Portal.
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Vytvoření dvou regionálních center IoT
V této části vytvoříte skupinu prostředků Azure a dvě nové místní prostředky ioT Hubu. Jedno centrum IoT bude pro oblast USA – západ 2 a druhá bude pro oblast USA – východ.
Důležité
Doporučujeme použít stejnou skupinu prostředků pro všechny prostředky vytvořené v tomto kurzu. To vám usnadní vyčištění po dokončení.
V Azure Cloud Shellu vytvořte skupinu prostředků pomocí následujícího příkazu az group create :
az group create --name contoso-us-resource-group --location eastus
Vytvořte centrum IoT v umístění eastus a přidejte ho do skupiny prostředků, kterou jste vytvořili, pomocí následujícího příkazu az iot hub create (nahraďte
{unique-hub-name}
vlastním jedinečným názvem):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
Dokončení tohoto příkazu může trvat několik minut.
Teď vytvořte centrum IoT v umístění westus2 a přidejte ho do skupiny prostředků, kterou jste vytvořili, pomocí následujícího příkazu az iot hub create (nahraďte
{unique-hub-name}
vlastním jedinečným názvem):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
Dokončení tohoto příkazu může trvat několik minut.
Vytvoření registrace pro geografickou latenci
V této části vytvoříte novou skupinu registrací pro vaše zařízení.
Pro zjednodušení tento kurz používá ověření symetrického klíče s registrací. Pokud chcete bezpečnější řešení, zvažte použití ověření certifikátu X.509 s řetězem důvěryhodnosti.
Přihlaste se k webu Azure Portal a přejděte k instanci služby Device Provisioning.
V části Nastavení navigační nabídky vyberte Spravovat registrace.
Vyberte Přidat skupinu registrací.
Na kartě Registrace a zřizování na stránce Přidat skupinu registrací zadejte následující informace pro konfiguraci podrobností skupiny registrací:
Pole Popis Atestace Jako mechanismus ověření identity vyberte symetrický klíč. Nastavení symetrického klíče Zaškrtněte políčko Automaticky generovat symetrické klíče. Název skupiny Pojmenujte skupinu contoso-us-devices nebo zadejte vlastní název skupiny. Název skupiny registrací je řetězec nerozlišující velká a malá písmena (maximálně 128 znaků dlouhý) alfanumerických znaků a speciálních znaků: '-'
,'.'
,'_'
':'
, . Poslední znak musí být alfanumerický nebo pomlčka ('-'
).Vyberte Další: IoT Hubs.
Pomocí následujících kroků přidejte do skupiny registrací vaše dvě centra IoT:
Na kartě Centra IoT na stránce Přidat skupinu registrací vyberte v části Cílové centra IoT odkaz na Centrum IoT.
Na stránce Přidat odkaz na centrum IoT vyberte centrum IoT, které jste vytvořili v oblasti eastus, a přiřaďte mu přístup iothubowner.
Zvolte Uložit.
Znovu vyberte Přidat odkaz na centrum IoT a stejným postupem přidejte centrum IoT, které jste vytvořili v oblasti westus2 .
V rozevírací nabídce Cílové centrum IoT vyberte obě centra IoT.
Pro zásadu přidělení vyberte Nejnižší latence.
Vyberte Zkontrolovat a vytvořit.
Na kartě Zkontrolovat a vytvořit ověřte všechny hodnoty a pak vyberte Vytvořit.
Po vytvoření skupiny registrací vyberte v seznamu skupin registrací její název contoso-us-devices .
Zkopírujte primární klíč. Tento klíč se použije později k vygenerování jedinečných klíčů zařízení pro obě simulovaná zařízení.
Vytvoření místních virtuálních počítačů s Linuxem
V této části vytvoříte dva místní virtuální počítače s Linuxem, jeden v oblasti USA – západ 2 a jeden v oblasti USA – východ 2. Tyto virtuální počítače spouští ukázku simulace zařízení z každé oblasti, která demonstruje zřizování zařízení pro zařízení z obou oblastí.
Aby bylo vyčištění jednodušší, přidejte tyto virtuální počítače do stejné skupiny prostředků, která obsahuje vytvořené centra IoT, contoso-us-resource-group.
Spuštěním následujícího příkazu v Azure Cloud Shellu vytvořte virtuální počítač oblasti USA – východ po provedení následujících změn parametrů v příkazu:
--name: Zadejte jedinečný název virtuálního počítače místního zařízení USA – východ.
--admin-username: Použijte vlastní uživatelské jméno správce.
--admin-password: Použijte vlastní heslo správce.
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
Dokončení tohoto příkazu bude trvat několik minut.
Po dokončení příkazu zkopírujte hodnotu publicIpAddress pro virtuální počítač oblasti USA – východ.
Spuštěním příkazu v Azure Cloud Shellu vytvořte virtuální počítač oblasti USA – západ 2 po provedení následujících změn parametrů v příkazu:
--name: Zadejte jedinečný název virtuálního počítače místního zařízení USA – západ 2 .
--admin-username: Použijte vlastní uživatelské jméno správce.
--admin-password: Použijte vlastní heslo správce.
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
Dokončení tohoto příkazu bude trvat několik minut.
Po dokončení příkazu zkopírujte hodnotu publicIpAddress pro virtuální počítač oblasti USA – západ 2.
Otevřete dvě prostředí příkazového řádku.
Připojte se k jednomu z regionálních virtuálních počítačů v každém prostředí pomocí SSH.
Předejte uživatelské jméno správce a veřejnou IP adresu, kterou jste zkopírovali jako parametry do SSH. Po zobrazení výzvy zadejte heslo správce.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$
ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
Příprava vývojového prostředí sady Azure IoT C SDK
V této části naklonujete sadu Azure IoT C SDK na každém virtuálním počítači. Sada SDK obsahuje ukázku, která simuluje zřizování zařízení z každé oblasti.
Pro každý virtuální počítač:
Pomocí následujících příkazů nainstalujte CMake, g++, gcc a Git:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
Vyhledejte a zkopírujte název značky pro nejnovější verzi sady SDK.
Naklonujte sadu Azure IoT Device SDK pro C na obou virtuálních počítačích. Jako hodnotu
-b
parametru použijte značku, kterou jste našli v předchozím kroku, například: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
Buďte připravení na to, že může trvat i několik minut, než se tato operace dokončí.
Vytvořte novou složku cmake v úložišti a přejděte do této složky.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmake
Spusťte následující příkaz, který sestaví verzi sady SDK specifickou pro vaši vývojovou klientskou platformu:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
Po úspěšném sestavení by posledních pár řádků výstupu mělo vypadat přibližně takto:
-- 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
Odvodit jedinečné klíče zařízení
Při použití ověření symetrického klíče s registracemi skupin nepoužíváte klíče skupiny registrací přímo. Místo toho odvozujete jedinečný klíč z klíče skupiny registrací pro každé zařízení.
V této části kurzu vygenerujete klíč zařízení z hlavního klíče skupiny pro výpočet HMAC-SHA256 jedinečného ID registrace zařízení. Výsledek se pak převede do formátu Base64.
Důležité
Do kódu zařízení nezahrnujte hlavní klíč skupiny.
Pro zařízení eastus i westus2:
Vygenerujte jedinečný klíč pomocí openssl. Použijete následující skript prostředí Bash (nahraďte
{primary-key}
primárním klíčem skupiny registrací, který jste zkopírovali dříve, a nahradíte{contoso-simdevice}
ho vlastním jedinečným ID registrace pro každé zařízení. ID registrace je řetězec nerozlišující velká a malá písmena (maximálně 128 znaků dlouhý) alfanumerických znaků a speciálních znaků:'-'
,'.'
,'_'
,':'
. Poslední znak musí být alfanumerický nebo pomlčka ('-'
).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
Skript zobrazí výstup podobný následujícímu klíči:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Každé zařízení má teď vlastní odvozený klíč zařízení a jedinečné ID registrace, které provádí ověření symetrického klíče se skupinou registrací během procesu zřizování.
Simulace zařízení z jednotlivých oblastí
V této části aktualizujete ukázku zřizování v sadě Azure IoT C SDK pro oba regionální virtuální počítače.
Ukázkový kód simuluje spouštěcí sekvenci zařízení, která odešle požadavek na zřizování do vaší instance služby Device Provisioning. Spouštěcí sekvence způsobí, že se zařízení rozpozná a přiřadí k centru IoT, které je nejblíže na základě latence.
Na webu Azure Portal vyberte kartu Přehled služby Device Provisioning a poznamenejte si hodnotu Rozsah ID.
Na obou virtuálních počítačích otevřete ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c pro úpravy.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
Na obou virtuálních počítačích najděte konstantu
id_scope
a nahraďte ji hodnotou oboru ID, kterou jste zkopírovali dříve.static const char* id_scope = "0ne00002193";
Na obou virtuálních počítačích najděte definici
main()
funkce ve stejném souboru. Ujistěte se,hsm_type
že je proměnná nastavená tak, jakSECURE_DEVICE_TYPE_SYMMETRIC_KEY
je znázorněno níže, aby odpovídala metodě ověření identity skupiny registrací.Uložte změny souborů na obou virtuálních počítačích.
SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Na obou virtuálních počítačích vyhledejte volání
prov_dev_set_symmetric_key_info()
v prov_dev_client_sample.c , který je okomentovaný.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
Odkomentujte volání funkce a nahraďte zástupné hodnoty (včetně hranatých závorek) jedinečnými ID registrace a odvozenými klíči zařízení pro každé zařízení odvozené v předchozí části. Níže uvedené klíče jsou příklady. Použijte klíče, které jste vygenerovali dříve.
USA – východ:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
USA – západ:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
Na obou virtuálních počítačích soubor uložte.
Na obou virtuálních počítačích přejděte do ukázkové složky uvedené níže a sestavte ukázku.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config Debug
Jakmile bude sestavení úspěšné, spusťte na obou virtuálních počítačích prov_dev_client_sample.exe a simulujte zařízení z každé oblasti. Všimněte si, že každé zařízení je přiděleno centru IoT, které je nejblíže oblasti simulovaného zařízení.
Spusťte simulaci:
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
Příklad výstupu z virtuálního počítače USA – východ:
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říklad výstupu z virtuálního počítače USA – západ:
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:
Vyčištění prostředků
Pokud chcete pokračovat v práci s prostředky vytvořenými v tomto kurzu, můžete je nechat. Jinak pomocí následujícího postupu odstraňte všechny prostředky vytvořené tímto kurzem, abyste se vyhnuli zbytečným poplatkům.
Tento postup předpokládá, že jste v tomto kurzu vytvořili všechny prostředky podle pokynů ve stejné skupině prostředků s názvem contoso-us-resource-group.
Důležité
Odstranění skupiny prostředků je nevratné. Skupina prostředků i všechny prostředky v ní obsažené se trvale odstraní. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky. Pokud jste službu IoT Hub vytvořili uvnitř existující skupiny prostředků obsahující prostředky, které chcete zachovat, odstraňte místo skupiny prostředků pouze samotný prostředek služby IoT.
Odstranění skupiny prostředků podle názvu:
Přihlaste se k portálu Azure.
Vyberte Skupiny prostředků.
Do textového pole Filtrovat podle názvu... zadejte název skupiny prostředků obsahující vaše prostředky contoso-us-resource-group.
V seznamu výsledků klikněte na ... napravo od vaší skupiny prostředků a pak na Odstranit skupinu prostředků.
Zobrazí se výzva k potvrzení odstranění skupiny prostředků. Znovu zadejte název skupiny prostředků, abyste ji potvrdili, a pak vyberte Odstranit. Po chvíli bude skupina prostředků včetně všech obsažených prostředků odstraněná.
Další kroky
Další informace o vlastních zásadách přidělování najdete v tématu