Controle de acesso para clientes MQTT
O controle de acesso permite que você gerencie a autorização dos clientes para publicação ou assinatura em tópicos, usando um modelo de controle de acesso baseado em função. Dada a enorme escala de ambientes de IoT, atribuir uma permissão a cada cliente e a cada tópico é incrivelmente monótono. O recurso de agente MQTT da Grade de Eventos do Azure resolve esse desafio de escala por meio do agrupamento de clientes e tópicos em grupos de clientes e espaços de tópicos.
Os principais componentes do modelo de controle de acesso são:
Um cliente representa o dispositivo ou o aplicativo que precisa publicação e/ou assinatura em tópicos MQTT.
Um grupo de clientes é um conjunto de clientes que precisa do mesmo acesso para publicação e/ou assinatura no mesmo conjunto de tópicos MQTT. O grupo de clientes representa a entidade de segurança no modelo RBAC.
Um espaço de tópico representa vários tópicos por meio de um conjunto de modelos de tópicos. Os modelos de tópicos são uma extensão de filtros MQTT que dão suporte a variáveis, acompanhado dos curingas MQTT. Cada espaço de tópico representa os tópicos que o mesmo conjunto de clientes precisa usar para se comunicar. O espaço de tópico representa o recurso no modelo RBAC.
Uma associação de permissão permite acesso a um grupo de clientes específico para publicação ou assinatura nos tópicos representados por um espaço de tópico específico. A associação de permissão representa a função no modelo RBAC.
Exemplos:
Os exemplos a seguir fornecem detalhes de como configurar o modelo de controle de acesso de acordo com os requisitos a seguir.
Exemplo 1:
Uma fábrica tem várias áreas, com cada área incluindo computadores que precisam se comunicar entre si. No entanto, os computadores de outras áreas da fábrica não têm permissão para se comunicar com eles.
Cliente | Função | Tópico/Filtro de tópico |
---|---|---|
Area1_Machine1 | Publisher | areas/area1/machines/machine1 |
Area1_Machine2 | Subscriber | areas/area1/machines/# |
Area2_Machine1 | Publisher | areas/area2/machines/machine1 |
Area2_Machine2 | Subscriber | areas/area2/machines/# |
Configuração
- Crie um recurso de cliente para cada computador.
- Crie um grupo de clientes para os computadores de cada área da fábrica.
- Crie um espaço de tópico para cada área que representa os tópicos nos quais os computadores da área se comunicam.
- Crie duas associações de permissão para publicação e assinatura do grupo de clientes de cada área no espaço de tópico da área correspondente.
Cliente | Grupo de clientes | Associação de permissão | Espaço de tópico |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1-Pub | Area1Messages – Modelo de tópico: areas/area1/machines/# |
Area1_Machine2 | Area1Machines | Area1-Sub | Area1Messages – Modelo de tópico: areas/area1/machines/# |
Area2_Machine1 | Area2Machines | Area2-Pub | Area2Messages – Modelo de tópico: areas/area2/machines/# |
Area2_Machine2 | Area2Machines | Area2-Sub | Area2Messages – Modelo de tópico: areas/area2/machines/# |
Exemplo 2:
Vamos considerar um requisito extra para o exemplo anterior: cada área tem clientes de gerenciamento acompanhado dos computadores, e os computadores não devem ter acesso para publicação caso algum deles seja comprometido. Por outro lado, os clientes de gerenciamento precisam ter acesso para publicação para enviar comandos aos computadores e acesso para assinatura para receber a telemetria dos computadores.
Cliente | Função | Tópico/Filtro de tópico |
---|---|---|
Area1_Machine1 | Publisher | areas/area1/machines/machine1 |
Subscriber | areas/area1/mgmt/# | |
Area1_Mgmt1 | Publisher | areas/area1/mgmt/machine1 |
Subscriber | areas/area1/machines/# | |
Area2_Machine1 | Publisher | areas/area2/machines/machine1 |
Subscriber | areas/area2/mgmt/# | |
Area2_ Mgmt1 | Publisher | areas/area2/mgmt/machine1 |
Subscriber | areas/area2/machines/# |
Configuração:
- Crie recursos de cliente para cada computador e cliente de gerenciamento.
- Crie dois grupos de clientes por área: um para o cliente de gerenciamento e outro para os computadores.
- Crie dois espaços de tópicos para cada área: um representando os tópicos de telemetria e o outro representando os tópicos de comandos.
- Crie duas associações de permissão para que os clientes de gerenciamento de cada área façam publicações no espaço de tópico de comandos e assinem o espaço de tópico de telemetria.
- Crie duas associações de permissão para que os computadores de cada área assinem o espaço de tópico de comandos e façam publicações no espaço de tópico de telemetria.
Cliente | Grupo de clientes | Associação de permissão | Tópico/Filtro de tópico |
---|---|---|---|
Area1_Machine1 | Area1Machines | Area1Machines-Pub | Area1Telemetry – Modelo de tópico: areas/area1/machines/ # |
Area1Machines-Sub | Area1Commands – Modelo de tópico: areas/area1/mgmt/# | ||
Area1_MgmtClient1 | Area1Mgmt | Area1Mgmt-Pub | Area1Commands – Modelo de tópico: areas/area1/mgmt/# |
Area1Mgmt-Sub | Area1Telemetry – Modelo de tópico: areas/area1/machines/ # | ||
Area2_Machine1 | Area2Machines | Area2Machines-Pub | Area2Telemetry – Modelo de tópico: areas/area2/machines/# |
Area2Machines-Sub | Area2Commands – Modelo de tópico: areas/area2/mgmt/# | ||
Area2_ MgmtClient1 | Area2Mgmt | Area2Mgmt-Pub | Area2Commands – Modelo de tópico: areas/area2/mgmt/# |
Area2Mgmt-Sub | Area2Telemetry – Modelo de tópico: areas/area2/machines/# |
Controle de acesso granular
O controle de acesso granular permite controlar a autorização de cada cliente em um grupo de clientes para publicação ou assinatura em um tópico próprio. Esse controle de acesso granular é obtido por meio de variáveis em modelos de tópicos.
Embora um grupo de clientes possa ter acesso a determinado espaço de tópico com todos os modelos de tópicos, as variáveis dentro dos modelos de tópicos permitem controlar a autorização de cada cliente dentro desse grupo de clientes para publicação ou assinatura em um tópico próprio. Por exemplo, se o grupo de clientes “machines” incluir dois clientes: “machine1” e “machine2”. Usando variáveis, você pode permitir que machine1 publique a telemetria somente no tópico MQTT “machines/machine1/telemetry”" e que “machine2” publique mensagens no tópico MQTT “machines/machine2/telemetry".
As variáveis representam nomes de autenticação do cliente ou atributos do cliente. Durante a comunicação com agente MQTT, cada cliente substituirá a variável no tópico MQTT por um valor substituído. Por exemplo, a variável ${client.authenticationName} seria substituída pelo nome de autenticação de cada cliente: machine1, machine2 etc. O agente MQTT permitiria o acesso somente aos clientes que têm um valor substituído que corresponda ao nome de autenticação ou ao valor do atributo especificado.
Por exemplo, considere a seguinte configuração:
- Grupo de clientes: Machines
- Espaço de tópico: MachinesTelemetry
- Modelo de tópico: "machines/${client.authenticationName}/telemetry".
- Associação de permissão: grupo de clientes: machines; espaço de tópico: machinesTelemetry; Permissão: editor
Com essa configuração, somente o cliente com o nome de autenticação do cliente “machine1” pode fazer publicações no tópico "machines/machine1/telemetry e somente o computador com o nome de autenticação do cliente “machine 2” pode fazer publicações no tópico "machines/machine2/telemetry", etc. Assim, o machine2 não pode publicar informações falsas em nome do machine1, mesmo que tenha acesso ao mesmo espaço de tópico e vice-versa.
Próximas etapas:
Saiba mais sobre a autorização e a autenticação: