Control de acceso para clientes MQTT

El control de acceso permite administrar la autorización de los clientes para publicar o suscribirse a temas mediante un modelo de control de acceso basado en roles. Dada la enorme escala de entornos de IoT, la asignación de permisos para cada cliente a cada tema es increíblemente tediosa. La característica de agente MQTT de Azure Event Grid aborda este desafío de escalado mediante la agrupación de clientes y temas en grupos de clientes y espacios de temas.

Los componentes principales del modelo de control de acceso son:

Un cliente representa el dispositivo o la aplicación que necesita publicar o suscribirse a temas MQTT.

Un grupo de clientes es un conjunto de clientes que necesitan el mismo acceso para publicar o suscribirse al mismo conjunto de temas MQTT. El grupo de clientes representa la entidad de seguridad en el modelo de RBAC.

Un espacio de temas representa varios temas mediante un conjunto de plantillas de tema. Las plantillas de tema son una extensión de filtros MQTT que admiten variables, junto con los caracteres comodín de MQTT. Cada espacio de temas representa los temas que el mismo conjunto de clientes deben usar para comunicarse. El espacio de temas representa el recurso en el modelo de RBAC.

Un enlace de permisos concede acceso a un grupo de clientes específico para publicar o suscribirse a los temas representados por un espacio de temas específico. El enlace de permisos representa el rol en el modelo de RBAC.

Diagram of the access control model.

Ejemplos:

En los ejemplos siguientes se detalla cómo configurar el modelo de control de acceso en función de los siguientes requisitos.

Ejemplo 1:

Una fábrica tiene varias áreas y cada área, incluidas las máquinas, necesitan comunicarse entre sí. Sin embargo, no se permite que las máquinas de otras áreas de la fábrica puedan comunicarse con ellas.

Cliente Rol Tema o Filtro de tema
Area1_Machine1 Publisher areas/area1/machines/machine1
Area1_Machine2 Suscriptor areas/area1/machines/#
Area2_Machine1 Publisher areas/area2/machines/machine1
Area2_Machine2 Suscriptor areas/area2/machines/#

Configuración

  • Cree un recurso de cliente para cada máquina.
  • Cree un grupo de clientes para las máquinas de cada área de la fábrica.
  • Cree un espacio de tema para cada área que represente los temas en los que se comunican las máquinas del área.
  • Cree dos enlaces de permisos para que el grupo de clientes de cada área publique y se suscriba al espacio de temas de su área correspondiente.
Cliente Grupo de clientes Enlace de permisos Espacio de tema
Area1_Machine1 Area1Machines Area1-Pub Area1Messages -Plantilla de tema: areas/area1/machines/#
Area1_Machine2 Area1Machines Area1-Sub Area1Messages -Plantilla de tema: areas/area1/machines/#
Area2_Machine1 Area2Machines Area2-Pub Area2Messages -Plantilla de tema: areas/area2/machines/#
Area2_Machine2 Area2Machines Area2-Sub Area2Messages -Plantilla de tema: areas/area2/machines/#

Ejemplo 2:

Imaginemos un requisito adicional para el ejemplo anterior: cada área tiene clientes de administración junto con las máquinas, y las máquinas no deben tener acceso de publicación en caso de que alguna de ellas se encuentre en peligro. Por otro lado, los clientes de administración necesitan acceso de publicación para enviar comandos a las máquinas y suscribirse al acceso para recibir telemetría de las máquinas.

Cliente Rol Tema o Filtro de tema
Area1_Machine1 Publisher areas/area1/machines/machine1
Suscriptor areas/area1/mgmt/#
Area1_Mgmt1 Publisher areas/area1/mgmt/machine1
Suscriptor areas/area1/machines/#
Area2_Machine1 Publisher areas/area2/machines/machine1
Suscriptor areas/area2/mgmt/#
Area2_ Mgmt1 Publisher areas/area2/mgmt/machine1
Suscriptor areas/area2/machines/#

Configuración:

  • Cree recursos de cliente para cada máquina y cliente de administración.
  • Cree dos grupos de clientes por área: uno para el cliente de administración y otro para las máquinas.
  • Cree dos espacios de temas para cada área: uno que represente temas de telemetría y otro que represente temas de comandos.
  • Cree dos enlaces de permisos para que los clientes de administración de cada área publiquen en el espacio de temas de comandos y se suscriban al espacio de temas de telemetría.
  • Cree dos enlaces de permisos para que las máquinas de cada área se suscriban a al espacio de temas de comandos y publiquen en el espacio de temas de telemetría.
Cliente Grupo de clientes Enlace de permisos Tema o Filtro de tema
Area1_Machine1 Area1Machines Area1Machines-Pub Area1Telemetry -Plantilla de tema: areas/area1/machines/#
Area1Machines-Sub Area1Commands -Plantilla de tema: areas/area1/mgmt/#
Area1_MgmtClient1 Area1Mgmt Area1Mgmt-Pub Area1Commands -Plantilla de tema: areas/area1/mgmt/#
Area1Mgmt-Sub Area1Telemetry -Plantilla de tema: areas/area1/machines/#
Area2_Machine1 Area2Machines Area2Machines-Pub Area2Telemetry -Plantilla de tema: areas/area2/machines/#
Area2Machines-Sub Area2Commands -Plantilla de tema: areas/area2/mgmt/#
Area2_ MgmtClient1 Area2Mgmt Area2Mgmt-Pub Area2Commands -Plantilla de tema: areas/area2/mgmt/#
Area2Mgmt-Sub Area2Telemetry -Plantilla de tema: areas/area2/machines/#

Control de acceso pormenorizado

El control de acceso pormenorizado le permite controlar la autorización de cada cliente dentro de un grupo de clientes para publicar o suscribirse a su propio tema. Este control de acceso pormenorizado se logra mediante el uso de variables en plantillas de tema.

Aunque un grupo de clientes puede tener acceso a un espacio de temas determinado con todas sus plantillas de tema, las variables dentro de las plantillas de tema permiten controlar la autorización de cada cliente dentro de ese grupo de clientes para publicar o suscribirse a su propio tema. Por ejemplo, si el grupo de clientes "machines" incluye dos clientes: "machine1" y "machine2". Mediante el uso de variables, puede permitir que solo machine1 publique su telemetría únicamente en el tema MQTT "machines/machine1/telemetry" y que "machine2" publique mensajes en el tema MQTT "machines/machine2/telemetry".

Las variables representan nombres de autenticación de cliente o atributos de cliente. Durante la comunicación con el agente MQTT, cada cliente reemplazaría la variable del tema MQTT por un valor sustituido. Por ejemplo, la variable ${client.authenticationName} se reemplazaría por el nombre de autenticación de cada cliente: máquina1, máquina2, etc. El agente MQTT permitiría el acceso solo a los clientes que tienen un valor sustituido que coincide con su nombre de autenticación o el valor del atributo especificado.

Por ejemplo, imagine que usa la siguiente configuración:

  • Grupo de clientes: Machines
  • Espacio de temas: MachinesTelemetry
    • Plantilla de tema "machines/${client.authenticationName}/telemetry".
  • Enlace de permisos: grupo de clientes: machines; espacio de temas: machinesTelemetry; permiso: publicador

Con esta configuración, solo el cliente con el nombre de autenticación de cliente "machine1" puede publicar en el tema "machines/machine1/telemetry", y solo la máquina con el nombre de autenticación de cliente "machine 2" puede publicar en el tema "machines/machine2/telemetry", etc. En consecuencia, machine2 no puede publicar información falsa en nombre de machine1, aunque tenga acceso al mismo espacio de temas y viceversa.

Diagram of the granular access control example.

Pasos siguientes:

Obtenga más información sobre la autorización y la autenticación: