Contrôle d’accès pour les clients MQTT
Le contrôle d’accès vous permet de gérer l’autorisation des clients à publier ou à s’abonner à des rubriques, à l’aide d’un modèle de contrôle d’accès en fonction du rôle. Étant donné l’immensité de l’échelle des environnements IoT, l’attribution d’autorisations pour chaque client à chaque rubrique est extrêmement fastidieuse. La fonctionnalité du répartiteur MQTT Azure Event Grid résout ce défi de mise à l’échelle en regroupant les clients et les rubriques en groupes de clients et espaces de rubrique.
Les composants principaux du modèle de contrôle d’accès sont les suivants :
Un client représente l’appareil ou l’application qui doit publier et/ou s’abonner à des rubriques MQTT.
Un groupe de clients est un ensemble de clients qui ont besoin du même accès pour publier et/ou s’abonner au même ensemble de rubriques MQTT. Le groupe de clients représente le principal dans le modèle RBAC.
Un espace de rubrique représente plusieurs rubriques par le biais d’un ensemble de modèles de rubrique. Les modèles de rubrique sont une extension des filtres MQTT qui prennent en charge les variables, ainsi que les caractères génériques MQTT. Chaque espace de rubrique représente les rubriques que le même ensemble de clients doit utiliser pour communiquer. L’espace de rubrique représente la ressource dans le modèle RBAC.
Une liaison d’autorisation accorde l’accès à un groupe de clients spécifique pour publier ou s’abonner aux rubriques représentées par un espace de rubrique spécifique. La liaison d’autorisation représente le rôle dans le modèle RBAC.
Exemples :
Les exemples suivants expliquent en détail comment configurer le modèle de contrôle d’accès en fonction des exigences suivantes.
Exemple 1 :
Une usine comporte plusieurs zones, chacune d'entre elles comprenant des machines qui doivent communiquer entre elles. Toutefois, les machines provenant d’autres zones de l’usine ne sont pas autorisées à communiquer avec elles.
Client | Rôle | Filtre de rubrique/rubrique |
---|---|---|
Area1_Machine1 | Serveur de publication | areas/area1/machines/machine1 |
Area1_Machine2 | Abonné | areas/area1/machines/ # |
Area2_Machine1 | Serveur de publication | areas/area2/machines/machine1 |
Area2_Machine2 | Abonné | areas/area2/machines/ # |
Configuration
- Créez une ressource cliente pour chaque machine.
- Créez un groupe de clients pour les machines de chaque zone d'usine.
- Créez un espace de rubrique pour chaque zone représentant les sujets sur lesquels les machines de la zone communiquent.
- Créez deux liaisons d’autorisation pour que le groupe de clients de chaque zone publie et s’abonne à l’espace de rubrique de sa zone correspondante.
Client | Groupe de clients | Liaison d’autorisations | Espace de rubrique |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1-Pub | Area1Messages -Modèle de rubrique : areas/area1/machines/ # |
Area1_Machine2 | Area1Machines | Area1-Sub | Area1Messages -Modèle de rubrique : areas/area1/machines/ # |
Area2_Machine1 | Area2Machines | Area2-Pub | Area2Messages -Modèle de rubrique : areas/area2/machines/ # |
Area2_Machine2 | Area2Machines | Area2-Sub | Area2Messages -Modèle de rubrique : areas/area2/machines/ # |
Exemple 2 :
Supposons une exigence supplémentaire pour l'exemple précédent : chaque zone a des clients de gestion avec les machines, et les machines ne doivent pas avoir accès à la publication au cas où l'une d'entre elles serait compromise. En revanche, les clients de gestion ont besoin d’un accès de publication pour envoyer des commandes aux machines et s’abonner à un accès pour recevoir des données de télémétrie des machines.
Client | Rôle | Filtre de rubrique/rubrique |
---|---|---|
Area1_Machine1 | Serveur de publication | areas/area1/machines/machine1 |
Abonné | areas/area1/mgmt/# | |
Area1_Mgmt1 | Serveur de publication | areas/area1/mgmt/machine1 |
Abonné | areas/area1/machines/ # | |
Area2_Machine1 | Serveur de publication | areas/area2/machines/machine1 |
Abonné | areas/area2/mgmt/# | |
Area2_ Mgmt1 | Serveur de publication | areas/area2/mgmt/machine1 |
Abonné | areas/area2/machines/ # |
Configuration :
- Créez des ressources client pour chaque machine et client de gestion.
- Créez deux groupes de clients par zone : un pour le client de gestion et un autre pour les machines.
- Créez deux espaces de rubriques pour chaque zone : l’un représentant des rubriques de télémétrie et l’autre représentant des rubriques de commandes.
- Créez deux liaisons d’autorisation pour les clients de gestion de chaque zone à publier dans l’espace de rubrique des commandes et à s’abonner à l’espace de rubrique de télémétrie.
- Créez deux liaisons d’autorisation pour les machines de chaque zone afin de souscrire à l'espace thématique des commandes et de publier dans l'espace thématique de la télémétrie.
Client | Groupe de clients | Liaison d’autorisations | Filtre de rubrique/rubrique |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1Machines-Pub | Area1Telemetry -Modèle de rubrique : areas/area1/machines/ # |
Area1Machines-Sub | Area1Commands -Modèle de rubrique : areas/area1/mgmt/ # | ||
Area1_MgmtClient1 | Area1Mgmt | Area1Mgmt-Pub | Area1Commands -Modèle de rubrique : areas/area1/mgmt/ # |
Area1Mgmt-Sub | Area1Telemetry -Modèle de rubrique : areas/area1/machines/ # | ||
Area2_Machine1 | Area2Machines | Area2Machines-Pub | Area2Telemetry -Modèle de rubrique : areas/area2/machines/ # |
Area2Machines-Sub | Area2Commands -Modèle de rubrique : areas/area2/mgmt/ # | ||
Area2_ MgmtClient1 | Area2Mgmt | Area2Mgmt-Pub | Area2Commands -Modèle de rubrique : areas/area2/mgmt/ # |
Area2Mgmt-Sub | Area2Telemetry -Modèle de rubrique : areas/area2/machines/ # |
Contrôle d’accès granulaire
Le contrôle d’accès granulaire vous permet de contrôler l’autorisation de chaque client au sein d’un groupe de clients pour publier ou s’abonner à sa propre rubrique. Ce contrôle d’accès granulaire est obtenu à l’aide de variables dans les modèles de rubrique.
Même si un groupe de clients peut avoir accès à un espace de rubrique spécifique avec tous ses modèles de rubrique, les variables dans les modèles de rubrique vous permettent de contrôler l’autorisation de chaque client au sein de ce groupe de clients à publier ou à s’abonner à sa propre rubrique. Par exemple, si le groupe de clients « machines » inclut deux clients : « machine1 » et « machine2 ». En utilisant des variables, vous pouvez autoriser uniquement machine1 à publier ses données de télémétrie uniquement sur la rubrique MQTT « machines/machine1/télémétrie » et « machine2 » à publier des messages sur la rubrique MQTT « machines/machine2/télémétrie ».
Les variables représentent des noms d’authentification client ou des attributs client. Pendant la communication avec le répartiteur MQTT, chaque client remplace la variable dans la rubrique MQTT par une valeur de substitution. Par exemple, la variable ${client.authenticationName} serait remplacée par le nom d'authentification de chaque client : machine1, machine2, etc. Le répartiteur MQTT n'autorise l'accès qu'aux clients dont la valeur substituée correspond soit à leur nom d'authentification, soit à la valeur de l'attribut spécifié.
Par exemple, considérons la configuration suivante :
- Groupe de clients : Machines
- Espace de rubrique : MachinesTelemetry
- Modèle de rubrique « machines/${client.authenticationName}/telemetry ».
- Liaison d’autorisation : groupe de clients : machines ; espace de rubrique : machinesTelemetry ; Autorisation : publisher
Avec cette configuration, seul le client avec le nom d’authentification client « machine1 » peut publier sur la rubrique « machines/machine1/télémétrie », et seule la machine avec le nom d’authentification client « machine 2 » peut publier sur la rubrique « machines/machine2/télémétrie », etc. Par conséquent, machine2 ne peut pas publier de fausses informations pour le compte de machine1, même s’il a accès au même espace de rubrique, et vice versa.
Étapes suivantes :
En savoir plus sur l’autorisation et l’authentification :