Toegangsbeheer voor MQTT-clients

Met toegangsbeheer kunt u de autorisatie van clients beheren voor het publiceren of abonneren op onderwerpen, met behulp van een op rollen gebaseerd toegangsbeheermodel. Gezien de enorme schaal van IoT-omgevingen, is het toewijzen van machtigingen voor elke client aan elk onderwerp ongelooflijk tijdrovend. Met de MQTT-brokerfunctie van Azure Event Grid wordt deze schaalvraag aangepakt door clients en onderwerpen te groeperen in clientgroepen en onderwerpruimten.

De belangrijkste onderdelen van het toegangsbeheermodel zijn:

Een client vertegenwoordigt het apparaat of de toepassing die moet worden gepubliceerd en/of u moet abonneren op MQTT-onderwerpen.

Een clientgroep is een set clients die dezelfde toegang nodig hebben voor het publiceren en/of abonneren op dezelfde set MQTT-onderwerpen. De clientgroep vertegenwoordigt de principal in het RBAC-model.

Een onderwerpruimte vertegenwoordigt meerdere onderwerpen via een set onderwerpsjablonen. Onderwerpsjablonen zijn een uitbreiding van MQTT-filters die ondersteuning bieden voor variabelen, samen met de MQTT-jokertekens. Elke onderwerpruimte vertegenwoordigt de onderwerpen die dezelfde set clients moeten gebruiken om te communiceren. De onderwerpruimte vertegenwoordigt de resource in het RBAC-model.

Een machtigingsbinding verleent toegang tot een specifieke clientgroep om de onderwerpen te publiceren of te abonneren die worden vertegenwoordigd door een specifieke onderwerpruimte. De machtigingsbinding vertegenwoordigt de rol in het RBAC-model.

Diagram of the access control model.

Voorbeelden:

In de volgende voorbeelden wordt beschreven hoe u het toegangsbeheermodel configureert op basis van de volgende vereisten.

Voorbeeld 1:

Een fabriek heeft meerdere gebieden met elk gebied, inclusief machines die met elkaar moeten communiceren. Machines uit andere gebieden van de fabriek mogen er echter niet mee communiceren.

Client - Rol Onderwerp/onderwerpfilter
Area1_Machine1 Uitgever gebieden/gebied1/machines/machine1
Area1_Machine2 Abonnee gebieden/gebied1/machines/ #
Area2_Machine1 Uitgever gebieden/gebied2/machines/machine1
Area2_Machine2 Abonnee gebieden/gebied2/machines/ #

Configuratie

  • Maak een clientresource voor elke computer.
  • Maak een clientgroep voor de machines van elk fabrieksgebied.
  • Maak een onderwerpruimte voor elk gebied dat de onderwerpen vertegenwoordigt die de machines van het gebied doorgeven.
  • Maak twee machtigingsbindingen voor de clientgroep van elk gebied om de bijbehorende onderwerpruimte te publiceren en te abonneren.
Client Clientgroep Machtigingsbinding Onderwerpruimte
Area1_Machine1 Area1Machines Gebied1-Pub Area1Messages -Onderwerpsjabloon: gebieden/gebied1/machines/ #
Area1_Machine2 Area1Machines Gebied1-sub Area1Messages -Onderwerpsjabloon: gebieden/gebied1/machines/ #
Area2_Machine1 Area2Machines Gebied2-Pub Area2Messages -Onderwerpsjabloon: gebieden/gebied2/machines/ #
Area2_Machine2 Area2Machines Area2-Sub Area2Messages -Onderwerpsjabloon: gebieden/gebied2/machines/ #

Voorbeeld 2:

Laten we uitgaan van een extra vereiste voor het vorige voorbeeld: elk gebied heeft beheerclients samen met de machines en de machines mogen geen toegang hebben om te publiceren voor het geval een van deze wordt gecompromitteerd. Aan de andere kant moeten de beheerclients toegang publiceren om opdrachten naar de computers te verzenden en toegang te abonneren om telemetrie van de machines te ontvangen.

Client - Rol Onderwerp/onderwerpfilter
Area1_Machine1 Uitgever gebieden/gebied1/machines/machine1
Abonnee gebieden/gebied1/mgmt/ #
Area1_Mgmt1 Uitgever gebieden/gebied1/mgmt/machine1
Abonnee gebieden/gebied1/machines/ #
Area2_Machine1 Uitgever gebieden/gebied2/machines/machine1
Abonnee gebieden/gebied2/mgmt/ #
Area2_ Mgmt1 Uitgever gebieden/gebied2/mgmt/machine1
Abonnee gebieden/gebied2/machines/ #

Configuration:

  • Maak clientbronnen voor elke machine en beheerclient.
  • Maak twee clientgroepen per gebied: één voor de beheerclient en een voor de machines.
  • Maak twee onderwerpruimten voor elk gebied: één voor telemetrieonderwerpen en een andere voor opdrachtenonderwerpen.
  • Maak twee machtigingsbindingen voor de beheerclients van elk gebied om naar de opdrachten onderwerpruimte te publiceren en u te abonneren op de ruimte voor telemetrieonderwerp.
  • Maak twee machtigingsbindingen voor de computers van elk gebied om u te abonneren op de opdrachten Onderwerpruimte en te publiceren naar de ruimte voor telemetrieonderwerp.
Client Clientgroep Machtigingsbinding Onderwerp/onderwerpfilter
Area1_Machine1 Area1Machines Area1Machines-Pub Area1Telemetry -Onderwerpsjabloon: gebieden/gebied1/machines/ #
Area1Machines-Sub Area1Commands -Onderwerpsjabloon: gebieden/gebied1/mgmt/ #
Area1_MgmtClient1 Area1Mgmt Area1Mgmt-Pub Area1Commands -Onderwerpsjabloon: gebieden/gebied1/mgmt/ #
Area1Mgmt-Sub Area1Telemetry -Onderwerpsjabloon: gebieden/gebied1/machines/ #
Area2_Machine1 Area2Machines Area2Machines-Pub Area2Telemetry -Onderwerpsjabloon: gebieden/gebied2/machines/ #
Area2Machines-Sub Area2Commands -Onderwerpsjabloon: gebieden/gebied2/mgmt/ #
Area2_ MgmtClient1 Area2Mgmt Area2Mgmt-Pub Area2Commands -Onderwerpsjabloon: gebieden/gebied2/mgmt/ #
Area2Mgmt-Sub Area2Telemetry -Onderwerpsjabloon: gebieden/gebied2/machines/ #

Gedetailleerd toegangsbeheer

Met gedetailleerd toegangsbeheer kunt u de autorisatie van elke client in een clientgroep beheren om een eigen onderwerp te publiceren of erop te abonneren. Dit gedetailleerde toegangsbeheer wordt bereikt met behulp van variabelen in onderwerpsjablonen.

Hoewel een clientgroep toegang heeft tot een bepaalde onderwerpruimte met alle onderwerpsjablonen, kunt u met variabelen in onderwerpsjablonen de autorisatie van elke client binnen die clientgroep beheren om een eigen onderwerp te publiceren of erop te abonneren. Als de clientgroep 'machines' bijvoorbeeld twee clients bevat: 'machine1' en 'machine2'. Met behulp van variabelen kunt u toestaan dat alleen machine1 de telemetrie publiceert op het MQTT-onderwerp 'machines/machine1/telemetrie' en 'machine2' om berichten te publiceren op MQTT-onderwerp 'machines/machine2/telemetrie'.

De variabelen vertegenwoordigen clientverificatienamen of clientkenmerken. Tijdens de communicatie met MQTT Broker vervangt elke client de variabele in het MQTT-onderwerp door een vervangende waarde. De variabele ${client.authenticationName} wordt bijvoorbeeld vervangen door de verificatienaam van elke client: machine1, machine2, enzovoort. MQTT-broker biedt alleen toegang tot de clients met een vervangende waarde die overeenkomt met de verificatienaam of de waarde van het opgegeven kenmerk.

Denk bijvoorbeeld aan de volgende configuratie:

  • Clientgroep: Machines
  • Onderwerpruimte: MachinesTelemetry
    • Onderwerpsjabloon "machines/${client.authenticationName}/telemetry".
  • Machtigingsbinding: clientgroep: machines; onderwerpruimte: machinesTelemetry; Machtiging: uitgever

Met deze configuratie kan alleen de client met clientverificatienaam 'machine1' publiceren op onderwerp 'machines/machine1/telemetrie', en alleen de computer met clientverificatienaam 'machine 2' kan publiceren op onderwerp 'machines/machine2/telemetrie', enzovoort. Daarom kan machine2 geen valse informatie publiceren namens machine1, ook al heeft deze toegang tot dezelfde onderwerpruimte en omgekeerd.

Diagram of the granular access control example.

Volgende stappen:

Meer informatie over autorisatie en verificatie: