Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управление доступом позволяет управлять авторизацией клиентов для публикации или подписки на разделы с помощью модели управления доступом на основе ролей. Учитывая огромный масштаб сред Интернета вещей, назначение разрешений для каждого клиента для каждого топика невероятно трудоемко. Функция брокера MQTT службы Azure Event Grid решает задачу масштабирования путем группировки клиентов и тем в группы клиентов и пространства тем.
Основными компонентами модели управления доступом являются:
Клиент представляет устройство или приложение, которое должно публиковать и/или подписываться на разделы MQTT.
Группа клиентов — это набор клиентов, которым требуется тот же доступ к публикации и /или подписке на тот же набор разделов MQTT. Клиентская группа представляет принципала в модели RBAC.
Пространство тем представляет несколько тем с помощью набора шаблонов тем. Шаблоны разделов — это расширение фильтров MQTT, поддерживающих переменные, а также подстановочные знаки MQTT. Каждое пространство разделов представляет темы, которые должны использовать один и тот же набор клиентов для обмена данными. Тематическое пространство отображает ресурс в модели RBAC.
Привязка разрешений предоставляет доступ к определенной клиентской группе для публикации или подписки на разделы, представленные определенным пространством тем. Привязка прав доступа представляет собой роль в модели RBAC (Управление доступом на основе ролей).
Примеры:
В следующих примерах подробно описывается настройка модели управления доступом на основе следующих требований.
Пример 1.
Фабрика имеет несколько областей, каждая из которых включает машины, которые должны взаимодействовать друг с другом. Однако компьютеры из других областей фабрики не могут взаимодействовать с ними.
| Client | Роль | Тема/Фильтр тем |
|---|---|---|
| Area1_Machine1 | Publisher | область/area1/машины/machine1 |
| Area1_Machine2 | Subscriber | области/области1/компьютеры/ # |
| Area2_Machine1 | Publisher | areas/area2/machines/machine1 |
| Area2_Machine2 | Subscriber | area/area2/machines/ # |
Конфигурация
- Создайте клиентский ресурс для каждого компьютера.
- Создайте группу клиентов для каждого компьютера фабрики.
- Создайте пространство тем для каждой области, представляющее темы, по которым взаимодействуют машины этой области.
- Создание двух привязок прав доступа для каждой клиентской группы, чтобы публиковать и подписываться на соответствующее пространство тем этой области.
| Client | Группа клиентов | Привязка разрешений | Пространство разделов |
|---|---|---|---|
| Area1_Machine1 | Area1Machines | Area1-Pub | Area1Messages -Topic Template: area/area1/machines/ # |
| Area1_Machine2 | Area1Machines | Область1-Подраздел | Area1Messages -Topic Template: area/area1/machines/ # |
| Area2_Machine1 | Area2Machines | Area2-Pub | Area2Messages -Topic Template: area/area2/machines/ # |
| Area2_Machine2 | Area2Machines | Area2-Sub | Area2Messages -Topic Template: area/area2/machines/ # |
Пример 2.
Предположим, что для предыдущего примера требуется дополнительное требование: у каждой области есть клиенты управления вместе с компьютерами, и компьютеры не должны иметь доступа к публикации в случае, если любой из них скомпрометирован. С другой стороны, клиентам управления нужен доступ для публикации, чтобы отправлять команды на устройства, и доступ для подписки, чтобы получать данные телеметрии с устройств.
| Client | Роль | Тема/Фильтр тем |
|---|---|---|
| Area1_Machine1 | Publisher | область/area1/машины/machine1 |
| Subscriber | area/area1/mgmt/ # | |
| Area1_Mgmt1 | Publisher | areas/area1/mgmt/machine1 |
| Subscriber | области/области1/компьютеры/ # | |
| Area2_Machine1 | Publisher | areas/area2/machines/machine1 |
| Subscriber | области/area2/mgmt/# | |
| Area2_ Mgmt1 | Publisher | areas/area2/mgmt/machine1 |
| Subscriber | area/area2/machines/ # |
Конфигурация:
- Создайте клиентские ресурсы для каждого компьютера и клиента управления.
- Создайте две группы клиентов для каждой области: одну для клиента управления и другую для компьютеров.
- Создайте две темы для каждой области: одну, представляющую разделы телеметрии и другую, представляющую разделы команд.
- Создайте две привязки разрешений для клиентов управления каждой области для публикации в командном пространстве раздела и подписки на пространство тем телеметрии.
- Создайте по две привязки разрешений для машин каждой области, чтобы подписываться на пространство тем команд и публиковать в пространство тем телеметрии.
| Client | Группа клиентов | Привязка разрешений | Тема/Фильтр тем |
|---|---|---|---|
| Area1_Machine1 | Area1Machines | Area1Machines-Pub | Шаблон темы Area1Telemetry: области/area1/machines/# |
| Area1Machines-Sub | Область1Команды -Тема шаблон: области/область1/mgmt/# | ||
| Area1_MgmtClient1 | Area1Mgmt | Area1Mgmt-Pub | КомандыОбласть1 -Тема Шаблон: области/область1/mgmt/# |
| Area1Mgmt-Sub | Шаблон темы Area1Telemetry: areas/area1/machines/# | ||
| Area2_Machine1 | Area2Machines | Area2Machines-Pub | Area2Telemetry -Шаблон Тема: области/area2/machines/# |
| Area2Machines-Sub | Шаблон Area2Commands -Topic: области/area2/mgmt/ # | ||
| Area2_ MgmtClient1 | Area2Mgmt | Area2Mgmt-Pub | Шаблон Area2Commands -Topic: области/area2/mgmt/ # |
| Area2Mgmt-Sub | Area2Telemetry - Шаблон темы: areas/area2/machines/# |
Гранулированный контроль доступа
Детализированный контроль доступа позволяет управлять авторизацией каждого клиента в группе клиентов для публикации или подписки на свой собственный раздел. Это детализированное управление доступом достигается с помощью переменных в шаблонах разделов.
Несмотря на то, что группа клиентов может иметь доступ к определенному пространству тем со всеми шаблонами разделов, переменные в шаблонах тем позволяют управлять авторизацией каждого клиента в этой группе клиентов для публикации или подписки на свой собственный раздел. Например, если группа клиентов "машины" включает два клиента: “machine1” и “machine2”. С помощью переменных можно разрешить устройству "machine1" публиковать свои телеметрические данные только на тему MQTT "machines/machine1/telemetry", а устройству "machine2" разрешить публиковать сообщения на тему MQTT "machines/machine2/telemetry".
Переменные представляют имена проверки подлинности клиента или атрибуты клиента. При взаимодействии с брокером MQTT каждый клиент заменит переменную в разделе MQTT замененным значением. Например, переменная ${client.authenticationName} будет заменена именем проверки подлинности каждого клиента: machine1, machine2 и т. д. Брокер MQTT будет разрешать доступ только к клиентам, имеющим заменяемое значение, соответствующее имени проверки подлинности или значению указанного атрибута.
Например, рассмотрим следующую конфигурацию:
- Группа клиентов: компьютеры
- Тематика: MachinesTelemetry
- Шаблон раздела "machines/${client.authenticationName}/telemetry".
- Привязка разрешений: группа клиентов: машины; пространство тем: телеметрия машин; доступ: издатель
В этой конфигурации только клиент с именем проверки подлинности клиента "machine1" может публиковаться в разделе "компьютеры/компьютер1/телеметрия", и только компьютер с именем проверки подлинности клиента "machine 2" может публиковаться в разделе "machine/machine2/telemetry" и т. д. Соответственно, machine2 не может публиковать ложные сведения от имени компьютера1, несмотря на то, что он имеет доступ к одному и тому же пространству тем, и наоборот.
Дальнейшие действия:
Дополнительные сведения об авторизации и проверке подлинности: