Å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.
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.
Nästa steg:
Läs mer om auktorisering och autentisering: