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

S’applique à :IoT Edge 1.4 checkmark IoT Edge 1.4

Important

IoT Edge 1.4 est la version prise en charge. Si vous utilisez une version antérieure, consultez l’article 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, consultez les instructions d’intégration d’un TPM 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

Remarque

Cet article utilisait précédemment l’outil tpm_device_provision du Kit de développement logiciel (SDK) IoT C pour générer des informations d’approvisionnement. Si vous vous appuyiez sur cet outil, sachez que les étapes ci-dessous génèrent un ID d’inscription différent pour la même clé d’approbation publique. Si vous devez recréer l’ID d’inscription comme précédemment, reportez-vous à la façon dont l’outil tpm_device_provision du SDK C le génère. Vérifiez que l’ID d’inscription de l’inscription individuelle dans DPS correspond à l’ID d’inscription que l’appareil IoT Edge est configuré pour utiliser.

Dans cette section, vous utilisez les outils logiciels TPM2 pour récupérer la clé d’approbation de votre module de plateforme sécurisée, puis générer un ID d’inscription unique. Cette section correspond à Étape 3 : l’appareil a installé le microprogramme et le logiciel dans le processus d’intégration d’un module de plateforme sécurisée dans le processus de fabrication.

Installer les outils TPM2

Connectez-vous à votre appareil et installez le package tpm2-tools.

sudo apt-get install tpm2-tools

Exécutez le script suivant pour lire la clé d’approbation, en créant une clé s’il n’existe pas déjà.

#!/bin/sh
if [ "$USER" != "root" ]; then
  SUDO="sudo "
fi

$SUDO tpm2_readpublic -Q -c 0x81010001 -o ek.pub 2> /dev/null
if [ $? -gt 0 ]; then
  # Create the endorsement key (EK)
  $SUDO tpm2_createek -c 0x81010001 -G rsa -u ek.pub

  # Create the storage root key (SRK)
  $SUDO tpm2_createprimary -Q -C o -c srk.ctx > /dev/null

  # make the SRK persistent
  $SUDO tpm2_evictcontrol -c srk.ctx 0x81000001 > /dev/null

  # open transient handle space for the TPM
  $SUDO tpm2_flushcontext -t > /dev/null
fi

printf "Gathering the registration information...\n\nRegistration Id:\n%s\n\nEndorsement Key:\n%s\n" $(sha256sum -b ek.pub | cut -d' ' -f1 | sed -e 's/[^[:alnum:]]//g') $(base64 -w0 ek.pub)
$SUDO rm ek.pub srk.ctx 2> /dev/null

La fenêtre de sortie affiche la clé d’approbation et l’ID d’enregistrement unique 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 allez préparer votre machine virtuelle ou votre appareil physique Linux à 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 :

  • 22.04 :

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 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
    

Pour obtenir plus d’informations sur les versions des systèmes d’exploitation, voir Plateformes prises en charge par Azure IoT Edge.

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

Par défaut, le moteur de conteneur ne définit pas de limites de taille pour le journal de conteneur. Au fil du temps, cela peut amener l’appareil à se remplir de journaux et à manquer d’espace disque. Toutefois, vous pouvez configurer votre journal pour qu’il s’affiche localement, bien que ce soit facultatif. Pour en savoir plus sur la configuration de la journalisation, consultez Check-list du déploiement de production.

Les étapes suivantes vous indiquent comment configurer votre conteneur pour utiliser le pilote de journalisation local comme mécanisme de journalisation.

  1. Créez ou modifiez le fichier config existant du démon Docker

    sudo nano /etc/docker/daemon.json
    
  2. Définissez le pilote de journalisation par défaut sur le pilote de journalisation local, comme indiqué dans l’exemple.

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

    sudo systemctl restart docker
    

Installer le runtime IoT Edge

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

Remarque

À partir de la version 1.2, le service d’identité IoT gère l’approvisionnement et la gestion des identités pour IoT Edge et pour d’autres composants d’appareil qui doivent communiquer avec IoT Hub.

La procédure de cette section représente le processus classique d’installation de la dernière version IoT Edge 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.

Conseil

Si vous disposez déjà d’un appareil IoT Edge exécutant une version plus ancienne et que vous souhaitez effectuer une mise à niveau vers la dernière version, suivez les étapes décrites dans Mettre à jour le runtime et le démon de sécurité IoT Edge. Les versions ultérieures sont si différente des versions précédentes d’IoT Edge que des étapes spécifiques sont nécessaires pour la mise à niveau.

Installez la dernière version d’IoT Edge et le package du service d’identité IoT (si vous n’êtes pas encore à jour) :

  • 22.04 :

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04 :

    sudo apt-get update; \
       sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

Le package defender-iot-micro-agent-edge facultatif inclut le micro-agent de sécurité Microsoft Defender pour IoT qui fournit une visibilité des points de terminaison sur la gestion de la posture de sécurité, les vulnérabilités, la détection des menaces, la gestion de la flotte et bien plus encore pour vous aider à sécuriser vos appareils IoT Edge. Il est recommandé d’installer le micro-agent avec l’agent Edge pour activer la supervision et le renforcement de la sécurité de vos appareils Edge. Pour en savoir plus sur Microsoft Defender pour IoT, consultez Présentation de Microsoft Defender pour IoT pour les générateurs d’appareils.

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.

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.

Créez un fichier de configuration pour votre appareil à partir d’un fichier de modèle fourni dans le cadre de l’installation d’IoT Edge.

sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml

Ouvrez le fichier de configuration sur l’appareil IoT Edge.

sudo nano /etc/aziot/config.toml
  1. Recherchez la section relative aux configurations d’approvisionnement dans le fichier. Supprimez les marques de commentaire des lignes du provisionnement TPM et de toutes les autres lignes de provisionnement.

    # DPS provisioning with TPM
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "SCOPE_ID_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "tpm"
    registration_id = "REGISTRATION_ID_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. Remplacez les valeurs id_scope 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.

    Pour plus d’informations sur le provisionnement des paramètres de configuration, consultez Configurer les paramètres d’appareil IoT Edge.

  3. Si vous le souhaitez, recherchez la section auto-reprovisioning mode du fichier. Utilisez le paramètre auto_reprovisioning_mode pour configurer le comportement de reprovisionnement de votre appareil. Dynamic : Le reprovisionnement a lieu quand l’appareil détecte qu’il a peut-être été déplacé d’un IoT Hub vers un autre IoT Hub. Il s’agit de la valeur par défaut. AlwaysOnStartup : reprovisionnez quand l’appareil est redémarré ou qu’un incident entraîne le redémarrage des démons. OnErrorOnly : Le reprovisionnement automatique de l’appareil n’est jamais déclenché. Chaque mode dispose d’une source de secours implicite de reprovisionnement d’appareil si l’appareil ne parvient pas à se connecter à IoT Hub lors du provisionnement d’identité en raison d’erreurs de connectivité. Pour plus d’informations, consultez Concepts du reprovisionnement d’appareils IoT Hub.

  4. Vous pouvez supprimer les marques de commentaire du paramètre payload afin de spécifier le chemin d’accès d’un fichier JSON local. Le contenu du fichier est envoyé à DPS sous forme de données supplémentaires pendant l’inscription de l’appareil. Cela est utile pour une allocation personnalisée. Par exemple, si vous souhaitez allouer vos appareils en fonction d’un ID de modèle IoT Plug-and-Play sans intervention humaine.

  5. Enregistrez le fichier et fermez-le.

Donner à IoT Edge l’accès au TPM

Le runtime IoT Edge s’appuie sur un service de module de plateforme sécurisée (TPM) qui donne accès au module TPM d’un appareil. Le service a besoin d’accéder au module TPM pour provisionner automatiquement votre appareil.

Vous pouvez accorder au TPM en substituant les paramètres système afin que le service aziottpmdispose 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 aziottpm access to tpm0 and tpmrm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="aziottpm", MODE="0660"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="aziottpm", MODE="0660"
    
  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-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpm0
    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpmrm0
    

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

  7. Appliquez les modifications de configuration que vous avez apportées à l’appareil.

    sudo iotedge config apply
    

Vérifier la réussite de l’installation

Si vous ne l’avez pas déjà fait, appliquez les modifications de configuration que vous avez effectuées sur l’appareil.

sudo iotedge config apply

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

sudo iotedge system status

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

sudo iotedge system logs

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.