Dela via


Åtkomstkontroll för MQTT-klienter

Med åtkomstkontroll kan du hantera auktoriseringen av klienter för att publicera eller prenumerera på ämnen med hjälp av en rollbaserad åtkomstkontrollmodell. Med tanke på den enorma omfattningen av IoT-miljöer är det otroligt tråkigt att tilldela behörighet för varje klient till varje ämne. Azure Event Grids MQTT-koordinatorfunktion hanterar den här skalningsutmaningen genom att gruppera klienter och ämnen i klientgrupper och ämnesutrymmen.

Huvudkomponenterna i åtkomstkontrollmodellen är:

En klient representerar den enhet eller det program som behöver publicera och/eller prenumerera på MQTT-ämnen.

En klientgrupp är en uppsättning klienter som behöver samma åtkomst för att publicera och/eller prenumerera på samma uppsättning MQTT-ämnen. Klientgruppen representerar huvudnamnet i RBAC-modellen.

Ett ämnesutrymme representerar flera ämnen via en uppsättning ämnesmallar. Ämnesmallar är ett tillägg av MQTT-filter som stöder variabler, tillsammans med MQTT-jokertecken. Varje ämnesutrymme representerar de ämnen som samma uppsättning klienter behöver använda för att kommunicera. Ämnesutrymmet representerar resursen i RBAC-modellen.

En behörighetsbindning ger åtkomst till en specifik klientgrupp för att publicera eller prenumerera på ämnen som representeras av ett visst ämnesutrymme. Behörighetsbindningen representerar rollen i RBAC-modellen.

Diagram of the access control model.

Exempel:

I följande exempel beskrivs hur du konfigurerar åtkomstkontrollmodellen baserat på följande krav.

Exempel 1:

En fabrik har flera områden med varje område, inklusive datorer som behöver kommunicera med varandra. Datorer från andra delar av fabriken får dock inte kommunicera med dem.

Client Roll Ämnes-/ämnesfilter
Area1_Machine1 Publisher area1/machines/machine1
Area1_Machine2 Prenumerant area1/machines/ #
Area2_Machine1 Publisher area2/machines/machine1
Area2_Machine2 Prenumerant area2/machines/ #

Konfiguration

  • Skapa en klientresurs för varje dator.
  • Skapa en klientgrupp för varje fabriksområdes datorer.
  • Skapa ett ämnesutrymme för varje område som representerar de ämnen som områdets datorer kommunicerar över.
  • Skapa två behörighetsbindningar för varje områdes klientgrupp för att publicera och prenumerera på motsvarande områdes ämnesutrymme.
Client Klientgrupp Behörighetsbindning Ämnesutrymme
Area1_Machine1 Area1Machines Area1-Pub Area1Messages -Topic Template: areas/area1/machines/ #
Area1_Machine2 Area1Machines Area1-Sub Area1Messages -Topic Template: areas/area1/machines/ #
Area2_Machine1 Area2Machines Area2-Pub Area2Messages -Topic Template: areas/area2/machines/ #
Area2_Machine2 Area2Machines Area2-Sub Area2Messages -Topic Template: areas/area2/machines/ #

Exempel 2:

Vi antar ett extra krav för föregående exempel: varje område har hanteringsklienter tillsammans med datorerna och datorerna får inte ha åtkomst till publicering om någon av dem skulle komprometteras. Å andra sidan behöver hanteringsklienterna publiceringsåtkomst för att skicka kommandon till datorerna och prenumerera på åtkomst för att ta emot telemetri från datorerna.

Client Roll Ämnes-/ämnesfilter
Area1_Machine1 Publisher area1/machines/machine1
Prenumerant area1/mgmt/ #
Area1_Mgmt1 Publisher area1/mgmt/machine1
Prenumerant area1/machines/ #
Area2_Machine1 Publisher area2/machines/machine1
Prenumerant area2/mgmt/ #
Area2_ Mgmt1 Publisher area2/mgmt/machine1
Prenumerant area2/machines/ #

Konfiguration:

  • Skapa klientresurser för varje dator och hanteringsklient.
  • Skapa två klientgrupper per område: en för hanteringsklienten och en annan för datorerna.
  • Skapa två ämnesutrymmen för varje område: ett som representerar telemetriämnen och ett annat som representerar kommandoämnen.
  • Skapa två behörighetsbindningar för varje områdes hanteringsklienter för att publicera till kommandona Ämnesutrymme och prenumerera på telemetriämnesutrymmet.
  • Skapa två behörighetsbindningar för varje områdes datorer för att prenumerera på kommandona Ämnesutrymme och publicera till telemetriämnesutrymmet.
Client Klientgrupp Behörighetsbindning Ämnes-/ämnesfilter
Area1_Machine1 Area1Machines Area1Machines-Pub Area1Telemetry -Topic Template: areas/area1/machines/ #
Area1Machines-Sub Area1Commands -Topic Template: areas/area1/mgmt/ #
Area1_MgmtClient1 Area1Mgmt Area1Mgmt-Pub Area1Commands -Topic Template: areas/area1/mgmt/ #
Area1Mgmt-Sub Area1Telemetry -Topic Template: areas/area1/machines/ #
Area2_Machine1 Area2Machines Area2Machines-Pub Area2Telemetry -Topic Template: areas/area2/machines/ #
Area2Machines-Sub Area2Commands -Topic Template: areas/area2/mgmt/ #
Area2_ MgmtClient1 Area2Mgmt Area2Mgmt-Pub Area2Commands -Topic Template: areas/area2/mgmt/ #
Area2Mgmt-Sub Area2Telemetry -Topic Template: areas/area2/machines/ #

Detaljerad åtkomstkontroll

Med detaljerad åtkomstkontroll kan du styra auktoriseringen för varje klient i en klientgrupp för att publicera eller prenumerera på ett eget ämne. Den här detaljerade åtkomstkontrollen uppnås med hjälp av variabler i ämnesmallar.

Även om en klientgrupp kan ha åtkomst till ett visst ämnesutrymme med alla dess ämnesmallar kan du med variabler i ämnesmallar styra auktoriseringen av varje klient i klientgruppen för att publicera eller prenumerera på ett eget ämne. Om klientgruppen "datorer" till exempel innehåller två klienter: "machine1" och "machine2". Med hjälp av variabler kan du endast tillåta att machine1 publicerar sin telemetri på MQTT-ämnet "machines/machine1/telemetry" och "machine2" för att publicera meddelanden i MQTT-ämnet "machines/machine2/telemetry".

Variablerna representerar antingen klientautentiseringsnamn eller klientattribut. Under kommunikationen med MQTT-asynkron meddelandekö ersätter varje klient variabeln i MQTT-ämnet med ett ersatt värde. Variabeln ${client.authenticationName} skulle till exempel ersättas med autentiseringsnamnet för varje klient: machine1, machine2 osv. MQTT-koordinatorn skulle endast tillåta åtkomst till klienter som har ett ersatt värde som matchar antingen deras autentiseringsnamn eller värdet för det angivna attributet.

Tänk till exempel på följande konfiguration:

  • Klientgrupp: Datorer
  • Ämnesutrymme: MachinesTelemetry
    • Ämnesmallen "machines/${client.authenticationName}/telemetri".
  • Behörighetsbindning: klientgrupp: datorer; topic space: machinesTelemetry; Behörighet: utgivare

Med den här konfigurationen kan endast klienten med klientautentiseringsnamnet "machine1" publicera på ämnet "machines/machine1/telemetry", och endast datorn med klientautentiseringsnamnet "machine 2" kan publicera i ämnet "datorer/maskin2/telemetri" och så vidare. Därför kan machine2 inte publicera falsk information på uppdrag av machine1, även om den har åtkomst till samma ämnesutrymme och vice versa.

Diagram of the granular access control example.

Nästa steg:

Läs mer om auktorisering och autentisering: