Управление доступом для клиентов MQTT

Управление доступом позволяет управлять авторизацией клиентов для публикации или подписки на разделы с помощью модели управления доступом на основе ролей. Учитывая огромный масштаб сред Интернета вещей, назначение разрешений для каждого клиента для каждого раздела невероятно емко. функция брокера MQTT Сетка событий Azure решает эту масштабную задачу путем группировки клиентов и тем в группы клиентов и пробелы в разделах.

Основными компонентами модели управления доступом являются:

Клиент представляет устройство или приложение, которое должно публиковать и/или подписываться на разделы MQTT.

Группа клиентов — это набор клиентов, которым требуется тот же доступ к публикации и /или подписке на тот же набор разделов MQTT. Клиентская группа представляет субъект в модели RBAC.

Пространство тем представляет несколько тем с помощью набора шаблонов тем. Шаблоны разделов — это расширение фильтров MQTT, поддерживающих переменные, а также дикие элементы MQTT карта. Каждое пространство разделов представляет темы, которые должны использовать один и тот же набор клиентов для обмена данными. Пространство тем представляет ресурс в модели RBAC.

Привязка разрешений предоставляет доступ к определенной клиентской группе для публикации или подписки на разделы, представленные определенным пространством тем. Привязка разрешений представляет роль в модели RBAC.

Diagram of the access control model.

Примеры:

В следующих примерах подробно описывается настройка модели управления доступом на основе следующих требований.

Пример 1:

Фабрика имеет несколько областей с каждой областью, включая компьютеры, которые должны взаимодействовать друг с другом. Однако компьютеры из других областей фабрики не могут взаимодействовать с ними.

Клиент Роль Фильтр разделов и разделов
Area1_Machine1 Издатель области/область1/компьютеры/machine1
Area1_Machine2 Подписчик области/области1/компьютеры/ #
Area2_Machine1 Издатель area/area2/machines/machine1
Area2_Machine2 Подписчик area/area2/machines/ #

Настройка

  • Создайте клиентский ресурс для каждого компьютера.
  • Создайте группу клиентов для каждого компьютера фабрики.
  • Создайте пространство тем для каждой области, представляющей темы, которые компьютеры области взаимодействуют.
  • Создайте две привязки разрешений для каждой клиентской группы, чтобы опубликовать и подписаться на соответствующее пространство тем области.
Клиент Группа клиентов Привязка разрешений Пространство разделов
Area1_Machine1 Area1Machines Область1-Паб Area1Messages -Topic Template: area/area1/machines/ #
Area1_Machine2 Area1Machines Area1-Sub Area1Messages -Topic Template: area/area1/machines/ #
Area2_Machine1 Area2Machines Область2-Паб Area2Messages -Topic Template: area/area2/machines/ #
Area2_Machine2 Area2Machines Область2-sub Area2Messages -Topic Template: area/area2/machines/ #

Пример 2:

Предположим, что для предыдущего примера требуется дополнительное требование: у каждой области есть клиенты управления вместе с компьютерами, и компьютеры не должны иметь доступа к публикации в случае, если любой из них скомпрометирован. С другой стороны, клиентам управления нужен доступ к публикации для отправки команд на компьютеры и подписки на получение данных телеметрии с компьютеров.

Клиент Роль Фильтр разделов и разделов
Area1_Machine1 Издатель области/область1/компьютеры/machine1
Подписчик area/area1/mgmt/ #
Area1_Mgmt1 Издатель area/area1/mgmt/machine1
Подписчик области/области1/компьютеры/ #
Area2_Machine1 Издатель area/area2/machines/machine1
Подписчик area/area2/mgmt/ #
Area2_ Mgmt1 Издатель area/area2/mgmt/machine1
Подписчик area/area2/machines/ #

виртуальной сети:

  • Создайте клиентские ресурсы для каждого компьютера и клиента управления.
  • Создайте две группы клиентов для каждой области: одну для клиента управления и другую для компьютеров.
  • Создайте две темы для каждой области: одну, представляющую разделы телеметрии и другую, представляющую разделы команд.
  • Создайте две привязки разрешений для клиентов управления каждой области для публикации в командном пространстве раздела и подписки на пространство тем телеметрии.
  • Создайте две привязки разрешений для компьютеров каждой области, чтобы подписаться на область разделов команд и опубликовать в пространстве тем телеметрии.
Клиент Группа клиентов Привязка разрешений Фильтр разделов и разделов
Area1_Machine1 Area1Machines Area1Machines-Pub Area1Telemetry -Topic Template: area/area1/machines/ #
Area1Machines-Sub Area1Commands -Topic Template: area/area1/mgmt/ #
Area1_MgmtClient1 Area1Mgmt Область1Mgmt-Pub Area1Commands -Topic Template: area/area1/mgmt/ #
Area1Mgmt-Sub Area1Telemetry -Topic Template: area/area1/machines/ #
Area2_Machine1 Area2Machines Area2Machines-Pub Area2Telemetry -Topic Template: area/area2/machines/ #
Area2Machines-Sub Area2Commands -Topic Template: area/area2/mgmt/ #
Area2_ MgmtClient1 Area2Mgmt Area2Mgmt-Pub Area2Commands -Topic Template: area/area2/mgmt/ #
Area2Mgmt-Sub Area2Telemetry -Topic Template: area/area2/machines/ #

Детальный контроль доступа

Детализированный контроль доступа позволяет управлять авторизацией каждого клиента в группе клиентов для публикации или подписки на свой собственный раздел. Это детализированное управление доступом достигается с помощью переменных в шаблонах разделов.

Несмотря на то, что группа клиентов может иметь доступ к определенному пространству тем со всеми шаблонами разделов, переменные в шаблонах тем позволяют управлять авторизацией каждого клиента в этой группе клиентов для публикации или подписки на свой собственный раздел. Например, если группа клиентов "компьютеры" включает два клиента: machine1 и machine2. С помощью переменных можно разрешить публиковать данные телеметрии только в разделе MQTT "компьютеры/компьютер1/телеметрия" и "machine2" для публикации сообщений в разделе MQTT "компьютеры/компьютер2/телеметрия".

Переменные представляют имена проверки подлинности клиента или атрибуты клиента. При взаимодействии с брокером MQTT каждый клиент заменит переменную в разделе MQTT замененным значением. Например, переменная ${client.authenticationName} будет заменена именем проверки подлинности каждого клиента: machine1, machine2 и т. д. Брокер MQTT будет разрешать доступ только к клиентам, имеющим заменяемое значение, соответствующее имени проверки подлинности или значению указанного атрибута.

Например, рассмотрим следующую конфигурацию:

  • Группа клиентов: компьютеры
  • Пространство тем: MachinesTelemetry
    • Шаблон раздела "machines/${client.authenticationName}/telemetry".
  • Привязка разрешений: группа клиентов: компьютеры; пространство тем: machinesTelemetry; Разрешение: издатель

В этой конфигурации только клиент с именем проверки подлинности клиента "machine1" может публиковаться в разделе "компьютеры/компьютер1/телеметрия", и только компьютер с именем проверки подлинности клиента "machine 2" может публиковаться в разделе "machine/machine2/telemetry" и т. д. Соответственно, machine2 не может публиковать ложные сведения от имени компьютера1, несмотря на то, что он имеет доступ к одному и тому же пространству тем, и наоборот.

Diagram of the granular access control example.

Дальнейшие действия

Дополнительные сведения об авторизации и проверке подлинности: