Samouczek: aprowizuj obsługę geograficzną

W tym samouczku pokazano, jak bezpiecznie aprowizować wiele symulowanych urządzeń kluczy symetrycznych do grupy usług IoT Hubs przy użyciu zasad alokacji. usługa IoT Hub Device Provisioning Service (DPS) obsługuje różne scenariusze alokacji dzięki wbudowanym zasadom alokacji i obsłudze niestandardowych zasad alokacji.

Aprowizowanie lokalizacji geograficznej/geolatency jest typowym scenariuszem alokacji. W miarę jak urządzenie przechodzi między lokalizacjami, opóźnienie sieci jest ulepszane przez aprowizację urządzenia do centrum IoT, który znajduje się najbliżej każdej lokalizacji. W tym scenariuszu dla rejestracji wybrano grupę centrów IoT, które obejmują wiele regionów. Dla tych rejestracji wybrano wbudowane zasady alokacji najniższego opóźnienia . Te zasady powodują, że usługa Device Provisioning Service ocenia opóźnienie urządzenia i określa zamknięcie centrum IoT z grupy centrów IoT.

W tym samouczku użyto przykładu symulowanego urządzenia z zestawu AZURE IoT C SDK , aby zademonstrować sposób aprowizowania 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 aprowizuje 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 SDK języka C usługi Azure IoT na obu maszynach wirtualnych z systemem Linux
  • Symuluj urządzenia i sprawdź, czy są one aprowizowane w centrum IoT w najbliższym regionie.

Ważne

Niektóre regiony mogą od czasu do czasu wymuszać ograniczenia dotyczące tworzenia Virtual Machines. 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

Możesz użyć usługi Azure Cloud Shell lub lokalnego interfejsu wiersza polecenia platformy Azure.

Tworzenie dwóch regionalnych centrów IoT

W tej sekcji utworzysz grupę zasobów platformy Azure i dwie nowe regionalne zasoby centrum IoT. Jedno centrum IoT będzie przeznaczone dla regionu Zachodnie stany USA 2 , a drugi będzie przeznaczony dla regionu Wschodnie stany USA .

Ważne

Zaleca się użycie tej samej grupy zasobów dla wszystkich zasobów utworzonych w tym samouczku. Ułatwi to czyszczenie po zakończeniu pracy.

  1. 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 eastus
    
  2. Utwórz centrum IoT w lokalizacji eastus i dodaj ją 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 S1
    

    Wykonanie tego polecenia może potrwać kilka minut.

  3. Teraz utwórz centrum IoT w lokalizacji westus2 i dodaj ją 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 westus2 --sku S1
    

    Wykonanie tego polecenia może potrwać kilka minut.

Tworzenie rejestracji na potrzeby geolatencji

W tej sekcji utworzysz nową grupę rejestracji dla urządzeń.

Dla uproszczenia ten samouczek używa zaświadczania klucza symetrycznego z rejestracją. Aby uzyskać bezpieczniejsze rozwiązanie, rozważ użycie zaświadczania certyfikatów X.509 z łańcuchem zaufania.

  1. W Azure Portal wybierz usługę Device Provisioning Service.

  2. W menu Ustawienia wybierz pozycję Zarządzaj rejestracjami.

  3. Wybierz pozycję + Dodaj grupę rejestracji.

  4. Na stronie Dodawanie grupy rejestracji wprowadź następujące informacje:

    Nazwa grupy: wprowadź wartość contoso-us-devices. Nazwa grupy rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-', , '.''_', ':'. Ostatni znak musi być alfanumeryczny lub kreskowy ('-').

    Typ zaświadczania: wybierz pozycję Klucz symetryczny.

    Automatyczne generowanie kluczy: to pole wyboru powinno być już zaznaczone.

    Wybierz sposób przypisywania urządzeń do centrów: wybierz pozycję Najniższe opóźnienie.

  5. Wybierz pozycję Połącz nową IoT Hub

    Dodaj grupę rejestracji na potrzeby zaświadczania klucza symetrycznego i najniższego opóźnienia.

  6. Na stronie Dodawanie linku do centrum IoT Hub wprowadź następujące informacje:

    Subskrypcja: jeśli masz wiele subskrypcji, wybierz subskrypcję, w której utworzono regionalne centra IoT.

    Centrum IoT: wybierz centrum IoT, które zostało utworzone dla lokalizacji eastus .

    Zasady dostępu: wybierz pozycję iothubowner.

    Połącz regionalne centra IoT z usługą aprowizacji.

  7. Wybierz pozycję Zapisz.

  8. Powtórz kroki od 5 do 7 dla drugiego centrum IoT utworzonego dla lokalizacji westgus .

  9. Wybierz dwie usługi IoT Hub utworzone w centrum IoT Hubs, które można przypisać do listy rozwijanej.

    Wybierz połączone centra IoT.

  10. Wybierz pozycję Zapisz

  11. Wybierz pozycję contoso-us-devices na liście grup rejestracji.

  12. Skopiuj klucz podstawowy. Ten klucz będzie używany później do generowania unikatowych kluczy urządzeń dla obu symulowanych urządzeń.

    Skopiuj klucz podstawowy.

Tworzenie regionalnych maszyn wirtualnych z systemem Linux

W tej sekcji utworzysz dwie regionalne maszyny wirtualne z systemem Linux. Te maszyny wirtualne będą uruchamiać przykład symulacji urządzenia z każdego regionu, aby zademonstrować aprowizowanie urządzeń z obu regionów.

Aby ułatwić czyszczenie, te maszyny wirtualne zostaną dodane do tej samej grupy zasobów zawierającej utworzone centra IoT contoso-us-resource-group. Jednak maszyny wirtualne będą działać w oddzielnych regionach (Zachodnie stany USA 2 i Wschodnie stany USA).

  1. W usłudze Azure Cloud Shell uruchom następujące polecenie, aby utworzyć maszynę wirtualną regionu Wschodnie stany USA po wprowadzeniu następujących zmian parametrów w poleceniu:

    --name: wprowadź unikatową nazwę maszyny wirtualnej urządzenia regionalnego Wschodnie stany 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 Standard
    

    Wykonanie tego polecenia potrwa kilka minut.

  2. Po zakończeniu polecenia skopiuj wartość publicIpAddress dla maszyny wirtualnej regionu Wschodnie stany USA.

  3. W usłudze Azure Cloud Shell uruchom polecenie , aby utworzyć maszynę wirtualną regionu Zachodnie stany USA 2 po wprowadzeniu następujących zmian parametrów w poleceniu:

    --name: wprowadź unikatową nazwę maszyny wirtualnej urządzenia regionalnego Zachodnie stany USA 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 Standard
    

    Wykonanie tego polecenia potrwa kilka minut.

  4. Po zakończeniu polecenia skopiuj wartość publicIpAddress dla maszyny wirtualnej regionu Zachodnie stany USA 2.

  5. Otwórz dwie powłoki wiersza polecenia.

  6. 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 po wyświetleniu monitu.

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

Przygotowywanie środowiska deweloperskiego zestawu SDK języka C usługi Azure IoT

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:

  1. 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-all
    
  2. Znajdź i skopiuj nazwę tagu dla najnowszej wersji zestawu SDK.

  3. Sklonuj zestaw SDK języka C usługi Azure IoT na obu maszynach wirtualnych. Użyj tagu znalezionego w poprzednim kroku jako wartości parametru -b :

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Należy się spodziewać, że ukończenie operacji potrwa kilka minut.

  4. Utwórz nowy folder cmake wewnątrz repozytorium i przejdź do tego folderu.

    mkdir ~/azure-iot-sdk-c/cmake
    cd ~/azure-iot-sdk-c/cmake
    
  5. Uruchom następujące polecenie, które kompiluje wersję zestawu SDK specyficzną dla platformy klienta dewelopera:

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    
  6. Gdy kompilacja zakończy się powodzeniem, kilka ostatnich wierszy danych 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 uzyskujesz unikatowy klucz z klucza grupy rejestracji dla każdego urządzenia. Aby uzyskać więcej informacji, zobacz Rejestracje grup z kluczami symetrycznymi.

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 zostanie następnie przekonwertowany na format Base64.

Ważne

Nie dołączaj klucza głównego grupy do kodu urządzenia.

W przypadku urządzeń eastus i westus 2:

  1. Wygeneruj unikatowy klucz przy użyciu polecenia openssl. Użyjesz następującego skryptu powłoki powłoki Bash (zastąp element {primary-key} kluczem podstawowym skopiowanego wcześniej klucza grupy rejestracji i zastąpisz {contoso-simdevice}go własnym unikatowym identyfikatorem rejestracji dla każdego urządzenia. Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-', , '.''_', ':'. 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 | base64
    
  2. Skrypt wyświetli dane wyjściowe podobne do następującego klucza:

    p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
    
  3. Teraz każde urządzenie ma własny klucz urządzenia pochodnego i unikatowy identyfikator rejestracji w celu przeprowadzenia zaświadczania klucza symetrycznego z grupą rejestracji podczas procesu aprowizacji.

Symulowanie urządzeń z każdego regionu

W tej sekcji zaktualizujesz przykład aprowizacji w zestawie SDK języka C usługi Azure IoT 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ższe na podstawie opóźnienia.

  1. W Azure Portal wybierz kartę Przegląd usługi Device Provisioning Service i zanotuj wartość Zakres identyfikatora.

    Wyodrębnij informacje o punkcie końcowym usługi Device Provisioning z bloku portalu.

  2. W obu maszynach wirtualnych otwórz plik ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c , aby go edytować.

    vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
    
  3. Na obu maszynach wirtualnych znajdź stałą id_scope i zastąp wartość wartością Zakres identyfikatora skopiowaną wcześniej.

    static const char* id_scope = "0ne00002193";
    
  4. Na obu maszynach wirtualnych znajdź definicję main() funkcji w tym samym pliku. Upewnij się, że zmienna hsm_type jest ustawiona na SECURE_DEVICE_TYPE_SYMMETRIC_KEY tak, jak pokazano poniżej, aby dopasować metodę zaświadczania grupy rejestracji.

    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;
    
  5. Na obu maszynach wirtualnych znajdź wywołanie metody 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 symbolu zastępczego (w tym nawiasy kątowe) unikatowymi identyfikatorami rejestracji i pochodnymi kluczami urządzeń dla każdego urządzenia uzyskanego w poprzedniej sekcji. Klucze przedstawione poniżej są przeznaczone tylko do celów przykładowych. 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=");
    
  6. Na obu maszynach wirtualnych zapisz plik.

  7. Na obu maszynach wirtualnych przejdź do przykładowego folderu pokazanego poniżej 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 Debug
    
  8. Po 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 znajdującego się najbliżej regionu symulowanego urządzenia.

    Uruchom symulację:

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

    Przykładowe dane wyjściowe z maszyny wirtualnej Wschodnie stany 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 przez ten samouczek, aby uniknąć niepotrzebnych opłat.

W poniższych krokach założono, ż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:

  1. Zaloguj się w witrynie Azure Portal.

  2. Wybierz pozycję Grupy zasobów.

  3. W polu tekstowym Filtruj według nazwy ... wpisz nazwę grupy zasobów zawierającej zasoby contoso-us-resource-group.

  4. Z prawej strony grupy zasobów na liście wyników kliknij pozycję ..., a następnie kliknij pozycję Usuń grupę zasobów.

  5. Zostanie wyświetlony monit o potwierdzenie usunięcia grupy zasobów. Wpisz ponownie 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 na temat ponownego aprowizowania, zobacz:
  • Aby dowiedzieć się więcej na temat anulowania aprowizacji, zobacz