Après l’introduction à MQTT et son installation. Passons à la découverte et la configuration de l’ACL (Access Control List – Liste de contrôle d’accès).
Par défaut Mosquitto autorise la connexion sans login / mot de passe. J’ai parlé de ce point dans l’article sur son installation.
Une fois connecté chaque utilisateur (ou client) peut écrire ou écouter n’importe quel topic sans aucune restriction. C’est ici que l’ACL intervient !
Configuration acl_file
Dans le fichier de configuration de votre Mosquitto, il est nécessaire de configurer l’emplacement de votre acl_file.
acl_file /etc/mosquitto/acl
« Lexique »
- # – Wildcard, il donne accès à tout le topic de façon récursive.
- + – Wildcard, il donne accès à tout le topic sur le même niveau.
- $SYS – est réservé au broker, il communique ses statistiques, … Vous pouvez laisser l’accès en lecture ou non aux clients via un pattern par exemple.
- user – Permet de définir l’utilisateur concerné.
- topic – Permet de définir le topic concerné.
- pattern – Permet de définir un topic à tous utilisateurs ou clients.
- read – Permet de lire le topic.
- write – Permet d’écrire sur le topic.
- readwrite – Permet de lire et d’écrire sur le topic.
- %c – ID du client.
- %u – Nom de l’utilisateur.
Il est possible de connecter plusieurs clients avec un ID différent avec le même utilisateur. Dans un premier temps limitez-vous à un client = un utilisateur car cela peut vite poser des soucis.
Clients & Users
Dans l’exemple suivant l’utilisateur cuisine à le droit d’écrire et de lire dans tout le topic maison/cuisine et à aussi le droit de lire tout le topic maison.
L’utilisateur toto lui à uniquement le droit de lire maison/cuisine/temperature.
user cuisine
topic readwrite maison/cuisine/#
topic read maison/#
user toto
topic read maison/cuisine/temperature
Patterns
Dans l’exemple suivant tous les utilisateurs peuvent lire les informations du broker $SYS. Chaque client et utilisateur ont le droit d’écrire et de lire dans « leur espace ». Donc l’utilisateur toto à son topic maison/user/toto de façon récursive, pareil pour l’utilisateur cuisine.
pattern read $SYS/#
pattern readwrite maison/id/%c/#
pattern readwrite maison/user/%u/#
Ressource : https://mosquitto.org/man/mosquitto-conf-5.html