On retrouve souvent IoT Edge pour déployer des appareils IoT avec ses modules Edge. Mais il est également possible de l’utiliser en tant que passerelle d’IoT.
Ce fut pour moi le cas pour ma première fois avec Azure IoT Edge où je devais réaliser une passerelle IoT supportant un protocole UDP tout en bénéficiant des fonctionnalités d’IoT Hub sur les appareils enfants.
C’est d’ailleurs un cas d’usage qui est également utilisé dans mon premier article Transformer sa plateforme Azure IoT Hub en y ajoutant le support LoRaWan que j’avais réalisé en décembre 2020.
Transparent Gateway
La Gateway Transparente est la base du déploiement de votre solution de passerelle IoT. En utilisant ce mode vous pouvez proposer à vos appareils IoT de se connecter à IoT Hub au travers de votre passerelle. Il n’est pas nécessaire de modifier l’appareil IoT (appelé « leaf device »). Seul le nom de l’hôte dans la chaine de connexion.

Le mode transparent, permet ainsi à votre Edge de publier les interfaces AMQP/MQTT et HTTPS nécessaires pour que votre leaf device puisse se connecter.
Au final vos appareils s’authentifient auprès de IoT Hub avec leur propre identité et toutes les communications sont multiplexés sur la connexion existante entre la passerelle et IoT Hub. Sur la plateforme vous pouvez alors spécifier un lien de parenté entre la passerelle et l’appareil, permettant ainsi de garantir que l’appareil ne puisse s’authentifier que au travers de cette passerelle:

Chaines de certificats
Vous l’aurez remarqué La solution Azure IoT est « secured by design » et il n’est pas possible de désactiver les fonctions SSL/TLS vous obligeant ainsi à gérer votre chaine de certificats pour votre infrastructure IoT.
Pour votre production, il vous faudra alors configurer votre appareil Edge avec les informations suivantes :
- Certificate Authority Root (clef publique)
- Device Certificate Authority (clef publique et privée).
En effet votre appareil Edge a besoin d’un certificat d’autorité de certification intermédiaire permettant à IoT Edge Security Manager de générer et de signer les certificats finaux pour publier les services de passerelle sur Edge Hub.
Enfin sur votre leaf device il suffira d’ajouter votre Certificate Authority Root dans les certificats racine de confiance de votre appareil pour qu’il puisse communiquer de manière sécurisée avec votre passerelle.
Et en environnement de dev ?
OK c’est beau pour la production, mais vous l’aurez compris c’est assez lourd à mettre en œuvre. Pour vos phases de POC vous aurez besoin également de générer votre chaîne.
Microsoft vous propose des scripts de génération des certificats en démo que vous pouvez utiliser sur votre poste de développement.
Dans mon exemple, ma passerelle s’appellera « transparent_gateway_name » :
git clone https://github.com/Azure/iotedge.git
cp ./iotedge/tools/CACertificates/*.cnf .
cp ./iotedge/tools/CACertificates/certGen.sh .
./certGen.sh create_root_and_intermediate
./certGen.sh create_edge_device_ca_certificate "transparent_gateway_name"
Cela génèrera ainsi les fichiers suivants :
./certs/azure-iot-test-only.root.ca.cert.pem
./certs/iot-edge-device-ca-transparent_gateway_name-full-chain.cert.pem
./private/iot-edge-device-ca-transparent_gateway_name.key.pem
Dans votre configuration iotedge (config.yml), il faudra alors configurer les éléments suivants :
certificates:
device_ca_cert: "/root/certs/iot-edge-device-ca-transparent_gateway_name-full-chain.cert.pem"
device_ca_pk: "/root/private/iot-edge-device-ca-transparent_gateway_name.key.pem"
trusted_ca_certs: "/root/certs/azure-iot-test-only.root.ca.cert.pem"
Et voilà, lorsque vous aurez démarré votre passerelle, le service edgeHub sera protégé par SSL avec un certificat issu par votre chaine de certificats …
Protocol Translation
Le Protocol Translation permet à votre passerelle IoT Edge d’adresser d’autres types de protocoles que ceux embarqués avec edgeHub naturellement. En développant votre propre module de communication (Bluetooth, UDP, RF, …) vous pouvez ainsi utiliser votre passerelle IoT Edge dans n’importe quelle situation.

Notez cependant que dans ce cadre, IoT Hub n’a pas connaissance des appareils IoT leaf déployés, seule la gateway est identifiée, les messages seront alors transmis par le module de protocole avec l’identité de la passerelle.
Identity Translation
La translation d’identité est le pattern permettant, après la translation de protocole, d’identifier un à un les appareils leaf déployées. Il s’appuie sur le mode transparent gateway afin que le module de translation puisse se connecter sur le edgeHub avec l’identité de l’appareil leaf. Le module de translation maintien alors en mémoire les connexions de tous les appareils qui communiquent avec lui.
Dans le projet LoRa Wan, c’est le module NetworkServer qui effectue ce rôle en combinaison avec la Fonction Azure Key Manager Facade.
Sachez que si vous désirez un module de translation d’identité il vous faudra le coder vous même pour qu’il corresponde à vos besoins. Le module de translation doit respecter un certain nombre de prérequis pour vous permettre de bénéficier des fonctions disponibles sur Azure IoT Hub tels que :
- Cloud to Device message
- Direct Methods
- Device Twins
La solution à développer ressemble alors à ceci :

Cela fait effectivement pas mal d’implémentation à réaliser pour le faire correctement, mais, les samples Azure disponibles sur github sont assez nombreux et il existe un sample de Identity Translation Lite qui permet alors de faire un quick start de votre solution facilement : Azure-Samples/azure-iot-edge-identity-translation-lite: Azure IoT Edge Identity Translation Module sample. (github.com)
Conclusion
Une passerelle Azure IoT Edge permet de prendre en charge rapidement les protocoles IoT AMQP, MQTT et HTTPs en bénéficiant des fonctionnalités communes de IoT Hub. Même si l’ouverture de ces trois protocoles permet d’embarquer un grand nombre d’appareils sur le marché, ceci n’est pas toujours suffisant. La possibilité alors d’étendre votre passerelle avec de la translation de protocole et d’identité permet alors de doter à votre plateforme IoT Industrielle la capacité d’adresser tous vos projets IoT avec cette seule technologie.
Utiliser IoT Edge en tant que passerelle permet alors :
L’analytique en Edge
Le déploiement en Edge de modèle IA permettant de capter et de traiter les données en Edge permet alors de pouvoir réagir à des évènements locaux réduisant ainsi les délais de traitements tout en augmentant la résilience de votre infrastructure.
L’isolation des appareils Leaf
La connexion de vos appareils à IoT Hub au travers d’une passerelle permet alors de supprimer l’exposition de vos appareils à l’internet. Cela est utile également lorsque vos appareils ne disposent pas des ressources nécessaires pour pouvoir résoudre les problématiques liées à la consommation de ressources internet (DNS, Routage) ou encore pour des appareils ne permettant pas d’exécuter des fonctions extrêmement consommatrices de CPU et donc d’énergie comme le TCP, TLS, …
Le lissage du traffic et fonctionnement hors-ligne
Le fonctionnement naturel de Edge Hub permettant de stocker les messages localement avant de les envoyer dans le cloud permet donc d’assurer une résilience aux coupures de connexion internet ainsi qu’aux pics de traffic réseau. Cette mise en hors-ligne fonctionne pour les messages Device To Cloud et pour les mises à jour de jumeaux numériques.