Share via


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.

Diagram of the access control model.

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.

Diagram of the granular access control example.

Étapes suivantes :

En savoir plus sur l’autorisation et l’authentification :