Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym samouczku pokazano, jak bezpiecznie aprowizować wiele symulowanych urządzeń z kluczami symetrycznymi do grupy centrów IoT przy użyciu polityki alokacji. Usługa IoT Hub Device Provisioning Service (DPS) obsługuje różne scenariusze alokacji za pomocą wbudowanych zasad alokacji i obsługi niestandardowych zasad alokacji.
Konfigurowanie dla geolokalizacji/opóźnienia geograficznego jest typowym scenariuszem alokacji. W miarę jak urządzenie przemieszcza się między lokalizacjami, opóźnienie sieci poprawia się dzięki aprowizowaniu urządzenia w centrum IoT, które znajduje się najbliżej danej lokalizacji. W tym scenariuszu dla rejestracji wybrano grupę centrów IoT, które obejmują wiele regionów. Dla tych rejestracji wybrano wbudowaną politykę alokacji o najniższym opóźnieniu. Ta zasada powoduje, że usługa Device Provisioning Service ocenia opóźnienia urządzeń i określa najbliższy IoT hub spośród grupy hubów IoT.
W tym samouczku użyto przykładu symulowanego urządzenia z zestawu SDK języka C usługi Azure IoT, aby zademonstrować sposób aprowizacji urządzeń w różnych regionach. W tym samouczku wykonasz następujące kroki:
- Użyj interfejsu wiersza polecenia platformy Azure, aby utworzyć dwa regionalne centra IoT (Zachodnie stany USA 2 i Wschodnie stany USA)
- Utwórz rejestrację, która konfiguruje urządzenia na podstawie geolokalizacji (najmniejsze opóźnienie)
- Użyj interfejsu wiersza polecenia platformy Azure, aby utworzyć dwie regionalne maszyny wirtualne z systemem Linux do działania jako urządzenia w tych samych regionach (Zachodnie stany USA 2 i Wschodnie stany USA)
- Konfigurowanie środowiska deweloperskiego dla zestawu AZURE IoT C SDK na obu maszynach wirtualnych z systemem Linux
- Zasymuluj urządzenia i sprawdź, czy są one udostępnione w węźle IoT najbliższego regionu.
Ważne
Niektóre regiony mogą od czasu do czasu wymuszać ograniczenia tworzenia maszyn wirtualnych. W momencie pisania tego przewodnika regiony westus2 i eastus zezwoliły na tworzenie maszyn wirtualnych. Jeśli nie możesz utworzyć w jednym z tych regionów, możesz wypróbować inny region. Aby dowiedzieć się więcej na temat wybierania regionów geograficznych platformy Azure podczas tworzenia maszyn wirtualnych, zobacz Regiony maszyn wirtualnych na platformie Azure
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wykonaj kroki opisane w przewodniku Szybki start: konfigurowanie usługi IoT Hub Device Provisioning przy użyciu witryny Azure Portal.
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Przy pierwszym użyciu, gdy pojawi się monit, zainstaluj rozszerzenie Azure CLI. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Tworzenie dwóch regionalnych centrów IoT
W tej sekcji utworzysz grupę zasobów platformy Azure i dwa nowe regionalne zasoby centrum IoT Hub. Jedno centrum IoT jest przeznaczone dla regionu Zachodnie stany USA 2 , a drugie dotyczy regionu Wschodnie stany USA .
Ważne
Zalecamy użycie tej samej grupy zasobów dla wszystkich zasobów utworzonych w tym samouczku. Użycie tej samej grupy zasobów ułatwia czyszczenie po zakończeniu.
W usłudze Azure Cloud Shell utwórz grupę zasobów za pomocą następującego polecenia az group create :
az group create --name contoso-us-resource-group --location eastusUtwórz centrum IoT Hub w lokalizacji eastus i dodaj je do utworzonej grupy zasobów za pomocą następującego polecenia az iot hub create (zastąp
{unique-hub-name}element własną unikatową nazwą):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1Wykonanie tego polecenia może potrwać kilka minut.
Teraz utwórz hub IoT w lokalizacji westus2 i dodaj go do utworzonej grupy zasobów, korzystając z następującego polecenia az iot hub create (zastąp
{unique-hub-name}swoją unikatową nazwą):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1Wykonanie tego polecenia może potrwać kilka minut.
Tworzenie rejestracji na potrzeby opóźnienia geograficznego
W tej sekcji utworzysz nową grupę rejestrowania dla swoich urządzeń.
Dla uproszczenia w tym samouczku używane jest zaświadczanie klucza symetrycznego z rejestracją. Dla bardziej bezpiecznego rozwiązania rozważ użycie potwierdzenia certyfikatu X.509 z łańcuchem zaufania.
Zaloguj się do portalu Azure i przejdź do instancji usługi Device Provisioning Service.
Wybierz pozycję Zarządzaj rejestracjami w sekcji Ustawienia w menu nawigacji.
Wybierz Dodaj grupę rejestracji.
Na karcie Rejestracja i aprowizacja na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby skonfigurować szczegóły grupy rejestracji:
Pole opis Zaświadczanie Wybierz klucz symetryczny jako mechanizm zaświadczania. Ustawienia klucza symetrycznego Zaznacz pole Automatycznie generuj klucze symetryczne. Nazwa grupy Nadaj grupie nazwę contoso-us-devices lub podaj własną nazwę grupy. Nazwa grupy rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znaków specjalnych: '-','.','_',':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-').Wybierz Dalej: Centra IoT.
Wykonaj następujące kroki, aby dodać dwa centra IoT do grupy rejestracji:
Na karcie IoT hubów na stronie Dodaj grupę rejestracji, wybierz pozycję Dodaj link do IoT hubu w sekcji IoT huby docelowe.
Na stronie Dodaj link do centrum IoT wybierz centrum IoT, które utworzyłeś w regionie eastus i przypisz do niego dostęp iothubowner.
Wybierz pozycję Zapisz.
Ponownie wybierz Dodaj link do centrum IoT i wykonaj te same kroki, aby dodać centrum IoT utworzone w regionie westus2.
wybierz oba centra IoT .
W obszarze Zasady alokacji wybierz pozycję Najniższe opóźnienie.
Wybierz Przejrzyj i utwórz.
Na karcie Przeglądanie i tworzenie sprawdź wszystkie wartości, a następnie wybierz pozycję Utwórz.
Po utworzeniu grupy rejestracji wybierz jej nazwę contoso-us-devices z listy grup rejestracji.
Skopiuj klucz podstawowy. Ten klucz jest używany później do generowania unikatowych kluczy urządzenia dla obu symulowanych urządzeń.
Tworzenie regionalnych maszyn wirtualnych z systemem Linux
W tej sekcji utworzysz dwie regionalne maszyny wirtualne z systemem Linux, jedną w regionie Zachodnie stany USA 2 i jedną w regionie Wschodnie stany USA 2. Te maszyny wirtualne uruchamiają przykład symulacji urządzenia z każdego regionu, aby zademonstrować aprowizację urządzeń z obu regionów.
Aby ułatwić zadanie sprzątania, dodaj te maszyny wirtualne do tej samej grupy zasobów, która zawiera utworzone koncentratory IoT, contoso-us-resource-group.
W usłudze Azure Cloud Shell uruchom następujące polecenie, aby utworzyć maszynę wirtualną w regionie Wschodnich Stanów USA po wprowadzeniu następujących zmian parametrów w poleceniu:
--name: Wprowadź unikatową nazwę maszyny wirtualnej dla urządzenia regionalnego w Wschodnich Stanach USA.
--admin-username: użyj własnej nazwy użytkownika administratora.
--admin-password: użyj własnego hasła administratora.
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 StandardWykonanie tego polecenia może potrwać kilka minut.
Po zakończeniu polecenia skopiuj wartość publicIpAddress dla wirtualnej maszyny w regionie Wschodnich Stanów Zjednoczonych.
W usłudze Azure Cloud Shell uruchom polecenie, aby utworzyć maszynę wirtualną w regionie West US 2 po wprowadzeniu następujących zmian parametrów w wierszu polecenia:
--name: Wprowadź unikatową nazwę regionalnej maszyny wirtualnej urządzenia West US 2.
--admin-username: użyj własnej nazwy użytkownika administratora.
--admin-password: użyj własnego hasła administratora.
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 StandardWykonanie tego polecenia może potrwać kilka minut.
Po zakończeniu wykonywania polecenia skopiuj wartość publicIpAddress dla maszyny wirtualnej regionu Zachodnie Stany Zjednoczone 2.
Otwórz dwie powłoki wiersza polecenia.
Połącz się z jedną z regionalnych maszyn wirtualnych w każdej powłoce przy użyciu protokołu SSH.
Przekaż nazwę użytkownika administratora i publiczny adres IP skopiowany jako parametry do protokołu SSH. Wprowadź hasło administratora, gdy pojawi się o to prośba.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
Przygotowywanie środowiska deweloperskiego zestawu AZURE IoT C SDK
W tej sekcji sklonujesz zestaw SDK języka C usługi Azure IoT na każdej maszynie wirtualnej. Zestaw SDK zawiera przykład, który symuluje aprowizację urządzenia z każdego regionu.
Dla każdej maszyny wirtualnej:
Zainstaluj narzędzia CMake, g++, gcc i Git przy użyciu następujących poleceń:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-allZnajdź i skopiuj nazwę tagu dla najnowszej wersji zestawu SDK.
Sklonuj Azure IoT Device SDK dla C na obu maszynach wirtualnych. Użyj tagu znalezionego w poprzednim kroku jako wartości parametru
-b, na przykład:lts_03_2025.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --initNależy się spodziewać, że ukończenie operacji potrwa kilka minut.
Utwórz nowy folder cmake wewnątrz repozytorium i przejdź do tego folderu.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmakeUruchom następujące polecenie, które kompiluje wersję zestawu SDK specyficzną dla platformy klienta programowania:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..Po pomyślnym zakończeniu kompilacji ostatnie kilka wierszy wyjściowych będzie wyglądać podobnie do następujących danych wyjściowych:
-- 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
Uzyskiwanie unikatowych kluczy urządzeń
W przypadku korzystania z zaświadczania klucza symetrycznego z rejestracjami grup nie należy używać kluczy grupy rejestracji bezpośrednio. Zamiast tego należy utworzyć unikatowy klucz z klucza grupy rejestracji dla każdego urządzenia.
W tej części samouczka wygenerujesz klucz urządzenia z klucza głównego grupy w celu obliczenia HMAC-SHA256 unikatowego identyfikatora rejestracji urządzenia. Wynik jest następnie konwertowany na format Base64.
Ważne
Nie dołączaj klucza głównego grupy do kodu urządzenia.
W przypadku urządzeń zarówno eastus jak i westus2:
Wygeneruj unikatowy klucz przy użyciu polecenia openssl. Użyj następującego skryptu powłoki Bash (zastąp ciąg
{primary-key}grupy przypisania skopiowany wcześniej i zastąp ciąg{contoso-simdevice}własnym unikatowym identyfikatorem rejestracji dla każdego urządzenia. Identyfikator rejestracji jest ciągiem niezależnym od wielkości liter, składającym się z maksymalnie 128 znaków alfanumerycznych oraz znaków specjalnych:'-','.','_',':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-').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 | base64Skrypt generuje dane wyjściowe podobne do następującego klucza:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=Teraz każde urządzenie ma własny pochodny klucz urządzenia i unikatowy identyfikator rejestracji, aby wykonać uwierzytelnianie klucza symetrycznego z grupą rejestracji podczas procesu provisioningu.
Symulowanie urządzeń z każdego regionu
W tej sekcji zaktualizujesz przykład konfiguracji w zestawie Azure IoT C SDK dla obu regionalnych maszyn wirtualnych.
Przykładowy kod symuluje sekwencję rozruchu urządzenia, która wysyła żądanie aprowizacji do wystąpienia usługi Device Provisioning Service. Sekwencja rozruchowa powoduje rozpoznawanie i przypisywanie urządzenia do centrum IoT, które jest najbliżej na podstawie opóźnienia.
Na portalu Azure wybierz kartę Przegląd dla swojej usługi Device Provisioning Service i zanotuj wartość ID Scope.
Na obu maszynach wirtualnych otwórz plik ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c w celu edycji.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.cNa obu maszynach wirtualnych znajdź stałą
id_scopei zastąp wartość wartością Zakres identyfikatora skopiowaną wcześniej.static const char* id_scope = "0ne00002193";Na obu maszynach wirtualnych znajdź definicję
main()funkcji w tym samym pliku. Upewnij się, że zmiennahsm_typejest ustawiona naSECURE_DEVICE_TYPE_SYMMETRIC_KEY, jak pokazano w poniższym przykładzie kodu, aby odpowiadała metodzie uwierzytelniania grupy rejestracyjnej.Zapisz zmiany w plikach na obu maszynach wirtualnych.
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 obu maszynach wirtualnych znajdź wywołanie
prov_dev_set_symmetric_key_info()w pliku prov_dev_client_sample.c, które zostało skomentowane.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");Usuń komentarz z wywołań funkcji i zastąp wartości symboli zastępczych (w tym nawiasy kątowe) unikatowymi identyfikatorami rejestracyjnymi i kluczami urządzeń, które zostały uzyskane dla każdego urządzenia w poprzedniej sekcji. Klucze pokazane w poniższych wywołaniach funkcji to przykłady. Użyj wygenerowanych wcześniej kluczy.
Wschodnie stany USA:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");Zachodnie stany USA:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");Na obu maszynach wirtualnych zapisz plik.
Na obu maszynach wirtualnych przejdź do folderu przykładowego pokazanego w poniższym skrywcie powłoki Bash i skompiluj przykład.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config DebugPo pomyślnym zakończeniu kompilacji uruchom prov_dev_client_sample.exe na obu maszynach wirtualnych, aby symulować urządzenie z każdego regionu. Zwróć uwagę, że każde urządzenie jest przydzielane do centrum IoT w najbliższej okolicy symulowanego urządzenia.
Uruchom symulację:
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_samplePrzykładowe dane wyjściowe z maszyny wirtualnej Wschodniego USA:
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:Przykładowe dane wyjściowe z maszyny wirtualnej Zachodnie stany USA:
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:
Czyszczenie zasobów
Jeśli planujesz kontynuować pracę z zasobami utworzonymi w tym samouczku, możesz je pozostawić. W przeciwnym razie wykonaj następujące kroki, aby usunąć wszystkie zasoby utworzone w tym samouczku, aby uniknąć niepotrzebnych opłat.
W poniższych krokach przyjęto założenie, że wszystkie zasoby utworzone w tym samouczku zostały utworzone zgodnie z instrukcjami w tej samej grupie zasobów o nazwie contoso-us-resource-group.
Ważne
Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów oraz wszystkie zawarte w niej zasoby zostaną trwale usunięte. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub niewłaściwej grupy zasobów. Jeśli usługa IoT Hub została utworzona wewnątrz istniejącej grupy zasobów zawierającej zasoby, które chcesz zachować, zamiast usuwać całą grupę zasobów, usuń tylko zasób usługi IoT Hub.
Aby usunąć grupę zasobów według nazwy:
Zaloguj się w witrynie Azure Portal.
Wybierz pozycję Grupy zasobów.
W polu tekstowym Filtruj według nazwy ... wpisz nazwę grupy zasobów zawierającej zasoby contoso-us-resource-group.
Po prawej stronie grupy zasobów na liście wyników wybierz pozycję ... a następnie pozycję Usuń grupę zasobów.
Poproszono Cię o potwierdzenie usunięcia grupy zasobów. Ponownie wpisz nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń. Po krótkim czasie grupa zasobów i wszystkie zawarte w niej zasoby zostaną usunięte.
Następne kroki
Aby dowiedzieć się więcej o niestandardowych zasadach alokacji, zobacz