Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel explique comment provisionner de façon sécurisée plusieurs appareils simulés dotés de clés symétriques sur un groupe de hubs IoT à l’aide d’une stratégie d’allocation. Le service IoT Hub Device Provisioning (DPS) prend en charge divers scénarios d’allocation par le biais de ses stratégies d’allocation intégrées et de sa prise en charge des stratégies d’allocation personnalisées.
Le provisionnement pour la géolocalisation/latence géographique est un scénario d’allocation courant. Quand un appareil change d’emplacement, il doit être provisionné dans le hub IoT le plus proche de son emplacement afin d’améliorer la latence du réseau. Dans ce scénario, un groupe de hubs IoT couvrant plusieurs régions sont sélectionnés pour les inscriptions. La stratégie d’allocation Latence la plus faible intégrée est sélectionnée pour ces inscriptions. Avec cette stratégie, le service Device Provisioning évalue la latence des appareils et détermine quel hub IoT dans le groupe de hubs IoT est le plus proche.
Ce tutoriel utilise un exemple d’appareil simulé du SDK Azure IoT pour C afin de montrer comment provisionner des appareils entre plusieurs régions. Dans ce tutoriel, vous allez effectuer les étapes suivantes :
- Utiliser Azure CLI pour créer deux hubs IoT régionaux (USA Ouest 2 et USA Est)
- Créer une inscription qui provisionne des appareils en fonction de la géolocalisation (latence la plus faible)
- Utiliser Azure CLI pour créer deux machines virtuelles Linux régionales jouant le rôle d’appareils dans les mêmes régions (USA Ouest 2 et USA Est)
- Configurer l’environnement de développement nécessaire au SDK Azure IoT pour C sur les deux machines virtuelles Linux
- Simuler les appareils et vérifier qu’ils sont provisionnés dans le hub IoT dans la région la plus proche
Important
Certaines régions peuvent, de temps à autre, appliquer des restrictions sur la création de machines virtuelles. Au moment de la rédaction de ce guide, les régions westus2 et eastus permettaient la création de machines virtuelles. Si vous ne parvenez pas à créer dans l’une de ces régions, vous pouvez essayer une autre région. Pour en savoir plus sur le choix des régions géographiques Azure lors de la création de machines virtuelles, consultez Régions pour machines virtuelles dans Azure.
Prérequis
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Suivez les étapes de démarrage rapide : Configurer le service IoT Hub Device Provisioning avec le portail Azure.
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour obtenir plus d’informations, consultez Démarrage d’Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour obtenir d’autres options de connexion, consultez S’authentifier auprès d’Azure à l’aide d’Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser et gérer des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Créer deux hubs IoT régionaux
Dans cette section, vous allez créer un groupe de ressources Azure et deux nouvelles ressources IoT Hub régionales. Un hub IoT est destiné à la région USA Ouest 2 et l’autre pour la région USA Est .
Important
Nous vous recommandons d’utiliser le même groupe de ressources pour toutes les ressources créées dans ce didacticiel. L’utilisation du même groupe de ressources facilite le nettoyage une fois que vous avez terminé.
Dans Azure Cloud Shell, créez un groupe de ressources avec la commande az group create suivante :
az group create --name contoso-us-resource-group --location eastusCréez un hub IoT à l’emplacement eastus et ajoutez-le au groupe de ressources que vous avez créé avec la commande az iot hub create suivante (remplacez
{unique-hub-name}par votre propre nom unique) :az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1L’exécution de cette commande peut prendre quelques minutes.
Maintenant, créez un hub IoT à l’emplacement westus2, puis ajoutez-le au groupe de ressources que vous avez créé à l’aide de la commande az iot hub create suivante (remplacez
{unique-hub-name}par votre propre nom unique) :az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1L’exécution de cette commande peut prendre quelques minutes.
Créer une inscription pour la géolatence
Dans cette section, vous allez créer un groupe d’inscription pour vos appareils.
Par souci de simplicité, ce didacticiel utilise l’attestation de clé symétrique avec l’inscription. Pour sécuriser votre solution, utilisez plutôt l’attestation de certificat X.509 avec une chaîne d’approbation.
Connectez-vous au portail Azure et accédez à votre instance du service Device Provisioning.
Sélectionnez Gérer les inscriptions dans la section Paramètres du menu de navigation.
Sélectionnez Ajouter un groupe d’inscriptions.
Sous l’onglet Inscription + approvisionnement de la page Ajouter un groupe d’inscriptions, fournissez les informations suivantes pour configurer les détails du groupe d’inscription :
Champ Description Attestation Sélectionnez Clé symétrique comme Mécanisme d’attestation. Paramètres de clé symétrique Cochez la case Générer automatiquement des clés symétriques. Nom du groupe Nommez votre groupe contoso-us-devices ou indiquez votre propre nom de groupe. Le nom du groupe d’inscription est une chaîne insensible à la casse (jusqu’à 128 caractères) de caractères alphanumériques et des caractères spéciaux : '-','.','_',':'. Le dernier caractère doit être alphanumérique ou être un tiret ('-').Sélectionnez Suivant : IoT Hubs.
Procédez comme suit pour ajouter vos deux hubs IoT au groupe d’inscriptions :
Sous l’onglet Hubs IoT de la page Ajouter un groupe d’inscriptions, sélectionnez Ajouter un lien au hub IoT dans la section Hubs IoT cibles.
Dans la page Ajouter un lien au hub IoT, sélectionnez le hub IoT que vous avez créé dans la région eastus et attribuez-lui l’accès iothubowner.
Sélectionnez Enregistrer.
Sélectionnez à nouveau Ajouter un lien au hub IoT, puis suivez les mêmes étapes pour ajouter le hub IoT que vous avez créé dans la région westus2.
Dans le menu déroulant Hubs IoT cibles, sélectionnez les deux hubs IoT.
Pour la Stratégie d’allocation, sélectionnez Latence la plus faible.
Sélectionnez Revoir + créer.
Dans l’onglet Examiner et créer, vérifiez toutes vos valeurs, puis sélectionnez Créer.
Une fois votre groupe d’inscriptions créé, sélectionnez son nom contoso-us-devices dans la liste des groupes d’inscription.
Copiez la clé primaire. Cette clé est utilisée ultérieurement pour générer des clés d’appareil uniques pour les deux appareils simulés.
Créer des machines virtuelles Linux régionales
Dans cette section, vous allez créer deux machines virtuelles Linux régionales, l’une dans USA Ouest 2 et l’autre dans USA Est 2. Ces machines virtuelles exécutent un exemple de simulation d’appareil de chaque région pour illustrer l’approvisionnement d’appareils dans les deux régions.
Pour faciliter la suppression des ressources à la fin de l’article, ajoutez ces machines virtuelles au même groupe de ressources où vous avez créé les hubs IoT, à savoir contoso-us-resource-group.
Dans Azure Cloud Shell, exécutez la commande ci-dessous pour créer une machine virtuelle dans la région USA Est, après avoir modifié les paramètres de la commande de la façon suivante :
--name : entrez un nom unique pour la machine virtuelle de la région USA Est.
--admin-username : utilisez votre propre nom d’utilisateur administrateur.
--admin-password : utilisez votre propre mot de passe d’administrateur.
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 StandardCette commande prend quelques minutes.
Une fois la commande terminée, copiez la valeur publicIpAddress de votre machine virtuelle de région USA Est.
Dans Azure Cloud Shell, exécutez la commande ci-dessous pour créer une machine virtuelle dans la région USA Ouest 2, après avoir modifié les paramètres de la commande de la façon suivante :
--name : entrez un nom unique pour la machine virtuelle de la région USA Ouest 2.
--admin-username : utilisez votre propre nom d’utilisateur administrateur.
--admin-password : utilisez votre propre mot de passe d’administrateur.
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 StandardCette commande prend quelques minutes.
Une fois la commande terminée, copiez la valeur publicIpAddress de votre machine virtuelle de région USA Ouest 2.
Ouvrez deux interpréteurs en ligne de commande.
Connectez-vous à l’une des machines virtuelles régionales dans chaque interpréteur à l’aide de SSH.
Dans SSH, entrez votre nom d’utilisateur administrateur ainsi que l’adresse IP publique que vous avez copiée comme paramètres dans SSH. Entrez le mot de passe d’administrateur lorsque vous y êtes invité.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
Préparer l’environnement de développement nécessaire au SDK Azure IoT pour C
Dans cette section, vous clonez le Kit de développement logiciel (SDK) Azure IoT C sur chaque machine virtuelle. Le SDK contient un exemple qui simule le provisionnement d’appareils dans chaque région.
Pour chaque machine virtuelle :
Installez CMake, g++ , gcc et Git à l’aide des commandes suivantes :
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-allRecherchez et copiez le nom d’étiquette de la version la plus récente du SDK.
Cloner l’appareil SDK Azure IoT pour C sur les deux machines virtuelles. Utilisez l’étiquette obtenue à l’étape précédente comme valeur pour le paramètre
-b, par exemple :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 --initAttendez-vous à ce que cette opération prenne plusieurs minutes.
Créez un dossier cmake dans le référentiel et accédez à ce dossier.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmakeExécutez la commande suivante qui génère une version du SDK propre à votre plateforme cliente de développement :
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..Une fois la génération terminée, les dernières lignes de la sortie doivent ressembler à ceci :
-- 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
Dériver les clés d’appareil uniques
Quand vous utilisez l’attestation de clé symétrique avec des inscriptions de groupe, vous ne vous servez pas directement des clés du groupe d’inscriptions. Au lieu de cela, vous dérivez une clé unique à partir de la clé de groupe d’inscriptions pour chaque appareil.
Dans cette partie du tutoriel, vous générez une clé d’appareil à partir de la clé principale du groupe pour calculer un HMAC-SHA256 de l’ID d’inscription unique de l’appareil. Le résultat est ensuite converti au format Base64.
Important
N’incluez pas votre clé principale de groupe dans le code de l’appareil.
Pour les deux appareils eastus et westus2 :
Générez votre clé unique à l’aide d’openssl. Vous utilisez le script shell Bash suivant (remplacez
{primary-key}par la clé primaire du groupe d’inscription que vous avez copiée précédemment et remplacez{contoso-simdevice}par votre propre ID d’inscription unique pour chaque appareil. L’ID d’inscription est une chaîne insensible à la casse (jusqu’à 128 caractères) de caractères alphanumériques et des caractères spéciaux :'-','.','_',':'. Le dernier caractère doit être alphanumérique ou être un tiret ('-').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 | base64Le script génère quelque chose comme la clé suivante :
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=Maintenant, chaque appareil a sa propre clé d’appareil dérivée et un ID d’inscription unique pour effectuer l’attestation de clé symétrique avec le groupe d’inscriptions lors du processus de provisionnement.
Simuler les appareils de chaque région
Dans cette section, vous mettez à jour un exemple d’approvisionnement dans le Kit de développement logiciel (SDK) C Azure IoT pour les deux machines virtuelles régionales.
L’exemple de code simule une séquence de démarrage d’un appareil qui envoie la demande de provisionnement à votre instance du service Device Provisioning. La séquence de démarrage entraîne la reconnaissance et l’affectation de l’appareil au hub IoT le plus proche en fonction de la latence.
Dans le portail Azure, sélectionnez l’onglet Vue d’ensemble de votre service Device Provisioning et notez la valeur Étendue de l’ID.
Sur les deux machines virtuelles à modifier, ouvrez ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.cSur les deux machines virtuelles, recherchez la constante
id_scopeet remplacez la valeur par la valeur Étendue de l’ID que vous avez copiée précédemment.static const char* id_scope = "0ne00002193";Sur les deux machines virtuelles, recherchez la définition de la fonction
main()dans le même fichier. Vérifiez que lahsm_typevariable est définieSECURE_DEVICE_TYPE_SYMMETRIC_KEYcomme indiqué dans l’exemple de code suivant pour correspondre à la méthode d’attestation du groupe d’inscription.Enregistrez vos modifications dans les fichiers sur les deux machines virtuelles.
SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;Sur les deux machines virtuelles, recherchez l’appel à
prov_dev_set_symmetric_key_info()dans prov_dev_client_sample.c, qui est placé en commentaire.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");Décommentez l’appel de fonction et remplacez les valeurs des espaces réservés (y compris les crochets) par les ID d’inscription uniques et les clés d’appareil dérivées pour chaque appareil issues de la section précédente. Les clés présentées dans les appels de fonction suivants sont des exemples. Utilisez les clés que vous avez générées précédemment.
USA Est :
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");USA Ouest :
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");Sur les deux machines virtuelles, enregistrez le fichier.
Sur les deux machines virtuelles, accédez à l’exemple de dossier indiqué dans le script Bash suivant et générez l’exemple.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config DebugUne fois l’exemple généré, exécutez prov_dev_client_sample.exe sur les deux machines virtuelles pour simuler un appareil de chaque région. Notez que chaque appareil est alloué au hub IoT le plus proche de la région de l’appareil simulé.
Exécutez la simulation :
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sampleExemple de sortie de la machine virtuelle USA Est :
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:Exemple de sortie de la machine virtuelle USA Ouest :
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:
Nettoyer les ressources
Si vous envisagez de continuer à utiliser les ressources créées dans ce tutoriel, vous pouvez les conserver. Sinon, effectuez les étapes suivantes pour supprimer toutes les ressources qui ont été créées dans le cadre de ce tutoriel, et ainsi éviter des frais inutiles.
Les étapes décrites partent du principe que vous avez créé toutes les ressources utilisées dans ce tutoriel dans le même groupe de ressources nommé contoso-us-resource-group, comme nous vous l’avions demandé.
Important
La suppression d’un groupe de ressources est irréversible. Le groupe de ressources et toutes les ressources qu’il contient sont supprimés définitivement. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé l’IoT Hub à l’intérieur d’un groupe de ressources existant qui concerne des ressources que vous souhaitez conserver, supprimer uniquement la ressource de l’ IoT Hub au lieu de supprimer le groupe de ressources.
Pour supprimer le groupe de ressources par nom :
Connectez-vous au portail Azure.
Sélectionnez Groupes de ressources.
Dans la zone de texte Filtrer par nom..., tapez le nom du groupe de ressources contenant vos ressources (ici, contoso-us-resource-group).
À droite de votre groupe de ressources dans la liste des résultats, sélectionnez ... , puis Supprimer le groupe de ressources.
Vous êtes invité à confirmer la suppression du groupe de ressources. Saisissez à nouveau le nom de votre groupe de ressources pour confirmer, puis sélectionnez Supprimer. Après quelques instants, le groupe de ressources et toutes les ressources qu’il contient sont supprimés.
Étapes suivantes
Pour plus d’informations sur les stratégies d’allocation personnalisées, consultez :