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.

Diagram of the access control model.

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.

Diagram of the granular access control example.

Następne kroki:

Dowiedz się więcej o autoryzacji i uwierzytelnianiu: