Tutoriel : Provisionner des appareils à l’aide de groupes d’inscription à clés symétriques

Ce tutoriel explique comment provisionner de façon sécurisée plusieurs appareils à clé symétrique simulé sur un IoT Hub unique à l’aide d’un groupe d’inscription.

Le service Azure IoT Hub Device Provisioning prend en charge deux types d’inscriptions pour le provisionnement d’appareils :

  • Groupes d’inscription : utilisés pour inscrire plusieurs appareils connexes. Ce tutoriel montre l’approvisionnement avec des groupes d’inscription.
  • Inscriptions individuelles : utilisées pour inscrire un seul appareil.

Le service Azure IoT Hub Device Provisioning prend en charge trois formes d’authentification pour l’approvisionnement d’appareils :

  • Certificats X.509
  • Module de plateforme sécurisée (TPM)
  • Clés de contenu – Ce didacticiel illustre l’attestation de clé de contenu

Certains appareils peuvent ne pas avoir de certificat, de module de plateforme sécurisée (TPM) ou d’autre fonctionnalité de sécurité utilisable pour identifier l’appareil de façon sécurisée. Pour ces appareils, le service DPS (Device Provisioning Service) Azure IoT Hub inclut l’attestation de clé symétrique. L’attestation de clé symétrique peut être utilisée pour identifier un appareil sur la base d’informations uniques comme l’adresse MAC ou un numéro de série.

Dans ce tutoriel, vous atteignez les objectifs suivants :

  • Définir un ID d’inscription unique pour chaque appareil.
  • Créez un groupe d’inscription qui utilise l’attestation par clé de contenu.
  • Produisez une clé d’appareil pour chaque appareil à l’aide de son ID d’inscription unique et de sa clé de groupe d’inscription partagée.
  • Approvisionnez des appareils à l’aide de la clé d’appareil et de l’exemple de code dans les kits Azure IoT Device SDK pour C.

Ce tutoriel traite d’une station de travail Windows. Toutefois, vous pouvez effectuer les procédures sur Linux. Pour obtenir un exemple sur Linux, consultez Tutoriel : Provisionner pour la géolatence.

Notes

Si vous avez déjà suivi le Guide de démarrage rapide : Provisionner un appareil à clé symétrique simulé et que votre environnement de développement et vos ressources Azure sont toujours configurés, vous pouvez passer à Créer un groupe d’inscription à clé symétrique dans ce tutoriel.

Prérequis

  • Si vous utilisez un environnement de développement Windows, installez Visual Studio 2022 avec la charge de travail « Desktop Development en C++ » activée. Visual Studio 2019, Visual Studio 2017 et Visual Studio 2015 sont également pris en charge. Pour Linux ou macOS, consultez la section appropriée de Préparer votre environnement de développement dans la documentation du kit de développement logiciel (SDK).

  • Installez le dernier système de génération CMake. Veillez à cocher l’option qui ajoute l’exécutable CMake à votre chemin d’accès.

    Important

    Vérifiez que les prérequis de Visual Studio (Visual Studio et la charge de travail « Développement Desktop en C++ ») sont installés sur votre machine avant de commencer l’installation de CMake. Une fois les composants requis en place et le téléchargement effectué, installez le système de génération de CMake. Sachez également que les versions antérieures du système de génération CMake ne permettent pas de générer le fichier solution utilisé dans cet article. Veillez à utiliser la dernière version de CMake.

  • Installez le kit SDK .NET 6.0 sur votre machine Windows. Vous pouvez exécuter la commande suivante pour vérifier votre version.

    dotnet --info
    
  • Installez Python 3.7 ou une version ultérieure sur votre machine Windows. Vous pouvez vérifier votre version de Python en exécutant python --version.
  • Installez la dernière version de Git. Vérifiez que Git est ajouté aux variables d’environnement accessibles à la fenêtre de commande. Consultez Outils clients Git de Software Freedom Conservancy pour accéder à la dernière version des outils git à installer, ce qui inclut Git Bash, l’application en ligne de commande que vous pouvez utiliser pour interagir avec votre dépôt Git local.

Préparer votre environnement de développement

Dans cette section, vous préparez un environnement de développement pour créer le kit Azure IoT Device SDK pour C. L’exemple de code provisionne l’appareil pendant la séquence de démarrage de l’appareil.

  1. Dans un navigateur web, accédez à la page Mise en production du kit Azure IoT Device SDK pour C.

  2. Copiez le nom d’étiquette de la version la plus récente du kit Azure IoT Device SDK pour C, par exemple : lts_03_2024.

  3. Ouvrez une invite de commande Windows et exécutez les commandes suivantes pour cloner la dernière version du dépôt GitHub du kit Azure IoT Device SDK pour C. Remplacez <release-tag> par l’étiquette que vous avez copiée à l’étape précédente.

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

    Cette opération peut prendre plusieurs minutes.

  4. Une fois l’opération terminée, exécutez les commandes suivantes à partir du répertoire azure-iot-sdk-c :

    mkdir cmake
    cd cmake
    
  5. L’exemple de code utilise une clé symétrique pour fournir l’attestation. Exécutez la commande suivante pour générer une version du SDK spécifique à votre plateforme cliente de développement qui inclut le client de provisionnement des appareils :

    cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON  ..
    

    Conseil

    Si cmake ne trouve pas votre compilateur C++, vous risquez de rencontrer des erreurs de génération lors de l’exécution de la commande ci-dessus. Si cela se produit, essayez d’exécuter la commande dans l’invite de commandes de Visual Studio.

  6. Quand la build se termine correctement, les dernières lignes de la sortie ressemblent à la sortie suivante :

    $ 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
    
  1. Ouvrez une invite de commande ou un terminal Git Bash.

  2. Clonez le dépôt GitHub Azure IoT SDK pour C# avec la commande suivante :

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Ouvrez une invite de commande ou un terminal Git Bash.

  2. Clonez le dépôt GitHub du kit SDK Azure IoT pour Node.js à l’aide de la commande suivante :

    git clone https://github.com/Azure/azure-iot-sdk-node.git --recursive
    
  1. Ouvrez une invite de commande ou un terminal Git Bash.

  2. Clonez le dépôt GitHub du kit Azure IoT Device SDK pour Python à l’aide de la commande suivante :

    git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
    

    Notes

    Les exemples utilisés dans ce tutoriel se trouvent dans la branche v2 du référentiel azure-iot-sdk-python. V3 du Kit de développement logiciel (SDK) Python est disponible en version bêta. Pour plus d’informations sur la mise à jour d’exemples de code V2 afin d’utiliser une version V3 du Kit de développement logiciel (SDK) Python, consultez le Guide de migration du Kit de développement logiciel (SDK) d’appareil Azure IoT pour Python.

  1. Ouvrez une invite de commande ou un terminal Git Bash.

  2. Clonez le dépôt GitHub du SDK Azure IoT pour Java à l’aide de la commande suivante :

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Accédez au répertoire azure-iot-sdk-java racine et générez le projet pour télécharger tous les packages nécessaires. Cette étape peut prendre plusieurs minutes.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Créer un groupe d’inscription de clé symétrique

  1. Connectez-vous au portail Azure et accédez à votre instance du service Device Provisioning.

  2. Sélectionnez Gérer les inscriptions dans la section Paramètres du menu de navigation.

  3. Sélectionnez Ajouter un groupe d’inscriptions.

  4. 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 si vous souhaitez utiliser des clés générées de manière aléatoire. Désélectionnez cette case si vous souhaitez fournir vos propres clés.
    Nom du groupe Indiquez un nom pour le groupe d’appareils. 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 ('-').
    État d’approvisionnement Cochez la case Activer cette inscription si vous souhaitez que ce groupe d’inscription soit disponible pour approvisionner les appareils. Décochez cette case si vous souhaitez désactiver le groupe. Vous pouvez modifier ce paramètre ultérieurement.
    Stratégie de réapprovisionnement Choisissez une stratégie de réapprovisionnement qui reflète la façon dont vous souhaitez que DPS gère les appareils qui demandent le réapprovisionnement. Pour plus d’informations, consultez Réplica de réapprovisionnement

    Screenshot that shows adding an enrollment group for symmetric key attestation.

  5. Sélectionnez Suivant : IoT Hubs.

  6. Sous l’onglet Hubs IoT de la page Ajouter un groupe d’inscription, fournissez les informations suivantes pour déterminer les hubs IoT pour lesquels le groupe d’inscription peut approvisionner des appareils :

    Champ Description
    Hubs IoT cibles Sélectionnez un ou plusieurs de vos hubs IoT liés, ou ajoutez un nouveau lien à un hub IoT. Pour en savoir plus sur la liaison de hubs IoT à votre instance DPS, consultez Comment lier et gérer des hubs IoT.
    Stratégie d’allocation Si vous avez sélectionné plusieurs hubs IoT liés, sélectionnez la façon dont vous souhaitez affecter des appareils aux différents hubs. Pour en savoir plus sur les stratégies d’allocation, consultez le guide pratique pour utiliser des stratégies d’allocation.

    Si vous avez sélectionné un seul hub IoT lié, nous vous recommandons d’utiliser la stratégie de distribution uniformément pondérée.

    Screenshot that shows connecting IoT hubs to the new enrollment group.

  7. Sélectionnez Suivant : paramètres de l’appareil

  8. Sous l’onglet Paramètres de l’appareil de la page Ajouter un groupe d’inscription, fournissez les informations suivantes pour définir la façon dont les appareils nouvellement approvisionnés seront configurés :

    Champ Description
    IoT Edge Cochez la case Activer IoT Edge sur les appareils approvisionnés si tous les appareils approvisionnés via ce groupe exécutent Azure IoT Edge. Décochez cette case si ce groupe concerne uniquement les appareils sans IoT Edge activé. Dans un groupe, tous les appareils sont activés IoT Edge ou aucun ne peut l’être.
    Balises d’appareil Utilisez cette zone de texte pour fournir les balises que vous souhaitez appliquer aux jumeaux d’appareil des appareils approvisionnés.
    Propriétés souhaitées Utilisez cette zone de texte pour fournir les propriétés souhaitées que vous souhaitez appliquer aux jumeaux d’appareil des appareils approvisionnés.

    Pour en savoir plus, consultez Comprendre et utiliser les jumeaux d’appareil IoT Hub.

  9. Sélectionnez Suivant : Vérifier + créer.

  10. Dans l’onglet Vérifier + créer, vérifiez toutes vos valeurs, puis sélectionnez Créer.

Quand vous créez le groupe d’inscription, DPS génère une clé primaire et une clé secondaire, puis les ajoute à l’entrée d’inscription. Votre groupe d’inscription de clé symétrique apparaît dans la colonne Nom du groupe de l’onglet Groupes d’inscription.

Ouvrez l’inscription et copiez la valeur de la Clé primaire. Cette clé est votre clé de groupe.

Choisir un ID d’inscription unique pour l’appareil

Un ID d’inscription unique doit être défini pour identifier chaque appareil. Vous pouvez utiliser l’adresse MAC, le numéro de série ou toute information unique provenant de l’appareil.

Dans cet exemple, nous utilisons une combinaison d’une adresse MAC et du numéro de série, qui forment la chaîne suivante pour un ID d’inscription.

sn-007-888-abc-mac-a1-b2-c3-d4-e5-f6

Créez des ID d’inscription uniques pour chaque appareil. L’ID d’inscription est une chaîne insensible à la casse (jusqu’à 128 caractères) de caractères alphanumériques et les caractères spéciaux suivants : - . _ :. Le dernier caractère doit être alphanumérique ou être un tiret (-).

Dériver une clé d’appareil

Pour générer des clés d’appareil, utilisez la clé primaire du groupe d’inscription pour calculer un code de hachage HMAC-SHA256 de l’ID d’inscription de chaque appareil. Le résultat est ensuite converti au format Base64 pour chaque appareil.

Avertissement

Votre code d’appareil pour chaque appareil doit inclure uniquement la clé d’appareil dérivée pour cet appareil. N’incluez pas votre clé de groupe primaire dans le code de l’appareil. Une clé de groupe compromise est susceptible de compromettre la sécurité de tous les appareils qui y sont authentifiés.

L’extension IoT pour Azure CLI fournit la commande az iot dps enrollment-group compute-device-key permettant de générer des clés d’appareil dérivées. Cette commande peut être utilisée à partir de systèmes Windows et Linux.

Remplacez la valeur du paramètre --key par la clé primaire de votre groupe d’inscriptions.

Remplacez la valeur du paramètre --registration-id par votre ID d’inscription.

az iot dps enrollment-group compute-device-key --key <group_primary_key> --registration-id <device_registration_id>

Exemple de résultat :

"Jsm0lyGpjaVYVP2g3FnmnmG9dI/9qU24wNoykUmermc="

Chaque appareil utilise sa clé d’appareil dérivée et un ID d’inscription unique pour effectuer l’attestation de clé symétrique avec le groupe d’inscription lors du provisionnement.

Préparer et exécuter le code de provisionnement d’un appareil

Dans cette section, vous allez mettre à jour l’exemple de code d’appareil pour envoyer la séquence de démarrage de l’appareil à votre instance du service de provisionnement des appareils. Grâce à cette séquence de démarrage, l’appareil est reconnu, authentifié et affecté à un hub IoT lié à l’instance du service de provisionnement des appareils.

L’exemple de code de provisionnement effectue les tâches suivantes, dans l’ordre :

  1. Authentifie votre appareil avec votre ressource Device Provisioning à l’aide des trois paramètres suivants :

    • L’étendue de l’ID de votre service Device Provisioning
    • L’ID d’inscription pour votre appareil.
    • Clé d’appareil dérivée pour votre appareil.
  2. Affecte l’appareil à l’hub IoT qui est déjà lié à votre instance du service Device Provisioning.

Pour mettre à jour et exécuter l’exemple de provisionnement avec les informations de votre appareil :

  1. Dans le menu principal de votre service Device Provisioning, sélectionnez Vue d’ensemble.

  2. Copiez la valeur Étendue de l’ID.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Dans Visual Studio, ouvrez le fichier de solution azure_iot_sdks.sln généré en exécutant CMake. Le fichier solution doit être à l’emplacement suivant :

    
    \azure-iot-sdk-c\cmake\azure_iot_sdks.sln
    
    

    Conseil

    Si le fichier n’a pas été généré dans votre répertoire CMake, vérifiez que vous avez utilisé une version récente du système de génération CMake.

  4. Dans la fenêtre Explorateur de solutions de Visual Studio, accédez au dossier Provision_Samples. Développez le projet exemple nommé prov_dev_client_sample. Développez Fichiers sources, puis ouvrez prov_dev_client_sample.c.

  5. Recherchez la constante id_scope et remplacez la valeur par la valeur Étendue de l’ID que vous avez copiée à partir du Portail Microsoft Azure.

    static const char* id_scope = "0ne00002193";
    
  6. Recherchez la définition de la fonction main() dans le même fichier. Vérifiez que la variable hsm_type a la valeur SECURE_DEVICE_TYPE_SYMMETRIC_KEY, comme indiqué ci-dessous :

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Recherchez l’appel à prov_dev_set_symmetric_key_info() dans prov_dev_client_sample.c qui est commenté.

    // Set the symmetric key if using they auth type
    //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
    

    Supprimez les marques de commentaire de l’appel de fonction et remplacez les valeurs d’espace réservé (y compris les crochets pointus) par l’ID d’inscription que vous avez choisi dans Choisir un ID d’inscription unique pour l’appareil et la clé d’appareil dérivée que vous avez générée dans Dériver une clé d’appareil.

    // 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=");
    

    Attention

    Notez que cette étape laisse la clé d’appareil dérivée incluse dans l’image pour chaque appareil, ce qui ne correspond pas aux bonnes pratiques de sécurité recommandées. C’est l’une des raisons pour laquelle la sécurité et la facilité d’utilisation impliquent souvent des compromis. Vous devez examiner entièrement la sécurité de vos appareils en fonction de vos propres exigences.

  8. Enregistrez le fichier .

  9. Cliquez avec le bouton droit sur le projet dps_client_sample et sélectionnez Définir comme projet de démarrage.

  10. Dans le menu Visual Studio, sélectionnez Déboguer>Exécuter sans débogage pour exécuter la solution. Dans l’invite de regénération du projet, sélectionnez Yes (Oui) pour regénérer le projet avant de l’exécuter.

    La sortie suivante est un exemple illustrant la connexion réussie de l’appareil à l’instance de service de provisionnement à affecter à un hub 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:
    

L’exemple de code de provisionnement effectue les tâches suivantes :

  1. Authentifie votre appareil avec votre ressource Device Provisioning à l’aide des trois paramètres suivants :

    • L’étendue de l’ID de votre service Device Provisioning
    • L’ID d’inscription pour votre appareil.
    • Clé d’appareil dérivée pour votre appareil.
  2. Affecte l’appareil à l’hub IoT qui est déjà lié à votre instance du service Device Provisioning.

  3. Envoie un message de télémétrie de test au hub IoT.

Pour mettre à jour et exécuter l’exemple de provisionnement avec les informations de votre appareil :

  1. Dans le menu principal de votre service Device Provisioning, sélectionnez Vue d’ensemble.

  2. Copiez la valeur Étendue de l’ID.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Ouvrez une invite de commandes et accédez à SymmetricKeySample dans le dépôt du SDK cloné :

    cd .\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\SymmetricKeySample
    
  4. Dans le dossier SymmetricKeySample, ouvrez Parameters.cs dans un éditeur de texte. Ce fichier indique les paramètres référencés par l’échantillon. Seuls les trois premiers paramètres requis sont utilisés dans cet article lors de l’exécution de l’exemple. Passez en revue le code dans ce fichier. Aucune modification n’est requise.

    Paramètre Obligatoire Description
    --i ou --IdScope Vrai Étendue de l’ID de l’instance DPS
    --r ou --RegistrationId Vrai L’ID d’inscription pour l’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 ('-').
    --p ou --PrimaryKey Vrai Clé primaire d’une inscription individuelle ou clé d’appareil dérivée d’une inscription de groupe.
    --g ou --GlobalDeviceEndpoint Faux Point de terminaison global pour les appareils auxquels se connecter. La valeur par défaut est global.azure-devices-provisioning.net
    --t ou --TransportType Faux Transport à utiliser pour communiquer avec l’instance de provisionnement d’appareil. La valeur par défaut est Mqtt. Les valeurs possibles incluent Mqtt, Mqtt_WebSocket_Only, Mqtt_Tcp_Only, Amqp, Amqp_WebSocket_Only, Amqp_Tcp_only et Http1.
  5. Dans le dossier SymmetricKeySample, ouvrez ProvisioningDeviceClientSample.cs dans un éditeur de texte. Ce fichier montre comment la classe SecurityProviderSymmetricKey est utilisée avec la classe ProvisioningDeviceClient pour provisionner votre appareil à clé symétrique simulé. Passez en revue le code dans ce fichier. Aucune modification n’est requise.

  6. Générez et exécutez l’exemple de code à l’aide de la commande suivante :

    • Remplacez <id-scope> par la valeur Étendue de l’ID que vous avez copiée à partir du Portail Microsoft Azure.
    • Remplacez <registration-id> par l’ID d’inscription que vous avez choisi dans Choisir un ID d’inscription unique pour l’appareil.
    • Remplacez <primarykey> par la clé d’appareil dérivée que vous avez générée.
    dotnet run --i <id-scope> --r <registration-id> --p <primarykey>
    
  7. Vous devriez voir quelque chose de similaire à la sortie suivante. Une chaîne « TestMessage » est envoyée au hub en guise de message de test.

    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.
    

L’exemple de code de provisionnement effectue les tâches suivantes, dans l’ordre :

  1. Authentifie votre appareil avec votre ressource Device Provisioning à l’aide des quatre paramètres suivants :

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Affecte l’appareil à l’hub IoT qui est déjà lié à votre instance du service Device Provisioning.

  3. Envoie un message de télémétrie de test au hub IoT.

Pour mettre à jour et exécuter l’exemple de provisionnement avec les informations de votre appareil :

  1. Dans le menu principal de votre service Device Provisioning, sélectionnez Vue d’ensemble.

  2. Copiez la valeur Étendue de l’ID.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Ouvrez une invite de commandes pour l’exécution de commandes Node.js, puis accédez au répertoire suivant :

    cd azure-iot-sdk-node\provisioning\device\samples
    
  4. Dans le dossier provisioning/device/samples, ouvrez register_symkey.js et passez en revue le code.

    L’exemple utilise par défaut MQTT comme protocole de transport. Si vous souhaitez utiliser un autre protocole, mettez la ligne suivante en commentaire et supprimez les marques de commentaire de la ligne correspondant au protocole approprié.

    var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
    

    Notez, en outre, que l’exemple de code définit une charge utile personnalisée :

    provisioningClient.setProvisioningPayload({a: 'b'});
    

    Vous pouvez mettre ce code en commentaire, car il n’est pas nécessaire dans le cadre de ce tutoriel. Une charge utile personnalisée peut être utilisée quand vous recourez à un webhook d’allocation personnalisé pour affecter votre appareil à un hub IoT. Pour plus d’informations, consultez Didacticiel : Utiliser des stratégies d’allocation personnalisées.

    La méthode provisioningClient.register() tente d’effectuer l’inscription de votre appareil.

  5. À l’invite de commandes, exécutez les commandes suivantes pour définir les variables d’environnement utilisées par l’exemple :

    • La première commande définit la variable d’environnement PROVISIONING_HOST sur le point de terminaison d’appareil global. Ce point de terminaison est le même pour toutes les instances de DPS.
    • Remplacez <id-scope> par la valeur Étendue de l’ID que vous avez copiée à partir du Portail Microsoft Azure.
    • Remplacez <registration-id> par l’ID d’inscription que vous avez choisi dans Choisir un ID d’inscription unique pour l’appareil.
    • Remplacez <defived-device-key> par la clé d’appareil dérivée que vous avez générée dans Dériver une clé d’appareil.
    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>
    
  6. Générez et exécutez l’exemple de code à l’aide des commandes suivantes :

     npm install
    
    node register_symkey.js
    
  7. Vous devriez obtenir un résultat semblable à la sortie suivante. Une chaîne « Hello World » est envoyée au hub en guise de message de test.

    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
    

L’exemple de code de provisionnement effectue les tâches suivantes, dans l’ordre :

  1. Authentifie votre appareil avec votre ressource Device Provisioning à l’aide des quatre paramètres suivants :

    • PROVISIONING_HOST
    • PROVISIONING_IDSCOPE
    • PROVISIONING_REGISTRATION_ID
    • PROVISIONING_SYMMETRIC_KEY
  2. Affecte l’appareil à l’hub IoT qui est déjà lié à votre instance du service Device Provisioning.

  3. Envoie un message de télémétrie de test au hub IoT.

Pour mettre à jour et exécuter l’exemple de provisionnement avec les informations de votre appareil :

  1. Dans le menu principal de votre service Device Provisioning, sélectionnez Vue d’ensemble.

  2. Copiez la valeur Étendue de l’ID.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Ouvrez une invite de commandes et accédez au répertoire dans lequel se trouve l’exemple de fichier, provision_symmetric_key.py.

    cd azure-iot-sdk-python\samples\async-hub-scenarios
    
  4. À l’invite de commandes, exécutez les commandes suivantes pour définir les variables d’environnement utilisées par l’exemple :

    • La première commande définit la variable d’environnement PROVISIONING_HOST sur le point de terminaison d’appareil global. Ce point de terminaison est le même pour toutes les instances de DPS.
    • Remplacez <id-scope> par la valeur Étendue de l’ID que vous avez copiée à partir du Portail Microsoft Azure.
    • Remplacez <registration-id> par l’ID d’inscription que vous avez choisi dans Choisir un ID d’inscription unique pour l’appareil.
    • Remplacez <defived-device-key> par la clé d’appareil dérivée que vous avez générée dans Dériver une clé d’appareil.
    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>
    
  5. Installez la bibliothèque azure-iot-device en exécutant la commande suivante.

    pip install azure-iot-device
    
  6. Exécutez l’exemple de code Python dans provision_symmetric_key.py.

    python provision_symmetric_key.py
    
  7. Vous devriez obtenir un résultat semblable à la sortie suivante. Des exemples de messages de télémétrie de la vitesse du vent sont également envoyés au hub en guise de 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
    

L’exemple de code de provisionnement effectue les tâches suivantes, dans l’ordre :

  1. Authentifie votre appareil avec votre ressource Device Provisioning à l’aide des quatre paramètres suivants :

    • GLOBAL_ENDPOINT
    • SCOPE_ID
    • REGISTRATION_ID
    • SYMMETRIC_KEY
  2. Affecte l’appareil à l’hub IoT qui est déjà lié à votre instance du service Device Provisioning.

  3. Envoie un message de télémétrie de test au hub IoT.

Pour mettre à jour et exécuter l’exemple de provisionnement avec les informations de votre appareil :

  1. Dans le menu principal de votre service Device Provisioning, sélectionnez Vue d’ensemble.

  2. Copiez la valeur Étendue de l’ID.

    Screenshot that shows copying the ID scope from the DPS overview pane.

  3. Ouvrez l’exemple de code d’appareil Java pour le modifier. Le chemin complet de l’exemple de code d’appareil est le suivant :

    azure-iot-sdk-java/provisioning/provisioning-samples/provisioning-symmetrickey-individual-sample/src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningSymmetricKeyIndividualEnrollmentSample.java

  4. Définissez la valeur des variables suivantes pour votre DPS et l’inscription de l’appareil :

    • Remplacez [Your scope ID here] par la valeur Étendue de l’ID que vous avez copiée à partir du Portail Microsoft Azure.
    • Remplacez [Your Provisioning Service Global Endpoint here] par le point de terminaison d’appareil global : global.azure-devices-provisioning.net. Ce point de terminaison est le même pour toutes les instances de DPS.
    • Remplacez [Enter your Symmetric Key here] par la clé d’appareil dérivée que vous avez générée dans Dériver une clé d’appareil.
    • Remplacez [Enter your Registration ID here] par l’ID d’inscription que vous avez choisi dans Choisir un ID d’inscription unique pour l’appareil.
    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]";
    

    Attention

    Notez que cette étape laisse la clé d’appareil dérivée incluse dans l’image pour chaque appareil, ce qui ne correspond pas aux bonnes pratiques de sécurité recommandées. C’est l’une des raisons pour laquelle la sécurité et la facilité d’utilisation impliquent souvent des compromis. Vous devez examiner entièrement la sécurité de vos appareils en fonction de vos propres exigences.

  5. Ouvrez une invite de commandes pour la génération. Accédez à l’exemple de dossier de projet de provisionnement du dépôt SDK Java.

    cd azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-symmetrickey-individual-sample
    
  6. Générez l’exemple.

    mvn clean install
    
  7. Accédez au dossier target et exécutez le fichier .jar créé. Dans la commande java, remplacez l'espace réservé {version} par la version dans le nom de fichier .jar sur votre ordinateur.

    cd target
    java -jar ./provisioning-symmetrickey-individual-sample-{version}-with-deps.jar
    
  8. Vous devriez obtenir un résultat semblable à la sortie suivante.

    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 [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    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 [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    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 [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] )
    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 [32cf12c4-4db1-4562-9d8c-267c0506636f] Message Id [2e1717be-cfcf-41a7-b1c0-59edeb8ea865] ) with status OK
    Message received! Response status: OK
    

Confirmer l’inscription du provisionnement de votre appareil

Dans ce tutoriel, vous avez utilisé la stratégie d’allocation Configuration statique pour affecter des appareils qui s’inscrivent par le biais du groupe d’inscriptions au même hub IoT. Toutefois, pour les allocations où un appareil peut être provisionné sur l’un des différents hubs IoT, vous pouvez examiner les enregistrements d’inscription du groupe d’inscriptions pour voir sur quel hub IoT l’appareil a été provisionné :

  1. Dans le portail Azure, accédez à votre instance de DPS.

  2. Dans le menu Paramètres, sélectionnez Gérer les inscriptions.

  3. Sélectionnez Groupes d’inscription.

  4. Sélectionnez le groupe d’inscription que vous avez créé pour ce tutoriel.

  5. Sur la page Détails du groupe d’inscription, sélectionnez État de l’inscription.

  6. Recherchez l’ID d’appareil pour la colonne ID d’appareil de votre appareil et notez le hub IoT dans la colonne Hub IoT affecté.

    Vous pouvez sélectionner l’enregistrement de l’appareil pour obtenir plus de détails, comme le jumeau initial affecté à l’appareil.

Pour vérifier l’appareil sur votre hub IoT :

  1. Dans le portail Azure, accédez au hub IoT auquel votre appareil a été affecté.

  2. Dans le menu Gestion des périphériques, sélectionnez Appareils.

  3. Si votre appareil a été approvisionné correctement, son ID doit apparaître dans la liste, avec l’État défini sur Activé. Si vous ne voyez pas votre appareil, sélectionnez Actualiser.

    Device is registered with the IoT hub

Remarque

Si vous avez changé la valeur par défaut de l’état du jumeau d’appareil initial dans le groupe d’inscriptions, un appareil peut extraire l’état du jumeau souhaité du hub et agir en conséquence. Pour en savoir plus, consultez Comprendre et utiliser les jumeaux d’appareil IoT Hub.

Approvisionner d’autres appareils

Pour provisionner d’autres appareils par le biais du groupe d’inscriptions, suivez les étapes décrites dans les sections précédentes pour :

  1. Choisir un ID d’inscription unique pour l’appareil.

  2. Dériver une clé d’appareil. Comme vous l’avez fait précédemment, utilisez la clé primaire pour le groupe d’inscriptions comme clé de groupe.

  3. Exécuter le code de provisionnement d’appareil. Remplacez les artefacts nécessaires par votre nouvelle clé d’appareil dérivée et votre ID d’inscription.

Nettoyer les ressources

Si vous envisagez de continuer à manipuler et à explorer l’exemple de client d’appareil, ne nettoyez pas les ressources créées dans ce tutoriel. Dans le cas contraire, procédez aux étapes suivantes pour supprimer toutes les ressources créées dans ce tutoriel.

Supprimer votre groupe d’inscriptions

La suppression d’un groupe d’inscriptions ne supprime pas les enregistrements d’inscription qui lui sont associés. Ces enregistrements orphelins sont comptabilisés par rapport au quota d’inscriptions pour l’instance de DPS. Pour cette raison, il est recommandé de supprimer tous les enregistrements d’inscription associés à un groupe d’inscriptions avant de supprimer le groupe d’inscriptions lui-même.

  1. Dans le portail Azure, accédez à votre instance de DPS.

  2. Dans le menu Paramètres, sélectionnez Gérer les inscriptions.

  3. Sélectionnez l’onglet Groupes d’inscription.

  4. Sélectionnez le nom du groupe d’inscription que vous avez utilisé pour ce tutoriel afin d’ouvrir sa page de détails.

  5. Sur la page Détails de l’inscription, sélectionnez État de l’inscription. Cochez ensuite la case en regard de l’en-tête de colonne ID d’appareil pour sélectionner tous les enregistrements d’inscription pour le groupe d’inscription. Sélectionnez Supprimer en haut de la page pour supprimer les enregistrements d’inscription.

  6. Retournez à la page Gérer les inscriptions.

  7. Cochez la case en regard du nom du groupe d’inscription que vous avez utilisé pour ce tutoriel.

  8. En haut de la page, sélectionnez Supprimer.

Supprimer les inscriptions d’appareil d’IoT Hub

  1. Dans le portail Azure, accédez au hub IoT auquel votre appareil a été affecté.

  2. Sélectionnez Appareils dans la section Gestion des appareils du menu de navigation.

  3. Cochez la case en regard de l’ID de l'appareil des appareils que vous avez inscrits dans le cadre de ce tutoriel.

  4. En haut de la page, sélectionnez Supprimer.

Étapes suivantes

Dans ce tutoriel, vous avez approvisionné plusieurs appareils sur un seul hub IoT à l’aide d’un groupe d’inscription. Ensuite, découvrez comment provisionner des appareils IoT sur plusieurs hubs.