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.
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.
Volgende stappen:
Meer informatie over autorisatie en verificatie: