Créer par programme une inscription individuelle auprès du service Device Provisioning pour l’attestation TPM

Cet article montre comment créer par programme une inscription individuelle pour un appareil TPM auprès du service Azure IoT Hub Device Provisioning en utilisant le kit de développement logiciel (SDK) du service DPS Azure IoT Hub et un exemple d’application. Après avoir créé l’inscription individuelle, vous pouvez inscrire un appareil TPM simulé auprès du service d’approvisionnement via cette entrée d’inscription.

Bien que ces étapes fonctionnent sur les ordinateurs Windows et Linux, cet article utilise un ordinateur de développement Windows.

Prérequis

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

    dotnet --info
    
  • (Facultatif) Si vous souhaitez inscrire un appareil simulé à la fin de cet article, suivez la procédure décrite dans Créer et approvisionner un appareil TPM simulé jusqu’à l’étape où vous obtenez une paire de clés de type EK (Endorsement Key) pour l’appareil. Enregistrez la clé d’approbation, car vous l’utilisez plus loin dans cet article.

    Remarque

    Ne suivez pas les étapes de création d’une inscription individuelle avec le portail Azure.

  • Installez Node.js v4.0+.

  • (Facultatif) Si vous voulez inscrire un appareil simulé à la fin de ce guide de démarrage rapide, suivez la procédure décrite dans Créer et approvisionner un appareil TPM simulé jusqu’à l’étape où vous obtenez une paire de clés de type EK (Endorsement Key) et un ID d’inscription pour l’appareil. Enregistrez la clé d’approbation et l’ID d’inscription, car vous les utilisez plus loin dans cet article.

    Remarque

    Ne suivez pas les étapes de création d’une inscription individuelle avec le portail Azure.

  • Installez le Java SE Development Kit 8. Cet article installe le Kit de développement logiciel (SDK) du service Java plus loin dans l’article. Il fonctionne à la fois sur Windows et Linux. Cet article utilise Windows.

  • Installez Maven 3.

  • Installez Git et vérifiez que le chemin d’accès est ajouté à la variable PATHd’environnement.

  • (Facultatif) Si vous souhaitez inscrire un appareil simulé à la fin de cet article, suivez la procédure décrite dans Créer et approvisionner un appareil TPM simulé jusqu’à l’étape où vous obtenez une paire de clés de type EK (Endorsement Key) pour l’appareil. Notez la clé d’approbation et l’ID d’inscription, car vous les utilisez plus loin dans cet article.

    Remarque

    Ne suivez pas les étapes de création d’une inscription individuelle avec le portail Azure.

Obtenir la paire de clés de type EK (Endorsement Key) TMP (facultatif)

Vous pouvez suivre les étapes décrites dans cet article pour créer un exemple d’inscription individuelle. Dans ce cas, vous serez en mesure d’afficher l’entrée d’inscription dans DPS, mais vous ne pourrez pas l’utiliser pour approvisionner un appareil.

Vous pouvez également choisir de suivre les étapes décrites dans cet article pour créer une inscription individuelle et inscrire un appareil TPM simulé. Si vous souhaitez inscrire un appareil simulé à la fin de cet article, suivez la procédure décrite dans Créer et approvisionner un appareil TPM simulé jusqu’à l’étape où vous obtenez une paire de clés de type EK (Endorsement Key) pour l’appareil. Enregistrez la clé d’approbation, car vous l’utilisez plus loin dans cet article.

Remarque

Ne suivez pas les étapes de création d’une inscription individuelle avec le portail Azure.

Vous pouvez également choisir de suivre les étapes décrites dans cet article pour créer une inscription individuelle et inscrire un appareil TPM simulé. Si vous voulez inscrire un appareil simulé à la fin de ce guide de démarrage rapide, suivez la procédure décrite dans Créer et approvisionner un appareil TPM simulé jusqu’à l’étape où vous obtenez une paire de clés de type EK (Endorsement Key) et un ID d’inscription pour l’appareil. Enregistrez la clé d’approbation et l’ID d’inscription, car vous les utilisez plus loin dans cet article.

Remarque

Ne suivez pas les étapes de création d’une inscription individuelle avec le portail Azure.

Vous pouvez également choisir de suivre les étapes décrites dans cet article pour créer une inscription individuelle et inscrire un appareil TPM simulé. Si vous souhaitez inscrire un appareil simulé à la fin de cet article, suivez la procédure décrite dans Créer et approvisionner un appareil TPM simulé jusqu’à l’étape où vous obtenez une paire de clés de type EK (Endorsement Key) pour l’appareil. Notez la clé d’approbation et l’ID d’inscription, car vous les utilisez plus loin dans cet article.

Remarque

Ne suivez pas les étapes de création d’une inscription individuelle avec le portail Azure.

Obtenir la chaîne de connexion de votre service d’approvisionnement

Pour l’exemple présenté dans cet article, vous devez copier la chaîne de connexion pour votre service d’approvisionnement.

  1. Connectez-vous au portail Azure.

  2. Dans le menu de gauche ou dans la page du portail, sélectionnez Toutes les ressources.

  3. Sélectionnez votre service Device Provisioning.

  4. Dans le menu Paramètres, sélectionnez Stratégies d’accès partagées.

  5. Sélectionnez la stratégie d’accès que vous souhaitez utiliser.

  6. Dans le panneau Stratégie d’accès, copiez et enregistrez la chaîne de connexion de la clé primaire.

    Get provisioning service connection string from the portal.

Créer l’exemple d’inscription individuelle

Cette section montre comment créer une application console .NET Core qui ajoute une inscription individuelle pour un appareil TPM à votre service de provisionnement.

  1. Ouvrez une invite de commandes Windows et naviguez jusqu’au dossier dans lequel vous souhaitez créer votre application.

  2. Pour créer un projet de console, exécutez la commande suivante :

    dotnet new console --framework net6.0 --use-program-main 
    
  3. Pour ajouter une référence au kit de développement logiciel (SDK) du service DPS, exécutez la commande suivante :

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    Cette étape lance le téléchargement et l’installation et ajoute une référence au package NuGet client du service Azure IoT DPS et ses dépendances. Ce package inclut les fichiers binaires du kit de développement logiciel (SDK) du service .NET.

  4. Ouvrez le fichier Program.cs dans un éditeur.

  5. Remplacez l’instruction d’espace de noms du début du fichier par ce qui suit :

    namespace CreateIndividualEnrollment;
    
  6. Ajoutez les instructions using suivantes au début du fichier au-dessus de l’instruction namespace.

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Ajoutez les champs suivants à la classe Program et effectuez les modifications mentionnées.

    private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
    private const string RegistrationId = "sample-registrationid-csharp";
    private const string TpmEndorsementKey =
        "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUS" +
        "cTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3d" +
        "yKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKR" +
        "dln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFe" +
        "WlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==";
    
    // Optional parameters
    private const string OptionalDeviceId = "myCSharpDevice";
    private const ProvisioningStatus OptionalProvisioningStatus = ProvisioningStatus.Enabled;
    
    • Remplacez la valeur de l’espace réservé ProvisioningServiceConnectionString par la chaîne de connexion du service de provisionnement que vous avez copiée dans la section précédente.

    • Si vous utilisez cet article avec le guide de démarrage rapide Créer et approvisionner un appareil TPM simulé pour approvisionner un appareil simulé, remplacez la paire de clés de type EK (Endorsement Key) par la valeur dont vous avez pris note dans ce guide. Vous pouvez remplacer l’ID d’appareil et l’ID d’inscription par les valeurs suggérées dans ce guide de démarrage rapide, utiliser vos propres valeurs ou les valeurs par défaut dans cet exemple.

  8. Ajoutez la méthode suivante à la classe Program. Ce code crée une entrée d’inscription individuelle, puis appelle la méthode CreateOrUpdateIndividualEnrollmentAsync sur ProvisioningServiceClient pour ajouter l’inscription individuelle au service d’approvisionnement.

    public static async Task RunSample()
    {
        Console.WriteLine("Starting sample...");
    
        using (ProvisioningServiceClient provisioningServiceClient =
                ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString))
        {
            #region Create a new individualEnrollment config
            Console.WriteLine("\nCreating a new individualEnrollment object...");
            Attestation attestation = new TpmAttestation(TpmEndorsementKey);
            IndividualEnrollment individualEnrollment =
                    new IndividualEnrollment(
                            RegistrationId,
                            attestation);
    
            // The following parameters are optional. Remove them if you don't need them.
            individualEnrollment.DeviceId = OptionalDeviceId;
            individualEnrollment.ProvisioningStatus = OptionalProvisioningStatus;
            #endregion
    
            #region Create the individualEnrollment
            Console.WriteLine("\nAdding the individualEnrollment to the provisioning service...");
            IndividualEnrollment individualEnrollmentResult =
                await provisioningServiceClient.CreateOrUpdateIndividualEnrollmentAsync(individualEnrollment).ConfigureAwait(false);
            Console.WriteLine("\nIndividualEnrollment created with success.");
            Console.WriteLine(individualEnrollmentResult);
            #endregion
    
        }
    }
    
  9. Enfin, remplacez la méthode Main par les lignes suivantes :

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. Enregistrez vos modifications.

  1. À partir d’une fenêtre de commande dans votre dossier de travail, exécutez :

    npm install azure-iot-provisioning-service
    

    Cette étape lance le téléchargement et l’installation et ajoute une référence au package client du service Azure IoT DPS et ses dépendances. Ce package inclut les fichiers binaires du kit de développement logiciel (SDK) du service Node.js.

  2. À l’aide d’un éditeur de texte, créez un fichiercreate_individual_enrollment.js dans votre dossier de travail. Ajoutez le code suivant au fichier :

    'use strict';
    
    var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
    
    var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]);
    var endorsementKey = process.argv[3];
    
    var enrollment = {
      registrationId: 'first',
      attestation: {
        type: 'tpm',
        tpm: {
          endorsementKey: endorsementKey
        }
      }
    };
    
    serviceClient.createOrUpdateIndividualEnrollment(enrollment, function(err, enrollmentResponse) {
      if (err) {
        console.log('error creating the individual enrollment: ' + err);
      } else {
        console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
      }
    });
    
  3. Enregistrez le fichier.

  1. Ouvrez une invite de commandes Windows.

  2. Clonez les kits de développement logiciel (SDK) Microsoft Azure IoT pour le référentiel GitHub Java :

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Accédez à l’exemple de dossier :

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
    
  4. Ouvrez le fichier \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java dans un éditeur.

  5. Remplacez [Provisioning Connection String] par la chaîne de connexion que vous avez copiée dans Obtenir la chaîne de connexion de votre service de provisionnement.

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
  6. Ajoutez les détails de l’appareil TPM. Remplacez [RegistrationId] et [TPM Endorsement Key] dans les instructions suivantes par votre paire de clés de type EK (Endorsement Key) et votre ID d’inscription.

    private static final String REGISTRATION_ID = "[RegistrationId]";
    private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
    
    • Si vous utilisez cet article avec le guide de démarrage rapide Créer et approvisionner un appareil TPM simulé pour approvisionner un appareil simulé, utilisez les valeurs ID d’inscription et Paire de clés de type EK (Endorsement Key) dont vous avez pris note dans ce guide.

    • Si vous utilisez cet article pour créer un exemple d’inscription individuelle et sans intention de vous en servir pour inscrire un appareil, vous pouvez utiliser la valeur suivante pour une paire de clés de type EK (Endorsement Key) :

      private static final String TPM_ENDORSEMENT_KEY = "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnefZcBhgy1SSDQMQ==";
      

      Entrez votre propre valeur pour l’ID d’inscription, par exemple « myJavaDevice ».

  7. Pour les inscriptions individuelles, vous pouvez choisir de définir un ID d’appareil que DPS affecte à l’appareil lorsqu’il le provisionne sur IoT Hub. Si vous n’attribuez pas d’ID d’appareil, DPS utilise l’ID d’inscription comme ID d’appareil. Par défaut, cet exemple attribue « myJavaDevice » en tant qu’ID d’appareil. Si vous souhaitez modifier l’ID de l’appareil, modifiez l’instruction suivante :

        private static final String DEVICE_ID = "myJavaDevice";
    

    Si vous ne souhaitez pas attribuer d’ID d’appareil spécifique, commentez l’instruction suivante :

    individualEnrollment.setDeviceId(DEVICE_ID);
    
  8. Cet exemple vous permet de définir un hub IoT dans l’inscription individuelle pour approvisionner l’appareil. Ce hub IoT doit être un hub qui a été précédemment lié au service d’approvisionnement. Pour cet article, nous allons choisir DPS parmi les hubs liés en fonction de la stratégie d’allocation par défaut, distribution pondérée uniformément. Dans le fichier, commentez l’instruction suivante :

    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    
  9. L’exemple crée, met à jour, interroge et supprime l’inscription d’un appareil TPM. Pour vérifier la validité de l’inscription sur le portail, commentez temporairement les lignes suivantes de code à la fin du fichier :

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  10. Enregistrez vos modifications.

Exécuter l’exemple d’inscription individuelle

  1. Exécutez l’exemple :

    dotnet run
    
  2. Une fois la création terminée, la fenêtre de commande affiche les propriétés de la nouvelle inscription.

Pour exécuter l’exemple, vous avez besoin de l’chaîne de connexion de votre service d’approvisionnement que vous avez copié dans la section précédente et de la clé d’approbation pour l’appareil. Si vous avez suivi le guide de démarrage rapide Créer et approvisionner un appareil simulé pour créer un appareil TPM simulé, utilisez la paire de clés de type EK (Endorsement Key) créée pour cet appareil. Sinon, pour créer un exemple d’inscription individuelle, vous pouvez utiliser la paire de clés de type EK (Endorsement Key) suivante fournie avec le kit Node.js Service SDK :

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. Afin de créer une inscription individuelle pour votre appareil TPM, exécutez la commande suivante (sans oublier les guillemets autour des arguments de commande) :

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. Une fois la création terminée, la fenêtre de commande affiche les propriétés de la nouvelle inscription.

  1. À partir du dossier azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample dans votre invite de commandes, exécutez la commande suivante pour générer l’exemple :

    mvn install -DskipTests
    

    Cette commande télécharge le package Maven client du service Azure IoT DPS sur votre machine et génère l’exemple. Ce package inclut les fichiers binaires du kit Java Service SDK.

  2. Basculez vers le dossier cible et exécutez l’exemple. La build de l’étape précédente génère le fichier .jar dans le dossier cible au format de fichier suivant : service-enrollment-sample-{version}-with-deps.jar; par exemple : service-enrollment-sample-1.8.1-with-deps.jar. Vous devrez peut-être remplacer la version dans la commande suivant.

    cd target
    java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
    
  3. Une fois la création terminée, la fenêtre de commande affiche les propriétés de la nouvelle inscription.

Pour vérifier que l’inscription individuelle a été créée :

  1. Dans le Portail Azure, accédez à votre instance de service Device Provisioning.

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

  3. Sélectionnez l’onglet Inscriptions individuelles. Vous devez voir une nouvelle entrée d’inscription qui correspond à l’ID d’inscription que vous avez utilisé dans l’exemple.

Screenshot that shows verifying enrollment for a C# individual device in the portal.

Screenshot that shows verifying enrollment for a Node.js individual device in the portal.

Screenshot that shows verifying enrollment for a Java individual device in the portal.

Inscrire un appareil simulé (facultatif)

Si vous avez suivi les étapes du guide de démarrage rapide Créer et approvisionner un appareil TPM simulé, reprenez ce guide à l’étape Inscrire l’appareil.

Si vous avez suivi les étapes du guide de démarrage rapide Créer et approvisionner un appareil TPM simulé, reprenez ce guide à l’étape Inscrire l’appareil.

Si vous avez suivi les étapes du guide de démarrage rapide Créer et approvisionner un appareil TPM simulé, reprenez ce guide à l’étape Inscrire l’appareil.

Nettoyer les ressources

Si vous prévoyez d’explorer les tutoriels sur DPS, ne supprimez pas les ressources créées dans cet article. Sinon, utilisez les étapes suivantes pour supprimer toutes les ressources créées par cet article.

  1. Dans le Portail Azure, accédez à votre instance de service Device Provisioning.

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

  3. Sélectionnez l’onglet Inscriptions individuelles.

  4. Sélectionnez la zone case activée en regard de l’ID d’inscription de l’entrée d’inscription que vous avez créée dans cet article.

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

  1. Si vous avez suivi les étapes décrites dans Créer et provisionner un appareil TPM simulé pour créer un appareil TPM simulé, effectuez les étapes suivantes :

    1. Dans le portail Azure, accédez au IoT Hub au sein duquel votre appareil était approvisionné.

    2. Dans le menu de gauche, sous Gestion des appareils, sélectionnez Appareils.

    3. Cochez la case à côté de l’ID d’appareil de l’appareil que vous avez inscrit dans cet article.

    4. En haut du volet, sélectionnez Supprimer.

  1. Si vous avez suivi les étapes décrites dans Créer et provisionner un appareil TPM simulé pour créer un appareil TPM simulé, effectuez les étapes suivantes :

    1. Fermez la fenêtre du simulateur TPM et la fenêtre d’exemple de sortie pour l’appareil simulé.

    2. Dans le portail Azure, accédez au IoT Hub au sein duquel votre appareil était approvisionné.

    3. Dans le menu de gauche, sous Gestion des appareils, sélectionnez Appareils.

    4. Sélectionnez la zone case activée en regard de l’ID d’appareil de l’appareil que vous avez inscrit dans cet article.

    5. En haut du volet, sélectionnez Supprimer.

  1. Si vous avez suivi les étapes décrites dans Créer et provisionner un appareil TPM simulé pour créer un appareil TPM simulé, effectuez les étapes suivantes :

    1. Fermez la fenêtre du simulateur TPM et la fenêtre d’exemple de sortie pour l’appareil simulé.

    2. Dans le portail Azure, accédez au IoT Hub au sein duquel votre appareil était approvisionné.

    3. Dans le menu de gauche, sous Gestion des appareils, sélectionnez Appareils.

    4. Sélectionnez la zone case activée en regard de l’ID d’appareil de l’appareil que vous avez inscrit dans cet article.

    5. En haut du volet, sélectionnez Supprimer.

Étapes suivantes

Dans cet article, vous avez créé programmatiquement une entrée d’inscription individuelle pour un appareil TPM. Si vous avez choisi de le faire, vous avez créé un appareil simulé TPM sur votre ordinateur et vous l’avez provisionné sur votre hub IoT avec le service Azure IoT Hub Device Provisioning. Pour en savoir plus, consultez les liens suivants :