Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Tutorial wird gezeigt, wie mehrere simulierte Geräte mit symmetrischem Schlüssel mithilfe einer Zuweisungsrichtlinie einer Gruppe von IoT-Hubs sicher zugewiesen werden können. IoT Hub Device Provisioning Service (DPS) unterstützt verschiedene Zuordnungsszenarien durch seine integrierten Zuordnungsrichtlinien und seine Unterstützung für benutzerdefinierte Zuordnungsrichtlinien.
Die Bereitstellung für Geolocation/Geolatenz ist ein häufiges Zuordnungsszenario. Wenn ein Gerät zwischen Standorten verlagert wird, lässt sich die Netzwerklatenz verbessern, indem das Gerät auf dem IoT-Hub bereitgestellt wird, der dem jeweiligen Standort am nächsten liegt. In diesem Szenario wird eine Gruppe mit regionsübergreifenden IoT Hubs für Registrierungen ausgewählt. Für diese Registrierungen wird die integrierte Zuordnungsrichtlinie Niedrigste Latenz ausgewählt. Diese Richtlinie bewirkt, dass der Device Provisioning Service die Gerätelatenz auswertet und aus der Gruppe mit den IoT Hubs den nächstgelegenen IoT Hub ermittelt.
In diesem Tutorial wird anhand eines Beispiels für ein simuliertes Gerät aus dem Azure IoT C-SDK veranschaulicht, wie Geräte regionsübergreifend bereitgestellt werden können. In diesem Tutorial führen Sie die folgenden Schritte aus:
- Verwenden Sie die Azure CLI, um zwei regionale IoT-Hubs zu erstellen (West US 2 und Ost US)
- Erstellen Sie eine Registrierung, die Geräte basierend auf Geolocation (niedrigste Latenz) bereitstellt
- Verwenden Sie die Azure CLI, um zwei regionale Linux-VMs zu erstellen, die als Geräte in denselben Regionen fungieren (West US 2 und Ost US)
- Einrichten der Entwicklungsumgebung für das Azure IoT C SDK auf beiden Linux-VMs
- Simulieren Sie die Geräte, und überprüfen Sie, ob sie auf dem IoT-Hub in der nächstgelegenen Region bereitgestellt werden.
Wichtig
Einige Regionen können von Zeit zu Zeit Einschränkungen für die Erstellung virtueller Computer erzwingen. Zum Zeitpunkt der Erstellung dieses Leitfadens erlaubten die Regionen westus2 und eastus die Erstellung von VMs. Wenn Sie in einer dieser Regionen keine VMs erstellen können, können Sie eine andere Region ausprobieren. Weitere Informationen über die Auswahl geografischer Azure-Regionen bei der Erstellung von VMs finden Sie unter Regionen für virtuelle Maschinen in Azure
Voraussetzungen
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Führen Sie die Schritte in der Schnellstartanleitung aus: Einrichten des IoT Hub-Gerätebereitstellungsdiensts mit dem Azure-Portal.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter "Erste Schritte mit Azure Cloud Shell".
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Um den Authentifizierungsprozess abzuschließen, führen Sie die in Ihrem Terminal angezeigten Schritte aus. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung bei der ersten Verwendung, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Erstellen von zwei regionalen IoT Hubs
In diesem Abschnitt erstellen Sie eine Azure-Ressourcengruppe und zwei neue regionale IoT-Hubressourcen. Ein IoT-Hub ist für die Region West US 2 und der andere für die Region Ost-USA .
Wichtig
Es wird empfohlen, für alle in diesem Lernprogramm erstellten Ressourcen dieselbe Ressourcengruppe zu verwenden. Die Verwendung derselben Ressourcengruppe erleichtert das Bereinigen nach Abschluss des Vorgangs.
Erstellen Sie in der Azure Cloud Shell eine Ressourcengruppe mit dem folgenden Befehl az group create:
az group create --name contoso-us-resource-group --location eastusErstellen Sie einen IoT-Hub in der Region eastus und fügen Sie ihn der Ressourcengruppe hinzu, die Sie mit dem folgenden Befehl az iot hub create erstellt haben (ersetzen Sie dabei
{unique-hub-name}durch Ihren eigenen eindeutigen Namen):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1Die Ausführung dieses Befehls kann einige Minuten dauern.
Erstellen Sie nun einen IoT-Hub am Standort westus2 und fügen Sie ihn mit dem folgenden Befehl az iot hub create (ersetzen Sie
{unique-hub-name}durch Ihren eigenen eindeutigen Namen) zu der von Ihnen erstellten Ressourcengruppe hinzu:az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1Die Ausführung dieses Befehls kann einige Minuten dauern.
Erstellen einer Registrierung für Geolatenz
In diesem Abschnitt erstellen Sie eine neue Registrierungsgruppe für Ihre Geräte.
Aus Gründen der Einfachheit verwendet dieses Lernprogramm den symmetrischen Schlüsselnachweis mit der Registrierung. Für eine Lösung mit höherer Sicherheit empfiehlt sich die Verwendung eines X.509-Zertifikatnachweises mit einer Kette von Vertrauensstellungen.
Melden Sie sich beim Azure-Portal an, und navigieren Sie zur Dienstinstanz für die Gerätebereitstellung.
Wählen Sie im Navigationsmenü im Abschnitt Einstellungen die Option Registrierungen verwalten aus.
Wählen Sie Registrierungsgruppe hinzufügen aus.
Geben Sie auf der Registerkarte Registrierung + Bereitstellung der Seite Registrierungsgruppe hinzufügen die folgenden Informationen an, um die Details der Registrierungsgruppe zu konfigurieren:
Feld BESCHREIBUNG Nachweis Wählen Sie Symmetrischer Schlüssel als Nachweismechanismus aus. Einstellungen für symmetrische Schlüssel Aktivieren Sie das Kontrollkästchen Symmetrische Schlüssel automatisch generieren. Gruppenname Nennen Sie Ihre Gruppe contoso-us-devices, oder geben Sie Ihren eigenen Gruppennamen an. Beim Namen der Registrierungsgruppe handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen: '-','.','_',':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein.Wählen Sie Weiter: IoT-Hubs aus.
Führen Sie die folgenden Schritte aus, um Ihre beiden IoT-Hubs zur Registrierungsgruppe hinzuzufügen:
Wählen Sie auf der Registerkarte IoT-Hubs der Seite Registrierungsgruppe hinzufügen im Abschnitt IoT-Hub-Ziel die Option Link zum IoT-Hub hinzufügen aus.
Wählen Sie auf der Seite Link zum IoT-Hub hinzufügen den IoT-Hub aus, den Sie in der Region eastus erstellt haben, und weisen Sie ihm den iothubowner-Zugriff zu.
Wählen Sie Speichern aus.
Wählen Sie erneut Link zum IoT-Hub hinzufügen aus, und führen Sie die gleichen Schritte aus, um den IoT-Hub hinzuzufügen, den Sie in der Region westus2 erstellt haben.
Wählen Sie im Dropdownmenü Ziel-IoT-Hubs beide IoT-Hubs aus.
Wählen Sie für die Zuordnungsrichtlinie die Option Niedrigste Latenz aus.
Klicken Sie auf Überprüfen + erstellen.
Überprüfen Sie auf der Registerkarte Überprüfen und erstellen all Ihre Werte, und wählen Sie dann Erstellen aus.
Nachdem Ihre Registrierungsgruppe erstellt wurde, wählen Sie in der Liste der Registrierungsgruppen den Namen contoso-us-devices aus.
Kopieren Sie den Primärschlüssel. Dieser Schlüssel wird später verwendet, um eindeutige Geräteschlüssel für beide simulierte Geräte zu generieren.
Erstellen von regionalen Linux-VMs
In diesem Abschnitt erstellen Sie zwei regionale virtuelle Linux-Computer (VMs), einen in USA, Westen 2 und einen in USA, Osten 2. Auf diesen VMs wird ein Beispiel für eine Gerätesimulation aus jeder Region ausgeführt, um die Gerätebereitstellung für Geräte aus beiden Regionen zu veranschaulichen.
Fügen Sie diese VMs derselben Ressourcengruppe hinzu, in der die erstellten IoT-Hubs enthalten sind, contoso-us-resource-group, um die Bereinigung zu vereinfachen.
Führen Sie in der Azure Cloud Shell den folgenden Befehl aus, um eine VM der Region East US zu erstellen, nachdem Sie die folgenden Parameteränderungen im Befehl vorgenommen haben:
--name: Geben Sie einen eindeutigen Namen für den virtuellen Computer in der Region USA, Osten ein.
--admin-username: Verwenden Sie Ihren eigenen Administratorbenutzernamen.
--admin-password: Verwenden Sie Ihr eigenes Administratorkennwort.
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 StandardDieser Befehl dauert einige Minuten, bis er abgeschlossen ist.
Nachdem der Befehl abgeschlossen ist, kopieren Sie den publicIpAddress-Wert für ihre VM der Region Ost-USA.
Führen Sie in der Azure Cloud Shell den Befehl zum Erstellen einer VM der Region West US 2 aus, nachdem Sie die folgenden Parameteränderungen im Befehl vorgenommen haben:
--name: Geben Sie einen eindeutigen Namen für Ihre regionale Geräte-VM West US 2 ein.
--admin-username: Verwenden Sie Ihren eigenen Administratorbenutzernamen.
--admin-password: Verwenden Sie Ihr eigenes Administratorkennwort.
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 StandardDieser Befehl dauert einige Minuten, bis er abgeschlossen ist.
Nachdem der Befehl abgeschlossen ist, kopieren Sie den publicIpAddress-Wert für ihre VM der Region West US 2.
Öffnen Sie zwei Befehlszeilenshells.
Stellen Sie in jeder Shell eine Verbindung mit einem der regionalen virtuellen Computer her, indem Sie SSH verwenden.
Übergeben Sie Ihren Admin-Benutzernamen und die öffentliche IP-Adresse, die Sie kopiert haben, als Parameter an SSH. Geben Sie das Administratorkennwort ein, wenn Sie dazu aufgefordert werden.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
Vorbereiten der Azure IoT C SDK-Entwicklungsumgebung
In diesem Abschnitt klonen Sie das Azure IoT C SDK auf jedem virtuellen Computer. Das SDK enthält ein Beispiel, das eine Gerätebereitstellung aus jeder Region simuliert.
Für jede VM:
Installieren Sie CMake, g++, gcc und Git mit den folgenden Befehlen:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-allSuchen und kopieren Sie den Tag-Namen für die neueste Version des SDK.
Klonen Sie das Azure IoT-Geräte-SDK für C auf beiden VMs. Verwenden Sie das im vorherigen Schritt gefundene Tag als Wert für den Parameter
-b, z. B.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 --initSie sollten damit rechnen, dass die Ausführung dieses Vorgangs mehrere Minuten in Anspruch nimmt.
Erstellen Sie einen neuen Ordner cmake innerhalb des Repositorys und wechseln Sie in diesen Ordner.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmakeFühren Sie den folgenden Befehl aus, der eine für Ihre Entwicklungs-Client-Plattform spezifische Version des SDK erstellt:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..Nach erfolgreicher Erstellung ähneln die letzten Ausgabezeilen der folgenden Ausgabe:
-- 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
Ableiten eindeutiger Geräteschlüssel
Bei Verwendung des Nachweises des symmetrischen Schlüssels mit Gruppenregistrierungen verwenden Sie die Registrierungsgruppenschlüssel nicht direkt. Stattdessen leiten Sie für jedes Gerät einen eindeutigen Schlüssel aus dem Gruppenschlüssel für die Registrierung ab.
In diesem Teil des Lernprogramms generieren Sie einen Geräteschlüssel aus dem Gruppenmasterschlüssel, um eine HMAC-SHA256 der eindeutigen Registrierungs-ID für das Gerät zu berechnen. Das Ergebnis wird dann in das Base64-Format konvertiert.
Wichtig
Fügen Sie Ihren Gruppenhauptschlüssel nicht in Ihren Gerätecode ein.
Für Geräte sowohl inUSA, Osten als auch in USA, Westen 2:
Erzeugen Sie Ihren eindeutigen Schlüssel mit openssl. Sie verwenden das folgende Bash-Shellskript (ersetzen Sie
{primary-key}durch den Primärschlüssel der Registrierungsgruppe, den Sie zuvor kopiert haben, und ersetzen Sie sie{contoso-simdevice}durch Ihre eigene eindeutige Registrierungs-ID für jedes Gerät. Bei der Registrierungs-ID handelt es sich um eine Zeichenfolge (bis zu 128 Zeichen lang) alphanumerischer Zeichen ohne Beachtung der Groß-/Kleinschreibung plus diese Sonderzeichen:'-','.','_',':'. Das letzte Zeichen muss alphanumerisch oder ein Bindestrich ('-') sein.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 | base64Das Skript gibt etwas wie den folgenden Schlüssel aus:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=Jetzt hat jedes Gerät seinen eigenen abgeleiteten Geräteschlüssel und eine eindeutige Registrierungs-ID, sodass es während des Bereitstellungsprozesses einen Nachweis des symmetrischen Schlüssels mit der Registrierungsgruppe durchführen kann.
Simulieren der Geräte aus den einzelnen Regionen
In diesem Abschnitt aktualisieren Sie ein Bereitstellungsbeispiel im Azure IoT C SDK für beide regionalen VMs.
Der Beispielcode simuliert eine Gerätestartsequenz, über die die Bereitstellungsanforderung an die Instanz des Device Provisioning-Diensts gesendet wird. Die Startsequenz bewirkt, dass das Gerät erkannt und dem IoT-Hub zugewiesen wird, der basierend auf der Latenz am nächsten ist.
Navigieren Sie im Azure-Portal zur Registerkarte Übersicht für Ihre Device Provisioning Service-Instanz, und notieren Sie sich den Wert unter ID-Bereich.
Öffnen Sie auf beiden VMs ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c zur Bearbeitung.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.cSuchen Sie auf beiden VMs die Konstante
id_scope, und ersetzen Sie den Wert durch den zuvor kopierten Wert ID Scope.static const char* id_scope = "0ne00002193";Suchen Sie auf beiden VMs die Definition für die Funktion
main()in derselben Datei. Stellen Sie sicher, dass diehsm_typeVariable aufSECURE_DEVICE_TYPE_SYMMETRIC_KEYgesetzt wird, wie im folgenden Codebeispiel gezeigt, sodass sie der Nachweismethode der Registrierungsgruppe entspricht.Speichern Sie Ihre Änderungen an den Dateien auf beiden VMs.
SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;Suchen Sie auf beiden VMs den Aufruf zum
prov_dev_set_symmetric_key_info()in prov_dev_client_sample.c, der auskommentiert ist.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");Dekommentieren Sie die Funktionsaufrufe und ersetzen Sie die Platzhalterwerte (einschließlich der spitzen Klammern) durch die eindeutigen Registrierungs-IDs und abgeleiteten Geräteschlüssel für jedes Gerät, die Sie im vorherigen Abschnitt abgeleitet haben. Die in den folgenden Funktionsaufrufen gezeigten Tasten sind Beispiele. Verwenden Sie die zuvor erstellten Schlüssel.
USA, Osten:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");USA, Westen:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");Speichern Sie die Datei auf beiden VMs.
Navigieren Sie auf beiden virtuellen Computern zu dem Beispielordner, der im folgenden Bash-Skript angezeigt wird, und erstellen Sie das Beispiel.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config DebugFühren Sie nach erfolgreicher Erstellung prov_dev_client_sample.exe auf beiden VMs aus, um ein Gerät aus jeder Region zu simulieren. Beachten Sie, dass jedes Gerät dem IoT-Hub zugeordnet wird, der der Region des simulierten Geräts am nächsten liegt.
Führen Sie die Simulation aus:
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sampleBeispielausgabe der VM „USA, Osten“:
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:Beispielausgabe der VM „USA, Westen“:
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:
Bereinigen von Ressourcen
Wenn Sie die in diesem Tutorial erstellten Ressourcen weiterverwenden möchten, können Sie sie beibehalten. Führen Sie andernfalls die folgenden Schritte aus, um alle durch dieses Tutorial erstellten Ressourcen zu löschen und so unnötige Gebühren zu vermeiden.
Diese Schritte gehen davon aus, dass Sie alle Ressourcen in diesem Tutorial wie beschrieben in derselben Ressourcengruppe mit dem Namen contoso-us-resource-group erstellt haben.
Wichtig
Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Die Ressourcengruppe und alle darin enthaltenen Ressourcen werden unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Wenn Sie die IoT Hub-Ressource in einer bereits vorhandenen Ressourcengruppe erstellt haben, die Ressourcen enthält, die Sie behalten möchten, löschen Sie nicht die Ressourcengruppe, sondern nur die IoT Hub-Ressource.
Löschen Sie die Ressourcengruppen wie folgt nach Namen:
Melden Sie sich beim Azure-Portal an.
Klicken Sie auf Ressourcengruppen.
Geben Sie im Textfeld Nach Name filtern... den Namen der Ressourcengruppe ein, die Ihre Ressourcen enthält: contoso-us-resource-group.
Wählen Sie in der Ergebnisliste rechts neben Ihrer Ressourcengruppe ... und dann Ressourcengruppe löschen aus.
Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie den Namen Ihrer Ressourcengruppe zur Bestätigung erneut ein, und wählen Sie Löschen aus. Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.
Nächste Schritte
Weitere Informationen zu benutzerdefinierten Zuweisungsrichtlinien finden Sie unter