Kontrola dostępu dla klientów MQTT
Kontrola dostępu umożliwia zarządzanie autoryzacją klientów do publikowania lub subskrybowania tematów przy użyciu modelu kontroli dostępu opartego na rolach. Biorąc pod uwagę ogromną skalę środowisk IoT, przypisywanie uprawnień dla każdego klienta do każdego tematu jest niezwykle żmudne. Funkcja brokera MQTT usługi Azure Event Grid zajmuje się tym wyzwaniem skalowania dzięki grupowaniu klientów i tematów w grupach klientów i przestrzeniach tematów.
Główne składniki modelu kontroli dostępu to:
Klient reprezentuje urządzenie lub aplikację, która musi publikować i/lub subskrybować tematy MQTT.
Grupa klientów to zestaw klientów, którzy potrzebują tego samego dostępu do publikowania i/lub subskrybowania tego samego zestawu tematów MQTT. Grupa klienta reprezentuje podmiot zabezpieczeń w modelu RBAC.
Obszar tematu reprezentuje wiele tematów za pomocą zestawu szablonów tematów. Szablony tematów to rozszerzenie filtrów MQTT, które obsługują zmienne wraz z symbolami wieloznacznymi MQTT. Każde miejsce tematu reprezentuje tematy, których ten sam zestaw klientów musi używać do komunikowania się. Obszar tematu reprezentuje zasób w modelu RBAC.
Powiązanie uprawnień udziela dostępu do określonej grupy klientów w celu publikowania lub subskrybowania tematów reprezentowanych przez określoną przestrzeń tematu. Powiązanie uprawnień reprezentuje rolę w modelu RBAC.
Przykłady:
W poniższych przykładach szczegółowo opisano sposób konfigurowania modelu kontroli dostępu na podstawie następujących wymagań.
Przykład 1:
Fabryka ma wiele obszarów z każdym obszarem, w tym maszyny, które muszą komunikować się ze sobą. Jednak maszyny z innych obszarów fabryki nie mogą się z nimi komunikować.
Klient | Rola | Filtr tematu/tematu |
---|---|---|
Area1_Machine1 | Wydawca | obszary/obszar1/maszyny/maszyna1 |
Area1_Machine2 | Subskrybent | obszary/obszar1/maszyny/ # |
Area2_Machine1 | Wydawca | obszary/obszar2/maszyny/maszyna1 |
Area2_Machine2 | Subskrybent | obszary/obszar2/maszyny/ # |
Konfigurowanie
- Utwórz zasób klienta dla każdej maszyny.
- Utwórz grupę klientów dla maszyn każdego obszaru fabryki.
- Utwórz przestrzeń tematu dla każdego obszaru reprezentującego tematy, nad którymi komunikują się maszyny danego obszaru.
- Utwórz dwa powiązania uprawnień dla grupy klienta każdego obszaru w celu opublikowania i zasubskrybowania odpowiedniego obszaru tematu.
Klient | Grupa klientów | Powiązanie uprawnień | Obszar tematu |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1-Pub | Area1Messages —Szablon tematu: obszary/obszar1/maszyny/ # |
Area1_Machine2 | Area1Machines | Obszar1—podsieć | Area1Messages —Szablon tematu: obszary/obszar1/maszyny/ # |
Area2_Machine1 | Area2Machines | Area2-Pub | Area2Messages —Szablon tematu: obszary/obszar2/maszyny/ # |
Area2_Machine2 | Area2Machines | Obszar 2-podrzędny | Area2Messages —Szablon tematu: obszary/obszar2/maszyny/ # |
Przykład 2:
Załóżmy, że dodatkowe wymaganie dla poprzedniego przykładu: każdy obszar ma klientów zarządzania wraz z maszynami, a maszyny nie mogą mieć dostępu do publikowania w przypadku naruszenia zabezpieczeń któregokolwiek z nich. Z drugiej strony klienci zarządzania potrzebują dostępu do publikowania, aby wysyłać polecenia do maszyn i subskrybować dostęp do odbierania danych telemetrycznych z maszyn.
Klient | Rola | Filtr tematu/tematu |
---|---|---|
Area1_Machine1 | Wydawca | obszary/obszar1/maszyny/maszyna1 |
Subskrybent | obszary/obszar1/mgmt/ # | |
Area1_Mgmt1 | Wydawca | area1/mgmt/machine1 |
Subskrybent | obszary/obszar1/maszyny/ # | |
Area2_Machine1 | Wydawca | obszary/obszar2/maszyny/maszyna1 |
Subskrybent | obszary/obszar2/mgmt/ # | |
Area2_ Mgmt1 | Wydawca | area2/mgmt/machine1 |
Subskrybent | obszary/obszar2/maszyny/ # |
Konfiguracja:
- Utwórz zasoby klienta dla każdego komputera i klienta zarządzania.
- Utwórz dwie grupy klientów na obszar: jeden dla klienta zarządzania, a drugi dla maszyn.
- Utwórz dwa miejsca tematów dla każdego obszaru: jeden reprezentujący tematy telemetrii, a drugi reprezentujący tematy poleceń.
- Utwórz dwa powiązania uprawnień dla klientów zarządzania każdego obszaru w celu opublikowania w obszarze tematów poleceń i zasubskrybowania obszaru tematu telemetrii.
- Utwórz dwa powiązania uprawnień dla maszyn każdego obszaru, aby zasubskrybować polecenia Obszar tematu i opublikować je w przestrzeni tematu telemetrii.
Klient | Grupa klientów | Powiązanie uprawnień | Filtr tematu/tematu |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1Machines-Pub | Area1Telemetry —Szablon tematu: obszary/obszar1/maszyny/ # |
Area1Machines-Sub | Area1Commands -Topic Template: areas/area1/mgmt/ # | ||
Area1_MgmtClient1 | Area1Mgmt | Area1Mgmt-Pub | Area1Commands -Topic Template: areas/area1/mgmt/ # |
Area1Mgmt-Sub | Area1Telemetry —Szablon tematu: obszary/obszar1/maszyny/ # | ||
Area2_Machine1 | Area2Machines | Area2Machines-Pub | Area2Telemetry —Szablon tematu: obszary/obszar2/maszyny/ # |
Area2Machines-Sub | Area2Commands -Topic Template: areas/area2/mgmt/ # | ||
Area2_ MgmtClient1 | Area2Mgmt | Area2Mgmt-Pub | Area2Commands -Topic Template: areas/area2/mgmt/ # |
Area2Mgmt-Sub | Area2Telemetry —Szablon tematu: obszary/obszar2/maszyny/ # |
Szczegółowa kontrola dostępu
Szczegółowa kontrola dostępu umożliwia kontrolowanie autoryzacji każdego klienta w grupie klienta w celu publikowania lub subskrybowania własnego tematu. Ta szczegółowa kontrola dostępu jest osiągana przy użyciu zmiennych w szablonach tematów.
Mimo że grupa klientów może mieć dostęp do określonego obszaru tematu ze wszystkimi jego szablonami tematów, zmienne w szablonach tematów umożliwiają kontrolowanie autoryzacji każdego klienta w tej grupie klientów w celu publikowania lub subskrybowania własnego tematu. Jeśli na przykład grupa klientów "maszyny" zawiera dwóch klientów: "machine1" i "machine2". Za pomocą zmiennych można zezwolić tylko maszynie machine1 na publikowanie danych telemetrycznych tylko w temacie MQTT "machines/machine1/telemetry" i "machine2" do publikowania komunikatów w temacie MQTT "machines/machine2/telemetry".
Zmienne reprezentują nazwy uwierzytelniania klienta lub atrybuty klienta. Podczas komunikacji z brokerem MQTT każdy klient zastąpi zmienną w temacie MQTT wartością zastępczą. Na przykład zmienna ${client.authenticationName} zostanie zamieniona na nazwę uwierzytelniania każdego klienta: machine1, machine2 itp. Broker MQTT zezwoli na dostęp tylko do klientów, którzy mają zastąpioną wartość zgodną z ich nazwą uwierzytelniania lub wartością określonego atrybutu.
Rozważmy na przykład następującą konfigurację:
- Grupa klientów: Maszyny
- Obszar tematu: MachinesTelemetry
- Szablon tematu "machines/${client.authenticationName}/telemetria".
- Powiązanie uprawnień: grupa klientów: maszyny; przestrzeń tematu: machinesTelemetry; Uprawnienie: wydawca
W przypadku tej konfiguracji tylko klient o nazwie uwierzytelniania klienta "machine1" może publikować w temacie "machines/machine1/telemetry", a tylko maszyna o nazwie uwierzytelniania klienta "machine 2" może publikować w temacie "machines/machine2/telemetry" itd. W związku z tym maszyna Machine2 nie może publikować fałszywych informacji w imieniu maszyny1, mimo że ma dostęp do tego samego obszaru tematu i na odwrót.
Następne kroki:
Dowiedz się więcej o autoryzacji i uwierzytelnianiu: