Freigeben über


Zugriffssteuerung für MQTT-Clients

Mithilfe der 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 die Zuweisung von Berechtigungen für jeden Client zu jedem Thema unglaublich mühsam. Das MQTT-Brokerfeature von Azure Event Grid behandelt diese Skalierungsaufforderung durch Gruppieren von Clients und Themen in Clientgruppen und Themenbereichen.

Die Hauptkomponenten des Zugriffssteuerungsmodells sind:

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

Eine Clientgruppe ist eine Gruppe von Clients, die denselben Zugriff benötigen, um denselben Satz von MQTT-Themen zu veröffentlichen und/oder zu abonnieren. Die Kundengruppe 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 unterstützen, zusammen mit den MQTT-Wildcards. Jeder Themenbereich stellt die Themen dar, die dieselbe Gruppe von Clients für die Kommunikation verwenden müssen. Der Themenbereich stellt die Ressource im RBAC-Modell dar.

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

Diagramm des Zugriffssteuerungsmodells.

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 Maschinen umfasst, die miteinander kommunizieren müssen. Maschinen aus anderen Fabrikbereichen dürfen jedoch nicht mit ihnen kommunizieren.

Kunde Rolle Thema-/Themenfilter
Area1_Machine1 Herausgeber areas/area1/machines/machine1
Area1_Machine2 Abonnent areas/area1/machines/#
Area2_Machine1 Herausgeber areas/area2/machines/machine1
Area2_Machine2 Abonnent Bereiche/Fläche2/Maschinen/ #

Konfiguration

  • Erstellen Sie eine Clientressource für jeden Computer.
  • Erstellen Sie eine Clientgruppe für die Computer der einzelnen Werksbereiche.
  • 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.
Kunde Clientgruppe Berechtigungsbindung Themenbereich
Area1_Machine1 Area1Machines Area1-Pub Area1Messages -Themenvorlage: Bereiche/Bereich1/Maschinen/#
Area1_Machine2 Area1Machines Area1-Sub Area1Messages -Themenvorlage: bereiche/area1/maschinen/#
Area2_Machine1 Area2Machines Area2-Pub Area2Messages -Thema Vorlage: Bereiche/Area2/Maschinen/#
Area2_Machine2 Area2Machines Area2-Sub Area2Messages - Thema Vorlage: Bereich/Bereich2/Maschinen/#

Beispiel 2:

Nehmen wir eine zusätzliche Anforderung für das vorherige Beispiel an: Jeder Bereich verfügt über Verwaltungsclients zusammen mit den Computern, und die Computer dürfen keinen Zugriff auf die Veröffentlichung haben, falls eine dieser Bereiche kompromittiert wird. Andererseits benötigen die Verwaltungsclients Veröffentlichungszugriff, um Befehle an die Maschinen zu senden, und Abonnementzugriff, um Telemetriedaten von den Maschinen zu empfangen.

Kunde Rolle Thema-/Themenfilter
Area1_Machine1 Herausgeber areas/area1/machines/machine1
Abonnent Bereiche/Bereich1/mgmt/#
Area1_Mgmt1 Herausgeber areas/area1/mgmt/machine1
Abonnent areas/area1/machines/#
Area2_Machine1 Herausgeber areas/area2/machines/machine1
Abonnent Bereiche/Bereich2/mgmt/#
Area2_ Mgmt1 Herausgeber areas/area2/mgmt/machine1
Abonnent Bereiche/Fläche2/Maschinen/ #

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 Themenräume für jeden Bereich: eine, die Telemetriethemen darstellt, und eine andere, die 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.
Kunde 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 -Topic Template: Bereiche/area2/mgmt/#
Area2Mgmt-Sub Area2Telemetry, Themenvorlage: areas/area2/machines/#

Granulare Zugriffssteuerung

Mit der granularen Zugriffssteuerung können Sie die Autorisierung jedes Clients innerhalb einer Gruppe von Clients kontrollieren, um ihre eigenen Themen zu veröffentlichen oder zu abonnieren. Diese differenzierte Zugriffssteuerung wird durch die Verwendung von Variablen in Themenvorlagen erreicht.

Obwohl eine Clientgruppe Zugriff auf einen bestimmten Themenbereich mit allen Themenvorlagen haben kann, können Sie mithilfe von Variablen innerhalb von Themenvorlagen die Autorisierung jedes Clients innerhalb dieser Clientgruppe steuern, um ein eigenes Thema zu veröffentlichen oder zu abonnieren. Wenn beispielsweise die Clientgruppe "Maschinen" zwei Clients umfasst: "maschine1" und "maschine2". Mithilfe von Variablen können Sie nur Maschine1 erlauben, ihre Telemetrie ausschließlich im MQTT-Thema "machines/machine1/telemetry" zu veröffentlichen, und "machine2" darf Nachrichten ausschließlich im MQTT-Thema "machines/machine2/telemetry" veröffentlichen.

Die Variablen stellen entweder Clientauthentifizierungsnamen oder Clientattribute dar. Während der Kommunikation mit MQTT-Broker würde jeder Kunde die Variable im MQTT-Thema durch einen ersetzten Wert ersetzen. Beispielsweise würde die Variable "${client.authenticationName}" durch den Authentifizierungsnamen jedes Clients ersetzt: Computer1, Computer2 usw. MQTT-Broker würde den Zugriff nur auf die Clients zulassen, die einen ersetzten Wert aufweisen, der entweder ihrem Authentifizierungsnamen oder dem Wert des angegebenen Attributs entspricht.

Betrachten Sie beispielsweise die folgende Konfiguration:

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

Mit dieser Konfiguration kann nur der Client mit dem Clientauthentifizierungsnamen "machine1" im Thema "computer/machine1/telemetry" veröffentlicht werden, und nur der Computer mit dem Clientauthentifizierungsnamen "Computer 2" kann im Thema "computer/machine2/telemetry" veröffentlicht werden usw. Dementsprechend kann Machine2 keine falschen Informationen im Auftrag von Machine1 veröffentlichen, obwohl sie Zugriff auf denselben Themenbereich hat und umgekehrt.

Diagramm des granularen Zugriffssteuerungsbeispiels.

Nächste Schritte:

Weitere Informationen zur Autorisierung und Authentifizierung: