Partager via


Créer et provisionner des appareils IoT Edge à grande échelle sur Linux à l’aide de certificats X.509

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 complètes pour l’approvisionnement automatique d’un ou plusieurs appareils IoT Edge Linux à l’aide de certificats X.509. Les appareils Azure IoT Edge peuvent être approvisionnés automatiquement à l’aide du Service IoT Hub Device Provisioning (DPS). Si vous ne connaissez pas le processus de provisionnement automatique, consultez la vue d’ensemble du provisionnement avant de poursuivre.

Voici les tâches à effectuer :

  1. Génération de certificats et de clés
  2. Créez une inscription individuelle pour un seul appareil ou une inscription de groupe pour un ensemble d’appareils.
  3. Installation du runtime IoT Edge et inscription de l’appareil auprès d’IoT Hub

Utiliser des certificats X.509 comme mécanisme d’attestation est un excellent moyen de mettre à l’échelle la production et de simplifier le provisionnement des appareils. Les certificats X.509 sont généralement organisés en une chaîne d’approbation de confiance. À partir d’un certificat racine auto-signé ou approuvé, chaque certificat de la chaîne signe le certificat inférieur suivant. Ce modèle crée une chaîne déléguée de confiance depuis le certificat racine jusqu’au certificat en aval final installé sur un appareil, en passant par chaque certificat intermédiaire.

Conseil

Si votre appareil a un module de sécurité matériel (HSM) tel qu’un module TPM 2.0, nous vous recommandons de stocker les clés X.509 en toute sécurité dans le HSM. Découvrez comment implémenter l’approvisionnement sans contact à grande échelle décrit dans ce blueprint avec l’exemple iotedge-tpm2cloud .

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 ou virtuel faisant office d’appareil IoT Edge.

Générer des certificats d’identité d’appareil

Le certificat d’identité d’appareil est un certificat d’appareil en aval qui se connecte par le biais d’une chaîne de certificats de confiance au certificat d’autorité de certification X.509 supérieur. Le nom commun (CN) du certificat d’identité d’appareil doit être défini sur l’ID d’appareil que vous souhaitez que l’appareil ait dans votre hub IoT.

Les certificats d’identité d’appareil sont utilisés uniquement pour provisionner l’appareil IoT Edge et l’authentifier auprès d’Azure IoT Hub. Ils ne signent pas de certificats, contrairement aux certificats d’autorité de certification que l’appareil IoT Edge présente aux modules ou aux appareils en aval à des fins de vérification. Pour plus d’informations, consultez les détails sur l’utilisation des certificats par Azure IoT Edge.

Après avoir créé le certificat d’identité d’appareil, vous devez avoir deux fichiers : un fichier .cer ou .pem, qui contient la partie publique du certificat, et un fichier .cer ou .pem, qui comporte la clé privée du certificat. Si vous envisagez d’utiliser l’inscription de groupe dans le service Device Provisioning, vous avez également besoin de la partie publique d’un certificat d’autorité de certification racine ou intermédiaire dans la même chaîne de certificats de confiance.

Les fichiers suivants sont nécessaires pour configurer le provisionnement automatique avec X.509 :

  • Le certificat d’identité d’appareil et son certificat de clé privée. Le certificat d’identité d’appareil est chargé dans DPS si vous créez une inscription individuelle. La clé privée est transmise au runtime IoT Edge.
  • Un certificat de chaîne complète, qui doit comporter au moins l’identité d’appareil et les certificats intermédiaires qu’elle contient. Le certificat de chaîne complète est transmis au runtime IoT Edge.
  • Un certificat d’autorité de certification racine ou intermédiaire issu de la chaîne d’approbation des certificats. Ce certificat est chargé dans DPS si vous créez une inscription de groupe.

Remarque

Il existe actuellement dans libiothsm une limitation empêchant l’utilisation de certificats qui expirent le 1er janvier 2038 ou après cette date.

Utiliser des certificats de test (facultatif)

Si vous n’avez pas d’autorité de certification disponible pour créer des certificats d’identité et que vous souhaitez tester ce scénario, le dépôt Git Azure IoT Edge contient des scripts que vous pouvez utiliser pour générer des certificats de test. Ces certificats, conçus uniquement pour les tests de développement, ne doivent pas être utilisés en production.

Pour créer des certificats de test, suivez les étapes décrites dans Créer des certificats de démonstration pour tester les fonctionnalités de l’appareil IoT Edge. Effectuez les deux sections nécessaires pour configurer les scripts de génération de certificat et créer un certificat d’autorité de certification racine. Ensuite, suivez les étapes permettant de créer un certificat d’identité d’appareil. Quand vous avez terminé, vous devez disposer de la chaîne de certificats et de la paire de clés suivantes :

  • <WRKDIR>/certs/iot-edge-device-identity-<name>-full-chain.cert.pem
  • <WRKDIR>/private/iot-edge-device-identity-<name>.key.pem

Vous avez besoin de ces deux certificats sur l’appareil IoT Edge. Si vous envisagez d’utiliser l’inscription individuelle dans le service Device Provisioning, vous devez charger le fichier .cert.pem. Si vous envisagez d’utiliser l’inscription de groupe dans le service Device Provisioning, la même chaîne de certificats de confiance doit également comporter un certificat d’autorité de certification racine ou intermédiaire à charger. Si vous recourez à des certificats de démonstration, utilisez le certificat <WRKDIR>/certs/azure-iot-test-only.root.ca.cert.pem pour l’inscription de groupe.

Créer une inscription au service Device Provisioning

Utilisez vos certificats et clés générés afin de créer une inscription dans le service Device Provisioning pour un ou plusieurs appareils IoT Edge.

Si vous envisagez de provisionner un seul appareil IoT Edge, créez une inscription individuelle. Si vous avez besoin de provisionner plusieurs appareils, suivez les étapes de création d’une inscription de groupe DPS.

Lorsque vous créez une inscription auprès du 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 métriques dont vous avez besoin 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.

Pour plus d’informations sur les inscriptions dans le service Device Provisioning, consultez Guide pratique pour gérer les inscriptions d’appareils.

Créer une inscription individuelle dans le service Device Provisioning

Les inscriptions individuelles prennent la partie publique du certificat d’identité d’un appareil et la font correspondre avec le certificat sur l’appareil.

Conseil

Bien que les étapes décrites dans cet article concernent le portail Azure, vous pouvez également créer des inscriptions individuelles à l’aide d’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 et suivez ces étapes pour configurer l’inscription :

    • Mécanisme : sélectionnez X.509.

    • Fichier de certificat principal .pem ou .cer : chargez le fichier public du certificat d’identité de l’appareil. Si vous avez utilisé les scripts pour générer un certificat de test, choisissez le fichier suivant :

      <WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem

    • ID d’appareil loT Hub : fournissez un ID pour votre appareil si vous le souhaitez. Vous pouvez utiliser l’ID d’appareil pour cibler un appareil individuel lors du déploiement de module. Si vous ne fournissez pas d’ID d’appareil, le nom commun (CN) dans le certificat X.509 est utilisé.

    • Appareil IoT Edge : sélectionnez True pour déclarer que l’inscription concerne un appareil IoT Edge.

    • Sélectionnez les hubs IoT auxquels cet appareil peut être attribué : choisissez le hub IoT lié auquel vous voulez connecter votre appareil. Vous pouvez choisir plusieurs hubs : l’appareil sera affecté à l’un d’entre eux en fonction de la stratégie d’allocation sélectionnée.

    • État du jumeau d’appareil initial : ajoutez une valeur d’étiquette au jumeau d’appareil si vous le souhaitez. Vous pouvez utiliser des étiquettes pour cibler des groupes d’appareils lors du déploiement automatique. Par exemple :

      {
          "tags": {
             "environment": "test"
          },
          "properties": {
             "desired": {}
          }
      }
      
  4. Sélectionnez Enregistrer.

Sous Gérer les inscriptions, vous pouvez voir l’ID d’inscription pour l’inscription que vous venez de créer. Notez-le, car il peut être utilisé quand vous provisionnez votre appareil.

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 DPS et à IoT Hub.

Préparez les informations suivantes :

  • La valeur Étendue de l’ID du service Device Provisioning. Vous pouvez récupérer cette valeur à partir de la page de présentation de votre instance du service Device Provisioning dans le portail Azure.
  • Le fichier de chaîne de certificats d’identité d’appareil sur l’appareil
  • Le fichier de clé d’identité d’appareil sur l’appareil
  1. Ouvrez le fichier de configuration sur l’appareil IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  2. Recherchez la section relative aux configurations d’approvisionnement dans le fichier. Supprimez les marques de commentaire des lignes pour l’approvisionnement de certificat DPS X.509, et assurez-vous que les autres lignes d’approvisionnement sont commentées.

    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 X.509 provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "SCOPE_ID_HERE"
      attestation:
        method: "x509"
    #   registration_id: "OPTIONAL_REGISTRATION_ID_LEAVE_COMMENTED_OUT_TO_REGISTER_WITH_CN_OF_IDENTITY_CERT"
        identity_cert: "REQUIRED_URI_TO_DEVICE_IDENTITY_CERTIFICATE_HERE"
        identity_pk: "REQUIRED_URI_TO_DEVICE_IDENTITY_PRIVATE_KEY_HERE"
    
    # always_reprovision_on_startup: true
    # dynamic_reprovisioning: false
    
  3. Mettez à jour les valeurs de scope_id, identity_cert et identity_pk avec vos informations sur l’appareil et le service Device Provisioning.

    Quand vous ajoutez le certificat X.509 et les informations de clé au fichier config.yaml, les chemins doivent être fournis en tant qu’URI de fichier. Par exemple :

    file:///<path>/identity_certificate_chain.pem file:///<path>/identity_key.pem

  4. Si vous le souhaitez, fournissez le registration_id de l'appareil, qui doit correspondre au nom commun du certificat d'identité. Si vous laissez cette ligne commentée, le nom commun est appliqué automatiquement.

  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 et fermez le fichier config.yaml.

  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 le runtime a démarré correctement, vous pouvez accéder à votre IoT Hub et commencer à déployer des modules IoT Edge sur votre appareil.

Vous pouvez vérifier que l’inscription individuelle que vous avez créée dans le service DPS a bien été utilisée. Accédez à l’instance DPS sur 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.

Utilisez les commandes suivantes sur votre appareil pour vérifier que IoT Edge a été installé et démarré correctement.

Vérifiez l’état du service IoT Edge.

systemctl status iotedge

Consultez les journaux d’activité de service.

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

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

iotedge list

É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. En savoir plus sur Déployer et surveiller des modules IoT Edge à grande échelle à l’aide du portail Azure ou d’Azure CLI.