Управление доступом для клиентов MQTT
Управление доступом позволяет управлять авторизацией клиентов для публикации или подписки на разделы с помощью модели управления доступом на основе ролей. Учитывая огромный масштаб сред Интернета вещей, назначение разрешений для каждого клиента для каждого раздела невероятно емко. функция брокера MQTT Сетка событий Azure решает эту масштабную задачу путем группировки клиентов и тем в группы клиентов и пробелы в разделах.
Основными компонентами модели управления доступом являются:
Клиент представляет устройство или приложение, которое должно публиковать и/или подписываться на разделы MQTT.
Группа клиентов — это набор клиентов, которым требуется тот же доступ к публикации и /или подписке на тот же набор разделов MQTT. Клиентская группа представляет субъект в модели RBAC.
Пространство тем представляет несколько тем с помощью набора шаблонов тем. Шаблоны разделов — это расширение фильтров MQTT, поддерживающих переменные, а также дикие элементы MQTT карта. Каждое пространство разделов представляет темы, которые должны использовать один и тот же набор клиентов для обмена данными. Пространство тем представляет ресурс в модели RBAC.
Привязка разрешений предоставляет доступ к определенной клиентской группе для публикации или подписки на разделы, представленные определенным пространством тем. Привязка разрешений представляет роль в модели RBAC.
Примеры:
В следующих примерах подробно описывается настройка модели управления доступом на основе следующих требований.
Пример 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, несмотря на то, что он имеет доступ к одному и тому же пространству тем, и наоборот.
Дальнейшие действия
Дополнительные сведения об авторизации и проверке подлинности: