Partager via


Créer et provisionner des appareils IoT Edge à grande échelle avec un module TPM sur Linux

S’applique à : icône oui IoT Edge 1.1

Important

IoT Edge la date de fin du support 1.1 était le 13 décembre 2022. Consultez la page Politique de support Microsoft pour plus d’informations sur la prise en charge de ce produit, de ce service, de cette technologie ou de cette API. Pour plus d’informations sur la mise à jour vers la dernière version d’IoT Edge, consultez Mettre à jour IoT Edge.

Cet article fournit des instructions concernant le provisionnement automatique d’un appareil Azure IoT Edge pour Linux en utilisant un TPM (module de plateforme sécurisée). Les appareils IoT Edge peuvent être provisionnés automatiquement à l’aide du service Azure IoT Hub Device Provisioning. Si vous ne connaissez pas le processus de provisionnement automatique, consultez la présentation du provisionnement avant de poursuivre.

Cet article décrit deux méthodologies. Sélectionnez votre préférence en fonction de l’architecture de votre solution :

  • Provisionnement automatique d’un appareil Linux avec du matériel TPM physique. Exemple : Infineon OPTIGA™ TPM SLB 9670.
  • Provisionnement automatique d’une machine virtuelle Linux avec un module TPM simulé exécuté sur un ordinateur de développement Windows sur lequel Hyper-V est activé. Nous vous recommandons d’utiliser cette méthode uniquement dans un scénario de test. Un module de plateforme sécurisée simulé n’offre pas la même sécurité qu’un module de plateforme sécurisée physique.

Les instructions varient en fonction de la méthode choisie. Vérifiez que vous vous trouvez dans l’onglet approprié.

Voici les tâches à effectuer :

  1. Récupérez les informations de provisionnement de votre module TPM.
  2. Créez une inscription individuelle pour votre appareil dans une instance du service IoT Hub Device Provisioning.
  3. Installez le runtime IoT Edge et connecte l’appareil au hub IoT.

Prérequis

Ressources cloud

  • Hub IoT actif
  • Instance du service de provisionnement des appareils IoT Hub dans Azure, liée à votre hub IoT
    • Si vous ne disposez pas d’une instance de service Device Provisioning, vous pouvez suivre les instructions fournies dans les sections Créer un service IoT Hub Device Provisioning et Lier le hub IoT et votre service Device Provisioning du guide de démarrage rapide du service IoT Hub Device Provisioning.
    • Après avoir démarré le service Device Provisioning, copiez la valeur de Étendue de l’ID à partir de la page de présentation. Vous utilisez cette valeur lorsque vous configurez le runtime IoT Edge.

Exigences relatives aux appareils

Un appareil Linux physique faisant office d’appareil IoT Edge.

Si vous êtes fabricant d’appareils, reportez-vous aux conseils sur l’intégration d’un module de plateforme sécurisée au processus de fabrication.

Remarque

TPM 2.0 est requis lorsque vous utilisez l’attestation TPM avec le service de provisionnement des appareils.

Vous pouvez uniquement créer des inscriptions de service de provisionnement des appareils, et non de groupe, lorsque vous utilisez un module de plateforme sécurisée.

Configurer votre appareil

Si vous utilisez un appareil Linux physique avec un module TPM, il n’y a pas d’étapes supplémentaires à suivre pour configurer votre appareil.

Vous pouvez continuer.

Récupération des informations de provisionnement de votre module TPM

Dans cette section, vous créez un outil permettant de récupérer l’ID d’inscription et la paire de clés de type EK (Endorsement key) de votre module TPM.

  1. Connectez-vous à votre appareil, puis suivez les étapes décrites dans Configurer un environnement de développement Linux pour installer et générer Azure IoT device SDK pour C.

  2. Exécutez les commandes suivantes pour créer l’outil SDK permettant de récupérer les informations de provisionnement des appareils de votre module TPM.

    cd azure-iot-sdk-c/cmake
    cmake -Duse_prov_client:BOOL=ON ..
    cd provisioning_client/tools/tpm_device_provision
    make
    sudo ./tpm_device_provision
    
  3. La fenêtre Sortie affiche l’ID d’inscription et la Paire de clés de type EK (Endorsement Key) de l’appareil. Copiez ces valeurs. Vous vous en servirez plus tard, au moment de créer une inscription individuelle pour votre appareil dans le service de provisionnement des appareils.

Une fois que vous avez votre ID d’inscription et votre paire de clés de type EK, vous pouvez continuer.

Conseil

Si vous ne souhaitez pas utiliser les outils logiciels TPM2 pour récupérer les informations, vous devez trouver un autre moyen d’obtenir les informations de provisionnement. La paire de clés de type EK, propre à chaque puce TPM, est fournie par le fabricant de la puce TPM associée. Vous pouvez dériver un ID d’inscription unique pour votre appareil TPM. Par exemple, vous pouvez comme illustré précédemment créer un hachage SHA-256 de la paire de clés de type EK.

Créer une inscription dans le service de provisionnement des appareils

Utilisez les informations de provisionnement de votre TPM pour créer une inscription individuelle dans le service Device Provisioning.

Lorsque vous créez une inscription dans le service Device Provisioning, vous avez la possibilité de déclarer un état initial du jumeau d’appareil. Dans le jumeau d’appareil, vous pouvez définir des balises pour regrouper les appareils en fonction des différentes métriques utilisées dans votre solution, comme la région, l’environnement, l’emplacement ou le type d’appareil. Ces balises sont utilisées pour créer des déploiements automatiques.

Conseil

Les étapes décrites dans cet article concernent le portail Azure, mais vous pouvez également créer des inscriptions individuelles en utilisant Azure CLI. Pour plus d’informations, consultez la section relative à az iot dps enrollment. Dans la commande CLI, utilisez l’indicateur edge-enabled pour spécifier que l’inscription concerne un appareil IoT Edge.

  1. Dans le portail Azure, accédez à votre instance du service IoT Hub Device Provisioning.

  2. Sous Paramètres, sélectionnez Gérer les inscriptions.

  3. Sélectionnez Ajouter une inscription individuelle, puis suivez cette procédure pour configurer l’inscription :

    1. Pour Mécanisme, sélectionnez TPM.

    2. Spécifiez la paire de clés de type EK (Endorsement Key) et l’ID d’inscription que vous avez copiés sur votre machine virtuelle ou votre appareil physique.

    3. Fournissez un ID pour votre appareil si vous le souhaitez. Si vous ne fournissez pas un ID d’appareil, l’ID d’inscription est utilisé.

    4. Sélectionnez True pour déclarer que votre machine virtuelle ou votre appareil physique est un appareil IoT Edge.

    5. Choisissez le hub IoT lié auquel vous voulez connecter votre appareil, ou sélectionnez Lier à un nouveau hub IoT. Vous pouvez choisir plusieurs hubs : l’appareil sera affecté à l’un d’entre eux en fonction de la stratégie d’attribution sélectionnée.

    6. Ajoutez une valeur d’étiquette à l’état initial du jumeau d’appareil si vous le souhaitez. Vous pouvez utiliser des balises pour cibler des groupes d’appareils lors du déploiement de module. Pour plus d’informations, consultez Déploiement de modules IoT Edge à grande échelle.

    7. Sélectionnez Enregistrer.

Maintenant qu’une inscription existe pour cet appareil, le runtime IoT Edge peut provisionner automatiquement l’appareil lors de l’installation.

Installer IoT Edge

Dans cette section, vous préparez votre machine virtuelle ou votre appareil physique Linux pour IoT Edge. Ensuite, vous installez IoT Edge.

Exécutez les commandes suivantes pour ajouter le dépôt de packages, puis ajoutez la clé de signature du package Microsoft à votre liste de clés approuvées.

Important

Le 30 juin 2022, Raspberry Pi OS Stretch a été retiré de la liste de prise en charge des systèmes d’exploitation de niveau 1. Pour éviter des vulnérabilités de sécurité potentielles, mettez à jour votre système d’exploitation hôte vers Bullseye.

L’installation peut se faire avec quelques commandes. Ouvrez un terminal et exécutez les commandes suivantes :

  • 20.04 :

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 18.04 :

    wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

Remarque

Les packages logiciels Azure IoT Edge sont soumis aux termes du contrat de licence situés dans chaque package (usr/share/doc/{package-name} ou dans le répertoire LICENSE). Lisez les termes du contrat de licence avant d’utiliser un package. Le fait d’installer et d’utiliser un package revient à accepter ces termes. Si vous n’acceptez pas les termes du contrat de licence, n’utilisez pas le package en question.

Installer un moteur de conteneur

Azure IoT Edge s’appuie sur un runtime de conteneur compatible avec OCI. Dans les scénarios de production, nous vous recommandons d’utiliser le moteur Moby. Le moteur Moby est le seul moteur de conteneur officiellement pris en charge avec IoT Edge. Les images conteneur Docker CE/EE sont compatibles avec le runtime Moby.

Installez le moteur Moby.

sudo apt-get update; \
  sudo apt-get install moby-engine

Une fois le moteur Moby installé, configurez-le pour utiliser le pilote de journalisation local comme mécanisme de journalisation. Pour en savoir plus sur la configuration de la journalisation, consultez Check-list du déploiement de production.

  • Créez ou ouvrez le fichier config du démon Docker sur /etc/docker/daemon.json.

  • Définissez le pilote de journalisation par défaut sur le pilote de journalisation local, comme indiqué dans l’exemple ci-dessous.

       {
          "log-driver": "local"
       }
    
  • Redémarrez le moteur de conteneur pour appliquer les changements.

    sudo systemctl restart docker
    

    Conseil

    Si des erreurs surviennent quand vous installez le moteur de conteneur Moby, vérifiez la compatibilité de votre noyau Linux avec Moby. Certains fabricants d’appareils embarqués livrent des images d’appareils qui contiennent des noyaux Linux personnalisés sans les fonctionnalités nécessaires à la compatibilité du moteur de conteneur. Exécutez la commande suivante, qui utilise le script check-config fourni par Moby pour vérifier la configuration de votre noyau :

    curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh
    chmod +x check-config.sh
    ./check-config.sh
    

    Dans la sortie du script, vérifiez que tous les éléments sous Generally Necessary et Network Drivers sont activés. S’il vous manque des fonctionnalités, activez-les en regénérant votre noyau à partir de la source et en sélectionnant les modules associés à inclure dans le fichier .config du noyau approprié. De la même façon, si vous utilisez un générateur de configuration du noyau comme defconfig ou menuconfig, recherchez et activez les fonctionnalités respectives, et regénérez votre noyau en conséquence. Une fois que vous avez déployé votre nouveau noyau modifié, réexécutez le script check-config pour vérifier que toutes les fonctionnalités requises ont été activées avec succès.

Installer le runtime IoT Edge

Le démon de sécurité IoT Edge fournit et gère les standards de sécurité sur l’appareil IoT Edge. Le démon se lance à chaque démarrage et amorce l’appareil en démarrant le reste du runtime IoT Edge.

La procédure de cette section représente le processus classique d’installation de la dernière version sur un appareil disposant d’une connexion Internet. Si vous devez installer une version spécifique, comme une préversion, ou si vous devez installer en mode hors connexion, suivez les étapes d’installation d’une version hors connexion ou spécifique plus loin dans cet article.

Installez IoT Edge version 1.1.* avec le package libiothsm-std :

sudo apt-get update; \
  sudo apt-get install iotedge

Remarque

IoT Edge version 1.1 est la branche de support à long terme d’IoT Edge. Si vous exécutez une version antérieure, nous vous recommandons d’installer ou de mettre à jour vers le correctif le plus récent, car les versions antérieures ne sont plus prises en charge.

Provisionnement de l’appareil avec son identité cloud

Une fois le runtime installé sur votre appareil, configurez ce dernier avec les informations qu’il utilise pour se connecter au service de provisionnement des appareils et à IoT Hub.

  1. Récupérez les valeurs Étendue de l’ID du service de provisionnement des appareils et ID d’inscription de l’appareil qui ont été collectées précédemment.

  2. Ouvrez le fichier de configuration sur votre appareil IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  3. Recherchez la section de configuration du provisionnement dans le fichier. Supprimez les marques de commentaire des lignes du provisionnement TPM et de toutes les autres lignes de provisionnement.

    La ligne provisioning: ne doit pas être précédée d’un espace. Par ailleurs, les éléments imbriqués doivent être en retrait de deux espaces.

    # DPS TPM provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "SCOPE_ID_HERE"
      attestation:
        method: "tpm"
        registration_id: "REGISTRATION_ID_HERE"
    
    # always_reprovision_on_startup: true
    # dynamic_reprovisioning: false
    
  4. Remplacez les valeurs scope_id et registration_id par les informations propres à votre appareil et à votre service de provisionnement des appareils. La valeur scope_id correspond à la valeur Étendue de l’ID indiquée dans la page de présentation de votre instance du service de provisionnement des appareils.

  5. Si vous le souhaitez, utilisez les lignes always_reprovision_on_startup ou dynamic_reprovisioning pour configurer le comportement de reprovisionnement de votre appareil. Si un appareil est configuré pour être reprovisionné au démarrage, le reprovisionnement est toujours tenté avec le service DPS dans un premier temps, puis, en cas d’échec, au moyen de la sauvegarde de provisionnement. Si un appareil est configuré pour se réapprovisionner dynamiquement, IoT Edge (et tous les modules) redémarre et se réapprovisionne si un événement de réapprovisionnement est détecté, par exemple si l’appareil est déplacé d’un hub IoT à un autre. Plus précisément, IoT Edge vérifie la présence ou l’absence d’erreurs bad_credential ou device_disabled dans le Kit de développement logiciel (SDK) pour détecter l’événement de réapprovisionnement. Pour déclencher cet événement manuellement, désactivez l’appareil dans IoT Hub. Pour plus d’informations, consultez Concepts du reprovisionnement d’appareils IoT Hub.

  6. Enregistrez le fichier et fermez-le.

Donner à IoT Edge l’accès au TPM

Le runtime IoT Edge a besoin d’accéder au module TPM pour provisionner automatiquement votre appareil.

Vous pouvez accorder au TPM un accès au runtime IoT Edge en substituant les paramètres système afin que le service iotedgedispose des privilèges root. Si vous ne souhaitez pas élever les privilèges de service, vous pouvez également utiliser les étapes suivantes pour fournir manuellement un accès au TPM.

  1. Créez une règle qui donne au runtime IoT Edge l’accès à tpm0 et à tpmrm0.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. Ouvrez le fichier de règles.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. Copiez les informations d’accès suivantes dans le fichier de règles. tpmrm0 n’est pas toujours présent sur les appareils qui utilisent un noyau antérieur à la version 4.12. Les appareils qui n’ont pas de tpmrm0 ignorent cette règle en toute sécurité.

    # allow iotedge access to tpm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
    
  4. Enregistrez et fermez le fichier.

  5. Déclenchez le système udev pour évaluer la nouvelle règle.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. Vérifiez que la règle a bien été appliquée.

    ls -l /dev/tpm*
    

    En cas de réussite, la sortie se présente ainsi :

    crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpm0
    crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpmrm0
    

    Si vous constatez que les autorisations appropriées n’ont pas été appliquées, essayez de redémarrer votre ordinateur pour actualiser udev.

  7. Redémarrez le runtime IoT Edge afin qu’il récupère toutes les modifications de configuration que vous avez effectuées sur l’appareil.

    sudo systemctl restart iotedge
    

Vérifier la réussite de l’installation

Si vous ne l’avez pas déjà fait, redémarrez le runtime IoT Edge pour qu’il récupère toutes les modifications de configuration que vous avez effectuées sur l’appareil.

sudo systemctl restart iotedge

Vérifiez que le runtime IoT Edge est en cours d’exécution.

sudo systemctl status iotedge

Examinez les journaux d’activité du démon.

journalctl -u iotedge --no-pager --no-full

Si vous constatez des erreurs de provisionnement, il est possible que les modifications de configuration ne soient pas encore prises en compte. Essayez de redémarrer le démon IoT Edge.

sudo systemctl daemon-reload

Ou bien, essayez de redémarrer votre machine virtuelle pour voir si les modifications sont prises en compte après un redémarrage à zéro.

Si le runtime a été démarré correctement, vous pouvez accéder à votre hub IoT et voir que votre nouvel appareil a été automatiquement provisionné. Votre appareil est maintenant prêt à exécuter des modules IoT Edge.

Répertoriez les modules en cours d’exécution.

iotedge list

Vous pouvez vérifier que l’inscription individuelle que vous avez créée dans le service de provisionnement des appareils a été utilisée. Accédez à l’instance du service de provisionnement des appareils dans le portail Azure. Ouvrez les détails de l’inscription pour l’inscription individuelle que vous avez créée. Notez que l’état de l’inscription est Affecté et que l’ID de l’appareil figure dans la liste.

Étapes suivantes

Le processus d’inscription DPS vous permet de définir l’ID d’appareil et les balises du jumeau d’appareil tandis que vous provisionnez le nouvel appareil. Vous pouvez utiliser ces valeurs pour cibler des appareils individuels ou des groupes d’appareils avec la gestion d’appareils automatique.

Découvrez comment déployer et superviser des modules IoT Edge à grande échelle à l’aide du portail Azure ou d’Azure CLI.