Zugriffssteuerung für MQTT-Clients

Mit Zugriffssteuerung können Sie die Autorisierung von Clients zum Veröffentlichen oder Abonnieren von Themen mithilfe eines rollenbasierten Zugriffssteuerungsmodells verwalten. Angesichts des enormen Umfangs von IoT-Umgebungen ist das Zuweisen von Berechtigungen für jeden Client zu jedem Thema unglaublich mühselig. Das MQTT Vermittler-Feature von Azure Event Grid löst diese Skalierungsaufgabe, indem Clients und Themen in Clientgruppen und Themenbereiche gruppiert werden.

Die wichtigsten Komponenten des Zugriffssteuerungsmodells sind:

Ein Client stellt das Gerät oder die Anwendung dar, das bzw. die MQTT-Themen veröffentlichen und/oder abonnieren muss.

Eine Clientgruppe besteht aus einer Gruppe von Clients, die denselben Zugriff benötigen, um denselben Satz von MQTT-Themen zu veröffentlichen und/oder zu abonnieren. Die Clientgruppe stellt den Prinzipal im RBAC-Modell dar.

Ein Themenbereich stellt mehrere Themen über eine Reihe von Themenvorlagen dar. Themenvorlagen sind eine Erweiterung von MQTT-Filtern, die Variablen zusammen mit MQTT-Platzhaltern unterstützen. Jeder Themenbereich stellt die Themen dar, die dieselbe Gruppe von Clients für die Kommunikation verwenden muss. Der Themenbereich stellt die Ressource im RBAC-Modell dar.

Eine Berechtigungsbindung gewährt Zugriff auf eine bestimmte Clientgruppe, um die Themen zu veröffentlichen oder zu abonnieren, die durch einen bestimmten Themenbereich dargestellt werden. Die Berechtigungsbindung stellt die Rolle im RBAC-Modell dar.

Diagram of the access control model.

Beispiele:

In den folgenden Beispielen wird beschrieben, wie Sie das Zugriffssteuerungsmodell basierend auf den folgenden Anforderungen konfigurieren.

Beispiel 1:

Eine Fabrik verfügt über mehrere Bereiche, wobei jeder Bereich Computer enthält, die miteinander kommunizieren müssen. Computer aus anderen Bereichen der Fabrik dürfen jedoch nicht mit diesen kommunizieren.

Client Rolle Thema/Themenfilter
Area1_Machine1 Publisher areas/area1/machines/machine1
Area1_Machine2 Subscriber areas/area1/machines/#
Area2_Machine1 Publisher areas/area2/machines/machine1
Area2_Machine2 Subscriber areas/area2/machines/#

Konfiguration

  • Erstellen Sie eine Clientressource für jeden Computer.
  • Erstellen Sie eine Clientgruppe für die Computer jedes Fabrikbereichs.
  • Erstellen Sie einen Themenbereich für jeden Bereich, der die Themen darstellt, über die die Computer des Bereichs kommunizieren.
  • Erstellen Sie zwei Berechtigungsbindungen für die Clientgruppe jedes Bereichs, um den Themenbereich des entsprechenden Bereichs zu veröffentlichen und zu abonnieren.
Client Clientgruppe Berechtigungsbindung Themenbereich
Area1_Machine1 Area1Machines Area1-Pub Area1Messages, Themenvorlage: areas/area1/machines/ #
Area1_Machine2 Area1Machines Area1-Sub Area1Messages, Themenvorlage: areas/area1/machines/ #
Area2_Machine1 Area2Machines Area2-Pub Area2Messages, Themenvorlage: areas/area2/machines/ #
Area2_Machine2 Area2Machines Area2-Sub Area2Messages, Themenvorlage: areas/area2/machines/ #

Beispiel 2:

Nehmen wir eine zusätzliche Anforderung für das Beispiel oben an: Jeder Bereich verfügt über Verwaltungsclients zusammen mit den Computern, und die Computer dürfen in dem Fall keinen Zugriff für Veröffentlichungen besitzen, dass einer von ihnen kompromittiert wird. Andererseits benötigen die Verwaltungsclients Veröffentlichungszugriff, um Befehle an die Computer zu senden und Zugriff zu abonnieren, um Telemetriedaten von den Computern zu empfangen.

Client Rolle Thema/Themenfilter
Area1_Machine1 Publisher areas/area1/machines/machine1
Subscriber areas/area1/mgmt/ #
Area1_Mgmt1 Publisher areas/area1/mgmt/machine1
Subscriber areas/area1/machines/#
Area2_Machine1 Publisher areas/area2/machines/machine1
Subscriber areas/area2/mgmt/#
Area2_ Mgmt1 Publisher areas/area2/mgmt/machine1
Subscriber areas/area2/machines/#

Konfiguration:

  • Erstellen Sie Clientressourcen für jeden Computer und Verwaltungsclient.
  • Erstellen Sie zwei Clientgruppen pro Bereich: eine für den Verwaltungsclient und eine für die Computer.
  • Erstellen Sie zwei Themenbereiche für jeden Bereich: einen, der Telemetriethemen darstellt, und einen anderen, der Befehlsthemen darstellt.
  • Erstellen Sie zwei Berechtigungsbindungen für die Verwaltungsclients jedes Bereichs, um im Befehlsthemenbereich zu veröffentlichen und den Telemetriethemabereich zu abonnieren.
  • Erstellen Sie zwei Berechtigungsbindungen für die Computer jedes Bereichs, um den Befehlsthemenbereich zu abonnieren und im Telemetriethemabereich zu veröffentlichen.
Client Clientgruppe Berechtigungsbindung Thema/Themenfilter
Area1_Machine1 Area1Machines Area1Machines-Pub Area1Telemetry, Themenvorlage: areas/area1/machines/#
Area1Machines-Sub Area1Commands, Themenvorlage: areas/area1/mgmt/#
Area1_MgmtClient1 Area1Mgmt Area1Mgmt-Pub Area1Commands, Themenvorlage: areas/area1/mgmt/#
Area1Mgmt-Sub Area1Telemetry, Themenvorlage: areas/area1/machines/#
Area2_Machine1 Area2Machines Area2Machines-Pub Area2Telemetry, Themenvorlage: areas/area2/machines/#
Area2Machines-Sub Area2Commands, Themenvorlage: areas/area2/mgmt/#
Area2_ MgmtClient1 Area2Mgmt Area2Mgmt-Pub Area2Commands, Themenvorlage: areas/area2/mgmt/#
Area2Mgmt-Sub Area2Telemetry, Themenvorlage: areas/area2/machines/#

Genau abgestimmte Zugriffssteuerung

Durch präzise Zugriffssteuerung können Sie die Autorisierung jedes Clients innerhalb einer Clientgruppe steuern, um ein eigenes Thema zu veröffentlichen oder zu abonnieren. Diese differenzierte Zugriffssteuerung wird durch die Verwendung von Variablen in Themenvorlagen erreicht.

Auch wenn eine Clientgruppe Zugriff auf einen bestimmten Themenbereich mit all seinen Themenvorlagen besitzen kann, können Sie mithilfe von Variablen innerhalb der Themenvorlagen die Berechtigung jedes Clients innerhalb dieser Clientgruppe steuern, sein eigenes Thema zu veröffentlichen oder zu abonnieren. Wenn die Clientgruppe „machines“ beispielsweise zwei Clients enthält: „machine1“ und „machine2“. Mithilfe von Variablen können Sie nur machine1 erlauben, die Telemetriedaten nur für das MQTT-Thema „machines/machine1/telemetry“ zu veröffentlichen und „machine2“ erlauben, Nachrichten im MQTT-Thema „machines/machine2/telemetry“ zu veröffentlichen.

Die Variablen stellen entweder Clientauthentifizierungsnamen oder Clientattribute dar. Während der Kommunikation mit MQTT Vermittler ersetzte jeder Client die Variable im MQTT-Thema durch einen ersetzten Wert. Beispielsweise wird die Variable „${client.authenticationName}“ durch den Authentifizierungsnamen der einzelnen Clients ersetzt: machine1, machine2 usw. MQTT Vermittler lässt den Zugriff nur auf die Clients zu, die einen ersetzten Wert aufweisen, der entweder ihrem Authentifizierungsnamen oder dem Wert des angegebenen Attributs entspricht.

Sehen Sie sich beispielsweise die folgende Konfiguration an:

  • Clientgruppe: Computer
  • Themenbereich: MachinesTelemetry
    • Themenvorlage „machines/${client.authenticationName}/telemetry“.
  • Berechtigungsbindung: Clientgruppe: Computer; Themenbereich: machinesTelemetry; Berechtigung: Herausgeber

Bei dieser Konfiguration kann nur der Client mit dem Clientauthentifizierungsnamen „machine1“ im Thema „machines/machine1/telemetry“ veröffentlichen, und nur der Computer mit dem Clientauthentifizierungsnamen „machine 2“ kann im Thema „machines/machine2/telemetry“ veröffentlichen usw. Dementsprechend kann machine2 keine falschen Informationen im Auftrag von machine1 veröffentlichen, obwohl er Zugriff auf denselben Themenbereich besitzt (und umgekehrt).

Diagram of the granular access control example.

Nächste Schritte:

Weitere Informationen zur Autorisierung und Authentifizierung: