Samouczek: aprowizuj urządzenia przy użyciu grup rejestracji kluczy symetrycznych
W tym samouczku pokazano, jak bezpiecznie aprowizować wiele symulowanych urządzeń kluczy symetrycznych do pojedynczej usługi IoT Hub przy użyciu grupy rejestracji.
Usługa Azure IoT Hub Device Provisioning obsługuje dwa typy rejestracji na potrzeby aprowizacji urządzeń:
- Grupy rejestracji: służą do rejestrowania wielu pokrewnych urządzeń. W tym samouczku przedstawiono aprowizowanie przy użyciu grup rejestracji.
- Rejestracje indywidualne: służy do rejestrowania pojedynczego urządzenia.
Usługa Azure IoT Hub Device Provisioning obsługuje trzy formy uwierzytelniania na potrzeby aprowizacji urządzeń:
- Certyfikaty X.509
- Moduł TPM (Trusted Platform Module)
- Klucze symetryczne — w tym samouczku przedstawiono zaświadczanie klucza symetrycznego
Niektóre urządzenia mogą nie mieć certyfikatu, modułu TPM ani żadnej innej funkcji zabezpieczeń, która może służyć do bezpiecznego identyfikowania urządzenia. W przypadku takich urządzeń usługa Azure IoT Hub Device Provisioning Service (DPS) obejmuje zaświadczanie klucza symetrycznego. Zaświadczanie klucza symetrycznego może służyć do identyfikowania urządzenia na podstawie unikatowych informacji, takich jak adres MAC lub numer seryjny.
W tym samouczku wykonasz następujące cele:
- Zdefiniuj unikatowy identyfikator rejestracji dla każdego urządzenia.
- Utwórz grupę rejestracji korzystającą z zaświadczania klucza symetrycznego.
- Utwórz klucz urządzenia dla każdego urządzenia przy użyciu jego unikatowego identyfikatora rejestracji i klucza grupy rejestracji udostępnionej.
- Aprowizuj urządzenia przy użyciu klucza urządzenia i przykładowego kodu w zestawach SDK urządzeń azure IoT.
Ten samouczek jest zorientowany na stację roboczą opartą na systemie Windows. Jednak opisane procedury można wykonać także w systemie Linux. Aby zapoznać się z przykładem systemu Linux, zobacz Samouczek: aprowizowanie opóźnienia geograficznego.
Uwaga
Jeśli wcześniej ukończono przewodnik Szybki start: aprowizuj symulowane urządzenie klucza symetrycznego i nadal masz skonfigurowane zasoby platformy Azure i środowisko programistyczne, możesz przejść do sekcji Tworzenie grupy rejestracji klucza symetrycznego w tym samouczku.
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wykonaj kroki opisane w temacie Konfigurowanie usługi IoT Hub Device Provisioning Przy użyciu witryny Azure Portal.
Jeśli używasz środowiska deweloperskiego systemu Windows, zainstaluj program Visual Studio 2022 z włączonym obciążeniem "Programowanie aplikacji klasycznych z językiem C++". Obsługiwane są również programy Visual Studio 2019, Visual Studio 2017 i Visual Studio 2015. W przypadku systemu Linux lub macOS zapoznaj się z odpowiednią sekcją w temacie Przygotowywanie środowiska projektowego w dokumentacji zestawu SDK.
Zainstaluj najnowszy system kompilacji narzędzia CMake. Upewnij się, że zaznaczono opcję, która dodaje plik wykonywalny narzędzia CMake do ścieżki.
Ważne
Przed rozpoczęciem
CMake
instalacji upewnij się, że na maszynie są zainstalowane wymagania wstępne programu Visual Studio (Program Visual Studio i pakiet roboczy Programowanie aplikacji klasycznych z językiem C++). Gdy wymagania wstępne zostaną spełnione, a pobrane pliki zweryfikowane, zainstaluj system kompilacji CMake. Należy również pamiętać, że starsze wersje systemu kompilacji CMake nie mogą wygenerować pliku rozwiązania używanego w tym artykule. Upewnij się, że używasz najnowszej wersji narzędzia CMake.
Zainstaluj zestaw .NET SDK 6.0 lub nowszy na maszynie z systemem Windows. Aby sprawdzić wersję, możesz użyć następującego polecenia.
dotnet --info
- Zainstaluj program Node.js w wersji 4.0 lub nowszej.
- Zainstaluj środowisko Python w wersji 3.7 lub nowszej zainstalowanej na komputerze z systemem Windows. Możesz sprawdzić swoją wersję języka Python, uruchamiając polecenie
python --version
.
Zainstaluj zestaw Java SE Development Kit 8 lub nowszy zainstalowany na maszynie.
Pobierz i zainstaluj pakiet Maven.
- Zainstaluj najnowszą wersję usługi Git. Upewnij się, że usługa Git jest dodawana do zmiennych środowiskowych dostępnych w oknie polecenia. Zobacz Narzędzia klienckie Git firmy Software Freedom Conservancy, aby zapoznać się z najnowszą wersją
git
narzędzi do zainstalowania, która obejmuje powłokę Git Bash, aplikację wiersza polecenia, której można użyć do interakcji z lokalnym repozytorium Git.
przygotowywanie środowiska programistycznego
W tej sekcji przygotujesz środowisko programistyczne do skompilowania zestawu SDK urządzeń usługi Azure IoT dla języka C. Przykładowy kod aprowizuje urządzenie podczas sekwencji rozruchu urządzenia.
W przeglądarce internetowej przejdź do strony Wydanie zestawu AZURE IoT C SDK.
Skopiuj nazwę tagu dla najnowszej wersji zestawu AZURE IoT C SDK, na przykład:
lts_03_2024
.Otwórz wiersz polecenia systemu Windows i uruchom następujące polecenia, aby sklonować najnowszą wersję zestawu AZURE IoT Device SDK for C GitHub. Zastąp
<release-tag>
element tagiem skopiowanymi w poprzednim kroku.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Wykonanie tej operacji może potrwać kilka minut.
Po zakończeniu operacji uruchom następujące polecenia z
azure-iot-sdk-c
katalogu:mkdir cmake cd cmake
Przykładowy kod używa klucza symetrycznego do zapewnienia zaświadczania. Uruchom następujące polecenie, aby skompilować wersję zestawu SDK specyficzną dla platformy klienta programowania, która obejmuje klienta aprowizacji urządzeń:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
Napiwek
Jeśli
cmake
nie znajdziesz kompilatora języka C++, podczas uruchamiania powyższego polecenia mogą wystąpić błędy kompilacji. W takim przypadku spróbuj uruchomić polecenie w wierszu polecenia programu Visual Studio.Po pomyślnym zakończeniu kompilacji ostatnie kilka wierszy wyjściowych będzie wyglądać podobnie do następujących danych wyjściowych:
$ cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON .. -- Building for: Visual Studio 16 2019 -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22621. -- The C compiler identification is MSVC 19.29.30146.0 -- The CXX compiler identification is MSVC 19.29.30146.0 ... -- Configuring done -- Generating done -- Build files have been written to: C:/azure-iot-sdk-c/cmake
Otwórz wiersz polecenia lub terminal powłoki Git Bash.
Sklonuj repozytorium GitHub zestawu AZURE IoT SDK dla języka C# przy użyciu następującego polecenia:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Otwórz wiersz polecenia lub terminal powłoki Git Bash.
Sklonuj zestaw SDK usługi Azure IoT dla repozytorium Node.js GitHub przy użyciu następującego polecenia:
git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
Otwórz wiersz polecenia lub terminal powłoki Git Bash.
Sklonuj repozytorium GitHub zestawu SDK urządzeń usługi Azure IoT dla języka Python przy użyciu następującego polecenia:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Uwaga
Przykłady używane w tym samouczku znajdują się w gałęzi w wersji 2 repozytorium azure-iot-sdk-python. Wersja 3 zestawu SDK języka Python jest dostępna do użycia w wersji beta. Aby uzyskać informacje na temat aktualizowania przykładów kodu w wersji 2 w celu korzystania z wersji 3 zestawu SDK języka Python, zobacz Przewodnik migracji zestawu SDK urządzeń usługi Azure IoT dla języka Python.
Otwórz wiersz polecenia lub terminal powłoki Git Bash.
Sklonuj repozytorium GitHub zestawu SDK usługi Azure IoT dla języka Java przy użyciu następującego polecenia:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Przejdź do katalogu głównego
azure-iot-sdk-java
i skompiluj projekt, aby pobrać wszystkie potrzebne pakiety. Wykonanie tego kroku może potrwać kilka minut.cd azure-iot-sdk-java mvn install -DskipTests=true
Tworzenie grupy rejestracji klucza symetrycznego
Zaloguj się do witryny Azure Portal i przejdź do wystąpienia usługi Device Provisioning Service.
Wybierz pozycję Zarządzaj rejestracjami w sekcji Ustawienia w menu nawigacji.
Wybierz pozycję 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 pozycję Klucz symetryczny jako mechanizm zaświadczania. Ustawienia klucza symetrycznego Zaznacz pole Automatycznie Generuj klucze symetryczne, jeśli chcesz użyć losowo wygenerowanych kluczy. Usuń zaznaczenie tego pola, jeśli chcesz podać własne klucze. Nazwa grupy Podaj nazwę grupy urządzeń. 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 ('-'
).Stan aprowizacji Zaznacz pole Włącz tę rejestrację, jeśli ta grupa rejestracji ma być dostępna do aprowizowania urządzeń. Usuń zaznaczenie tego pola, jeśli chcesz, aby grupa została wyłączona. To ustawienie można zmienić później. Zasady ponownej aprowizacji Wybierz zasady ponownej aprowizacji, które odzwierciedlają sposób obsługi urządzeń, które żądają ponownej aprowizacji przez usługę DPS. Aby uzyskać więcej informacji, zobacz Zasady ponownej aprowizacji Wybierz pozycję Dalej: centra IoT.
Na karcie Centra IoT na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby określić, które centra IoT mogą aprowizować urządzenia do:
Pole opis Docelowe centra IoT Wybierz co najmniej jedno połączone centra IoT lub dodaj nowy link do centrum IoT. Aby dowiedzieć się więcej na temat łączenia centrów IoT z wystąpieniem usługi DPS, zobacz Jak połączyć centra IoT i zarządzać nimi. Zasady alokacji Jeśli wybrano więcej niż jedno połączone centrum IoT, wybierz sposób przypisywania urządzeń do różnych centrów. Aby dowiedzieć się więcej na temat zasad alokacji, zobacz Jak używać zasad alokacji.
Jeśli wybrano tylko jedno połączone centrum IoT, zalecamy użycie zasad dystrybucji równomiernie ważonej.Wybierz pozycję Dalej: Ustawienia urządzenia
Na karcie Ustawienia urządzenia na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby zdefiniować sposób konfigurowania nowo aprowizowania urządzeń:
Pole opis IoT Edge Sprawdź włączanie usługi IoT Edge na aprowidowanych urządzeniach, jeśli wszystkie urządzenia aprowidowane za pośrednictwem tej grupy będą uruchamiać usługę Azure IoT Edge. Usuń zaznaczenie tego pola, jeśli ta grupa dotyczy tylko urządzeń z obsługą usługi IoT Edge. Wszystkie urządzenia w grupie będą włączone w usłudze IoT Edge lub żadna z nich nie może być. Tagi urządzeń Użyj tego pola tekstowego, aby podać wszystkie tagi, które mają być stosowane do bliźniaczych reprezentacji urządzeń aprowizowania. Żądane właściwości Użyj tego pola tekstowego, aby podać żądane właściwości, które mają zostać zastosowane do bliźniaczych reprezentacji urządzeń aprowizowania. Aby uzyskać więcej informacji, zobacz Opis bliźniaczej reprezentacji urządzenia w usłudze IoT Hub oraz sposoby jej używania.
Wybierz pozycję Dalej: Przeglądanie i tworzenie.
Na karcie Przeglądanie i tworzenie sprawdź wszystkie wartości, a następnie wybierz pozycję Utwórz.
Podczas tworzenia grupy rejestracji usługa DPS generuje klucz podstawowy i klucz pomocniczy, a następnie dodaje je do wpisu rejestracji. Grupa rejestracji klucza symetrycznego jest wyświetlana w kolumnie Nazwa grupy na karcie Grupy rejestracji.
Otwórz rejestrację i skopiuj wartość klucza podstawowego. Ten klucz jest kluczem grupy.
Wybieranie unikatowego identyfikatora rejestracji dla urządzenia
Aby zidentyfikować każde urządzenie, należy zdefiniować unikatowy identyfikator rejestracji. Możesz użyć adresu MAC, numeru seryjnego lub wszelkich unikatowych informacji z urządzenia.
W tym przykładzie używamy kombinacji adresu MAC i numeru seryjnego tworzącego następujący ciąg dla identyfikatora rejestracji.
sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6
Utwórz unikatowe identyfikatory 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 następującymi znakami specjalnymi: - . _ :
. Ostatni znak musi być alfanumeryczny lub kreskowy (-
).
Uzyskiwanie klucza urządzenia
Aby wygenerować klucze urządzeń, użyj klucza podstawowego grupy rejestracji, aby obliczyć skrót HMAC-SHA256 identyfikatora rejestracji dla każdego urządzenia. Wynik jest następnie konwertowany na format Base 64 dla każdego urządzenia.
Ostrzeżenie
Kod urządzenia dla każdego urządzenia powinien zawierać tylko pochodny klucz urządzenia dla tego urządzenia. Nie dołączaj klucza podstawowego grupy do kodu urządzenia. Naruszony klucz grupy może naruszyć bezpieczeństwo wszystkich urządzeń uwierzytelnionych w ramach tego klucza.
Rozszerzenie IoT dla interfejsu wiersza polecenia platformy Azure udostępnia polecenie az iot dps enrollment-group compute-device-key do generowania pochodnych kluczy urządzeń. To polecenie może być używane zarówno z systemów Windows, jak i Linux.
Zastąp wartość --key
parametru kluczem podstawowym z grupy rejestracji.
Zastąp wartość parametru --registration-id
identyfikatorem rejestracji.
az iot dps enrollment-group compute-device-key --key <group_primary_key> --registration-id <device_registration_id>
Przykładowy wynik:
"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="
Każde urządzenie używa jego pochodnego klucza urządzenia i unikatowego identyfikatora rejestracji do przeprowadzania zaświadczania klucza symetrycznego z grupą rejestracji podczas aprowizacji.
Przygotowywanie i uruchamianie kodu aprowizacji urządzenia
W tej sekcji zaktualizujesz przykładowy kod urządzenia, aby wysłać sekwencję rozruchową urządzenia do wystąpienia usługi Device Provisioning Service. Ta sekwencja rozruchowa powoduje, że urządzenie zostanie rozpoznane, uwierzytelnione i przypisane do centrum IoT Połączone z wystąpieniem usługi Device Provisioning Service.
Przykładowy kod aprowizacji wykonuje następujące zadania w następującej kolejności:
Uwierzytelnia urządzenie przy użyciu zasobu Device Provisioning przy użyciu następujących trzech parametrów:
- Zakres identyfikatora usługi Device Provisioning Service
- Identyfikator rejestracji urządzenia.
- Klucz pochodnego urządzenia dla urządzenia.
Przypisuje urządzenie do centrum IoT Hub, które jest już połączone z wystąpieniem usługi Device Provisioning Service.
Aby zaktualizować i uruchomić przykład aprowizacji przy użyciu informacji o urządzeniu:
W menu głównym usługi Device Provisioning Wybierz pozycję Przegląd.
Skopiuj wartość Zakres identyfikatora.
W programie Visual Studio otwórz plik rozwiązania azure_iot_sdks.sln, który został wygenerowany przez uruchomienie narzędzia CMake. Plik rozwiązania powinien znajdować się w następującej lokalizacji:
\azure-iot-sdk-c\cmake\azure_iot_sdks.sln
Napiwek
Jeśli plik nie został wygenerowany w katalogu cmake, upewnij się, że użyto najnowszej wersji systemu kompilacji narzędzia CMake.
W oknie Eksplorator rozwiązań programu Visual Studio przejdź do folderu Provision_Samples. Rozwiń przykładowy projekt o nazwie prov_dev_client_sample. Rozwiń węzeł Pliki źródłowe i otwórz plik prov_dev_client_sample.c.
Znajdź stałą
id_scope
i zastąp wartość wartością Zakres identyfikatora skopiowaną z witryny Azure Portal.static const char* id_scope = "0ne00002193";
Znajdź definicję funkcji
main()
w tym samym pliku. Upewnij się, że zmiennahsm_type
jest ustawiona naSECURE_DEVICE_TYPE_SYMMETRIC_KEY
, jak pokazano poniżej:SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
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łania funkcji i zastąp wartości symboli zastępczych (w tym nawiasy kątowe) identyfikatorem rejestracji wybranym w obszarze Wybierz unikatowy identyfikator rejestracji dla urządzenia i klucz urządzenia pochodnego wygenerowany w sekcji Tworzenie klucza urządzenia.
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6", "Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc=");
Uwaga
Należy pamiętać, że ten krok pozostawia klucz pochodnego urządzenia dołączony jako część obrazu dla każdego urządzenia, co nie jest zalecanym najlepszym rozwiązaniem w zakresie zabezpieczeń. Jest to jeden z powodów, dla których bezpieczeństwo i łatwość użytkowania są często kompromisami. Należy w pełni przejrzeć zabezpieczenia urządzeń zgodnie z własnymi wymaganiami.
Zapisz plik.
Kliknij prawym przyciskiem myszy projekt prov_dev_client_sample i wybierz polecenie Ustaw jako projekt startowy.
Z menu programu Visual Studio wybierz pozycję Debuguj>Uruchom bez debugowania, aby uruchomić rozwiązanie. W wierszu polecenia ponownego kompilowania projektu wybierz pozycję Tak , aby ponownie skompilować projekt przed uruchomieniem.
Następujące dane wyjściowe to przykład pomyślnego nawiązania połączenia urządzenia z wystąpieniem usługi aprowizacji, które ma zostać przypisane do centrum IoT:
Provisioning API Version: 1.9.1 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 Press enter key to exit:
Przykładowy kod aprowizacji wykonuje następujące zadania:
Uwierzytelnia urządzenie przy użyciu zasobu Device Provisioning przy użyciu następujących trzech parametrów:
- Zakres identyfikatora usługi Device Provisioning Service
- Identyfikator rejestracji urządzenia.
- Klucz pochodnego urządzenia dla urządzenia.
Przypisuje urządzenie do centrum IoT Hub, które jest już połączone z wystąpieniem usługi Device Provisioning Service.
Wysyła komunikat testowy do centrum IoT.
Aby zaktualizować i uruchomić przykład aprowizacji przy użyciu informacji o urządzeniu:
W menu głównym usługi Device Provisioning Wybierz pozycję Przegląd.
Skopiuj wartość Zakres identyfikatora.
Otwórz wiersz polecenia i przejdź do pliku SymmetricKeySample w sklonowanym repozytorium zestawu SDK:
cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
W folderze SymmetricKeySample otwórz Parameters.cs w edytorze tekstów. Ten plik zawiera parametry, do których odwołuje się przykład. Podczas uruchamiania przykładu używane są tylko pierwsze trzy wymagane parametry. Przejrzyj kod w tym pliku. Nie są potrzebne żadne zmiany.
Parametr Wymagania opis --i
lub--IdScope
Prawda Zakres identyfikatora wystąpienia usługi DPS --r
lub--RegistrationId
Prawda Identyfikator rejestracji 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 ('-'
).--p
lub--PrimaryKey
Prawda Klucz podstawowy rejestracji indywidualnej lub pochodnego klucza urządzenia rejestracji grupy. --g
lub--GlobalDeviceEndpoint
Fałsz Globalny punkt końcowy dla urządzeń do nawiązania połączenia. Wartości domyślne global.azure-devices-provisioning.net
--t
lub--TransportType
Fałsz Transport używany do komunikowania się z wystąpieniem aprowizacji urządzeń. Wartość domyślna to Mqtt
. Możliwe wartości obejmująMqtt
, ,Mqtt_WebSocket_Only
,Amqp
Amqp_Tcp_only
Mqtt_Tcp_Only
Amqp_WebSocket_Only
, i .Http1
W folderze SymmetricKeySample otwórz ProvisioningDeviceClientSample.cs w edytorze tekstów. Ten plik pokazuje, jak klasa SecurityProviderSymmetricKey współpracuje z klasą ProvisioningDeviceClient w celu aprowizacji symulowanego urządzenia klucza symetrycznego. Przejrzyj kod w tym pliku. Nie są potrzebne żadne zmiany.
Skompiluj i uruchom przykładowy kod przy użyciu następującego polecenia:
- Zastąp
<id-scope>
wartość zakresem identyfikatora skopiowaną z witryny Azure Portal. - Zastąp
<registration-id>
element identyfikatorem rejestracji wybranym w obszarze Wybierz unikatowy identyfikator rejestracji dla urządzenia. - Zastąp
<primarykey>
wartość wygenerowaną kluczem urządzenia pochodnego.
dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
- Zastąp
Powinny zostać wyświetlone dane wyjściowe podobne do poniższych. Ciąg "TestMessage" jest wysyłany do centrum jako komunikat testowy.
D:\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample>dotnet run --i 0ne00000A0A --r sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 --p sbDDeEzRuEuGKag+kQKV+T1QGakRtHpsERLP0yPjwR93TrpEgEh/Y07CXstfha6dhIPWvdD1nRxK5T0KGKA+nQ== Initializing the device provisioning client... Initialized for registration Id sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6. Registering with the device provisioning service... Registration status: Assigned. Device sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 registered to contoso-hub-2.azure-devices.net. Creating symmetric key authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
Przykładowy kod aprowizacji wykonuje następujące zadania w następującej kolejności:
Uwierzytelnia urządzenie przy użyciu zasobu Device Provisioning przy użyciu następujących czterech parametrów:
PROVISIONING_HOST
PROVISIONING_IDSCOPE
PROVISIONING_REGISTRATION_ID
PROVISIONING_SYMMETRIC_KEY
Przypisuje urządzenie do centrum IoT Hub, które jest już połączone z wystąpieniem usługi Device Provisioning Service.
Wysyła komunikat telemetrii testowej do centrum IoT.
Aby zaktualizować i uruchomić przykład aprowizacji przy użyciu informacji o urządzeniu:
W menu głównym usługi Device Provisioning Wybierz pozycję Przegląd.
Skopiuj wartość Zakres identyfikatora.
Otwórz wiersz polecenia do wykonywania Node.js poleceń i przejdź do następującego katalogu:
cd azure-iot-sdk-node\provisioning\device\samples
W folderze provisioning/device/samples otwórz register_symkey.js i przejrzyj kod.
Przykładowa wartość domyślna to MQTT jako protokół transportowy. Jeśli chcesz użyć innego protokołu, oznacz następujący wiersz jako komentarz i usuń komentarz z wiersza dla odpowiedniego protokołu.
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
Zwróć również uwagę, że przykładowy kod ustawia niestandardowy ładunek:
provisioningClient.setProvisioningPayload({a: 'b'});
Możesz oznaczyć ten kod jako niewymagany w tym samouczku. Niestandardowy ładunek można użyć, gdy używasz niestandardowego elementu webhook alokacji, aby przypisać urządzenie do usługi IoT Hub. Aby uzyskać więcej informacji, zobacz Samouczek: używanie niestandardowych zasad alokacji.
Metoda
provisioningClient.register()
próbuje rejestracji urządzenia.W wierszu polecenia uruchom następujące polecenia, aby ustawić zmienne środowiskowe używane przez przykład:
- Pierwsze polecenie ustawia zmienną
PROVISIONING_HOST
środowiskową na globalny punkt końcowy urządzenia. Ten punkt końcowy jest taki sam dla wszystkich wystąpień usługi DPS. - Zastąp
<id-scope>
wartość zakresem identyfikatora skopiowaną z witryny Azure Portal. - Zastąp
<registration-id>
element identyfikatorem rejestracji wybranym w obszarze Wybierz unikatowy identyfikator rejestracji dla urządzenia. - Zastąp
<derived-device-key>
ciąg kluczem pochodnym urządzenia wygenerowanym w sekcji Tworzenie klucza urządzenia.
set PROVISIONING_HOST=global.azure-devices-provisioning.net
set PROVISIONING_IDSCOPE=<id-scope>
set PROVISIONING_REGISTRATION_ID=<registration-id>
set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
- Pierwsze polecenie ustawia zmienną
Skompiluj i uruchom przykładowy kod przy użyciu następujących poleceń:
npm install
node register_symkey.js
Powinny zostać wyświetlone dane wyjściowe podobne do poniższych. Ciąg "Hello World" jest wysyłany do centrum jako komunikat testowy.
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 payload=undefined Client connected send status: MessageEnqueued
Przykładowy kod aprowizacji wykonuje następujące zadania w następującej kolejności:
Uwierzytelnia urządzenie przy użyciu zasobu Device Provisioning przy użyciu następujących czterech parametrów:
PROVISIONING_HOST
PROVISIONING_IDSCOPE
PROVISIONING_REGISTRATION_ID
PROVISIONING_SYMMETRIC_KEY
Przypisuje urządzenie do centrum IoT Hub, które jest już połączone z wystąpieniem usługi Device Provisioning Service.
Wysyła komunikat testowy do centrum IoT.
Aby zaktualizować i uruchomić przykład aprowizacji przy użyciu informacji o urządzeniu:
W menu głównym usługi Device Provisioning Wybierz pozycję Przegląd.
Skopiuj wartość Zakres identyfikatora.
Otwórz wiersz polecenia i przejdź do katalogu, w którym znajduje się przykładowy plik provision_symmetric_key.py.
cd azure-iot-sdk-python\samples\async-hub-scenarios
W wierszu polecenia uruchom następujące polecenia, aby ustawić zmienne środowiskowe używane przez przykład:
- Pierwsze polecenie ustawia zmienną
PROVISIONING_HOST
środowiskową na globalny punkt końcowy urządzenia. Ten punkt końcowy jest taki sam dla wszystkich wystąpień usługi DPS. - Zastąp
<id-scope>
wartość zakresem identyfikatora skopiowaną z witryny Azure Portal. - Zastąp
<registration-id>
element identyfikatorem rejestracji wybranym w obszarze Wybierz unikatowy identyfikator rejestracji dla urządzenia. - Zastąp
<derived-device-key>
ciąg kluczem pochodnym urządzenia wygenerowanym w sekcji Tworzenie klucza urządzenia.
set PROVISIONING_HOST=global.azure-devices-provisioning.net
set PROVISIONING_IDSCOPE=<id-scope>
set PROVISIONING_REGISTRATION_ID=<registration-id>
set PROVISIONING_SYMMETRIC_KEY=<derived-device-key>
- Pierwsze polecenie ustawia zmienną
Zainstaluj bibliotekę azure-iot-device , uruchamiając następujące polecenie.
pip install azure-iot-device
Uruchom przykładowy kod języka Python w provision_symmetric_key.py.
python provision_symmetric_key.py
Powinny zostać wyświetlone dane wyjściowe podobne do poniższych. Niektóre przykładowe komunikaty telemetryczne prędkości wiatru są również wysyłane do koncentratora jako test.
D:\azure-iot-sdk-python\samples\async-hub-scenarios>python provision_symmetric_key.py The complete registration result is sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 contoso-hub-2.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #1 sending message #2 sending message #3 sending message #4 sending message #5 sending message #6 sending message #7 sending message #8 sending message #9 sending message #10 done sending message #1 done sending message #2 done sending message #3 done sending message #4 done sending message #5 done sending message #6 done sending message #7 done sending message #8 done sending message #9 done sending message #10
Przykładowy kod aprowizacji wykonuje następujące zadania w następującej kolejności:
Uwierzytelnia urządzenie przy użyciu zasobu Device Provisioning przy użyciu następujących czterech parametrów:
GLOBAL_ENDPOINT
SCOPE_ID
REGISTRATION_ID
SYMMETRIC_KEY
Przypisuje urządzenie do centrum IoT Hub, które jest już połączone z wystąpieniem usługi Device Provisioning Service.
Wysyła komunikat testowy do centrum IoT.
Aby zaktualizować i uruchomić przykład aprowizacji przy użyciu informacji o urządzeniu:
W menu głównym usługi Device Provisioning Wybierz pozycję Przegląd.
Skopiuj wartość Zakres identyfikatora.
Otwórz przykładowy kod urządzenia Java do edycji. Pełna ścieżka do przykładowego kodu urządzenia to:
azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java
Ustaw wartość następujących zmiennych dla usługi DPS i rejestracji urządzeń:
- Zastąp
[Your scope ID here]
wartość zakresem identyfikatora skopiowaną z witryny Azure Portal. - Zastąp element
[Your Provisioning Service Global Endpoint here]
globalnym punktem końcowym urządzenia: global.azure-devices-provisioning.net. Ten punkt końcowy jest taki sam dla wszystkich wystąpień usługi DPS. - Zastąp
[Enter your Symmetric Key here]
ciąg kluczem pochodnym urządzenia wygenerowanym w sekcji Tworzenie klucza urządzenia. - Zastąp
[Enter your Registration ID here]
element identyfikatorem rejestracji wybranym w obszarze Wybierz unikatowy identyfikator rejestracji dla urządzenia.
private static final String SCOPE_ID = "[Your scope ID here]"; private static final String GLOBAL_ENDPOINT = "[Your Provisioning Service Global Endpoint here]"; private static final String SYMMETRIC_KEY = "[Enter your Symmetric Key here]"; private static final String REGISTRATION_ID = "[Enter your Registration ID here]";
Uwaga
Należy pamiętać, że ten krok pozostawia klucz pochodnego urządzenia dołączony jako część obrazu dla każdego urządzenia, co nie jest zalecanym najlepszym rozwiązaniem w zakresie zabezpieczeń. Jest to jeden z powodów, dla których bezpieczeństwo i łatwość użytkowania są często kompromisami. Należy w pełni przejrzeć zabezpieczenia urządzeń zgodnie z własnymi wymaganiami.
- Zastąp
Otwórz wiersz polecenia do kompilowania. Przejdź do folderu przykładowego projektu aprowizacji w repozytorium zestawu JAVA SDK.
cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
Skompiluj przykład.
mvn clean install
Przejdź do
target
folderu i wykonaj utworzony.jar
plik. W poleceniujava
zastąp{version}
symbol zastępczy wersją w.jar
nazwie pliku na maszynie.cd target java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
Powinny zostać wyświetlone dane wyjściowe podobne do poniższych.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-10-07 18:14:48,388 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2 2022-10-07 18:14:48,390 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-10-07 18:14:48,392 INFO (global.azure-devices-provisioning.net-002edcf5-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-10-07 18:14:48,518 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-10-07 18:14:48,521 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using symmetric key 2022-10-07 18:14:49,252 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-10-07 18:14:49,253 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING 2022-10-07 18:14:52,459 INFO (global.azure-devices-provisioning.net-002edcf5-Cxn002edcf5-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : contoso-hub-2.azure-devices.net Device ID : sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6 2022-10-07 18:14:58,424 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-10-07 18:14:58,436 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-10-07 18:14:58,440 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.1 2022-10-07 18:14:58,450 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-10-07 18:14:58,471 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-10-07 18:14:59,314 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-10-07 18:14:59,315 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# 2022-10-07 18:14:59,378 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6/messages/devicebound/# was acknowledged 2022-10-07 18:14:59,379 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-10-07 18:14:59,381 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-10-07 18:14:59,383 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-10-07 18:14:59,389 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-10-07 18:14:59,392 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-10-07 18:14:59,395 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-10-07 18:14:59,404 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-10-07 18:14:59,408 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-10-07 18:14:59,409 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-10-07 18:14:59,777 DEBUG (MQTT Call: sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-10-07 18:14:59,779 DEBUG (contoso-hub-2.azure-devices.net-sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6-c32c76d0-Cxn0e70bbf7-8476-441d-8626-c17250585ee6-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message received! Response status: OK
Potwierdzanie rejestracji aprowizacji urządzeń
W tym samouczku użyto zasad alokacji konfiguracji statycznej do przypisania urządzeń rejestrujących się za pośrednictwem grupy rejestracji do tego samego centrum IoT. Jednak w przypadku alokacji, w których można aprowizować urządzenie w jednym z kilku centrów IoT, możesz sprawdzić rekordy rejestracji grupy rejestracji, aby sprawdzić, w którym centrum IoT Hub zostało aprowidowane:
W witrynie Azure Portal przejdź do wystąpienia usługi DPS.
W menu Ustawienia wybierz pozycję Zarządzaj rejestracjami.
Wybierz pozycję Grupy rejestracji.
Wybierz grupę rejestracji utworzoną na potrzeby tego samouczka.
Na stronie Szczegóły grupy rejestracji wybierz pozycję Stan rejestracji.
Znajdź identyfikator urządzenia dla kolumny Identyfikator urządzenia i zanotuj centrum IoT Hub w kolumnie Przypisane centrum IoT.
Możesz wybrać rekord urządzenia, aby wyświetlić więcej szczegółów, takich jak początkowa reprezentacja bliźniacze przypisana do urządzenia.
Aby sprawdzić urządzenie w centrum IoT:
W witrynie Azure Portal przejdź do centrum IoT Hub, do którego przypisano Urządzenie.
W menu Zarządzanie urządzeniami wybierz pozycję Urządzenia.
Jeśli urządzenie zostało pomyślnie aprowizowane, jego identyfikator urządzenia powinien pojawić się na liście z ustawionym stanem ustawionym jako włączone. Jeśli urządzenie nie jest widoczne, wybierz pozycję Odśwież.
Uwaga
Jeśli stan początkowej reprezentacji bliźniaczej urządzenia został zmieniony z wartości domyślnej w grupie rejestracji, urządzenie może ściągnąć żądany stan bliźniaczej reprezentacji z centrum i odpowiednio działać. Aby uzyskać więcej informacji, zobacz Opis bliźniaczej reprezentacji urządzenia w usłudze IoT Hub oraz sposoby jej używania.
Aprowizuj więcej urządzeń
Aby aprowizować więcej urządzeń za pośrednictwem grupy rejestracji, wykonaj kroki opisane w poprzednich sekcjach, aby:
Uzyskiwanie klucza urządzenia. Tak jak wcześniej, użyj klucza podstawowego dla grupy rejestracji jako klucza grupy.
Uruchom kod aprowizacji urządzenia. Zastąp niezbędne artefakty nowym pochodnym kluczem urządzenia i identyfikatorem rejestracji.
Czyszczenie zasobów
Jeśli planujesz kontynuować pracę i eksplorujesz przykład klienta urządzenia, nie usuwaj zasobów utworzonych w tym samouczku. Jeśli nie planujesz kontynuować, wykonaj następujące kroki, aby usunąć wszystkie zasoby utworzone w tym samouczku.
Usuwanie grupy rejestracji
Usunięcie grupy rejestracji nie powoduje usunięcia skojarzonych z nią rekordów rejestracji. Te oddzielone rekordy są liczone względem limitu przydziału rejestracji dla wystąpienia usługi DPS. Z tego powodu najlepszym rozwiązaniem jest usunięcie wszystkich rekordów rejestracji skojarzonych z grupą rejestracji przed usunięciem samej grupy rejestracji.
W witrynie Azure Portal przejdź do wystąpienia usługi DPS.
W menu Ustawienia wybierz pozycję Zarządzaj rejestracjami.
Wybierz kartę Grupy rejestracji.
Wybierz nazwę grupy rejestracji użytej w tym samouczku, aby otworzyć jej stronę szczegółów.
Na stronie Szczegóły rejestracji wybierz pozycję Stan rejestracji. Następnie zaznacz pole wyboru obok nagłówka kolumny Identyfikator urządzenia, aby wybrać wszystkie rekordy rejestracji dla grupy rejestracji. Wybierz pozycję Usuń w górnej części strony, aby usunąć rekordy rejestracji.
Wróć do strony Zarządzanie rejestracjami .
Zaznacz pole wyboru obok nazwy grupy rejestracji użytej na potrzeby tego samouczka.
W górnej części strony wybierz pozycję Usuń.
Usuwanie rejestracji urządzeń z usługi IoT Hub
W witrynie Azure Portal przejdź do centrum IoT Hub, do którego przypisano Urządzenie.
Wybierz pozycję Urządzenia w sekcji Zarządzanie urządzeniami w menu nawigacji.
Zaznacz pole wyboru obok identyfikatora urządzenia urządzeń zarejestrowanych w tym samouczku.
W górnej części strony wybierz pozycję Usuń.
Następne kroki
W tym samouczku zainicjowano obsługę wielu urządzeń w jednym centrum IoT przy użyciu grupy rejestracji. Następnie dowiedz się, jak aprowizować urządzenia IoT w wielu centrach.