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.
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).
Nächste Schritte:
Weitere Informationen zur Autorisierung und Authentifizierung: