Mosquitto ACL

Viele Message Broker erlauben die Konfiguration von Access Control Lists (ACLs), um die Interaktionen von Clients auf bestimmte Topics einzuschränken. Das folgende Kapitel zeigt diese Konfiguration exemplarisch am Beispiel des Mosquitto-Message-Brokers. Die hier genannte Vorgehensweise zur Gewährung von Zugriffsrechten unterscheidet sich von der des TcMqttPlugins. Dort wird für ein ADS-Gerät angegeben, welche anderen ADS-Geräte Zugriff auf dieses haben. Bei der (Mosquitto) ACL ist es genau umgekehrt, denn hier wird für ein ADS-Gerät angegeben, auf welche anderen ADS-Geräte dieses zugreifen darf.

Übersicht

Der Mosquitto-Message-Broker erlaubt die Konfiguration einer Access Control List, welche als separate Konfigurationsdatei definiert und in der Hauptkonfiguration des Brokers referenziert wird. Dieser Konfigurationseintrag ist nachfolgend exemplarisch dargestellt:

acl_file C:\Program Files\mosquitto\mosquitto.acl

Eine vollständige Konfigurationsdatei finden Sie auch in unseren Beispielen zum Download.

In der ACL-Datei können Sie Berechtigungen für das Publishen und Subscriben auf bestimmte Topics definieren und für jeden Benutzer separat angeben. Die Zugriffsrechte für einen Benutzer werden stets durch die folgende Zeile eingeleitet:

user <username>

Im Anschluss werden die Lese- und Schreibrechte nach folgendem Schema definiert:

topic [read|write|readwrite] <topicName>

Konfiguration für ADS-over-MQTT

Für ADS-over-MQTT müssen laut Kommunikationsablauf zwei Dinge sichergestellt werden: der Zugriff aller ADS-Geräte auf die Discovery-Topics und das Senden/Empfangen über die Kommunikations-Topics.
Auf das eigene Topic muss das ADS-Gerät immer Lese-/Schreibrechte erhalten. Für das Discovery-Topic anderer ADS-Geräte erhält das Gerät Leserechte.
Zum Austausch von ADS-Nachrichten muss ein ADS-Gerät Lese-/Schreibrechte auf das Kommunikations-Topic der Geräte erhalten. Das ADS-Gerät wird hierbei durch eine eigene Identität am Message Broker identifiziert. Diese Identität kann zum Beispiel von einem PSK stammen oder auch dem CommonName (CN) eines Client-Zertifikats entsprechen. Die folgende Konfiguration bildet diese Zusammenhänge ab.

user <identity>
topic readwrite <VirtualAmsNetworkName>/<OwnAmsNetId>/#
topic read <VirtualAmsNetworkName>/+/info
topic readwrite <VirtualAmsNetworkName>/+/ams/#

Soll einem ADS-Gerät der Zugriff auf ein anderes Gerät verweigert werden, so ist sicherzustellen, dass keine Schreibrechte für das Topic mit der Ziel-AmsNetId vorliegen.

Die von dem TcMqttPlugin bekannte Option, dass ein ADS-Gerät nur eine AmsNetId anmelden darf, ist mit der Mosquitto-ACL ebenfalls möglich. Dazu ist der Eintrag <OwnAmsNetId> durch genau eine vorgesehene AmsNetId zu ersetzen. Soll es dem ADS-Gerät möglich sein, sich mit einer beliebigen AmsNetId anzumelden, so muss für <OwnAmsNetId> eine Wildcard (#) gesetzt werden.

Nachfolgend sind die Einträge für die Zugriffsrechte zur Kommunikation zweier ADS-Teilnehmer untereinander beispielhaft aufgeführt:

user EngineeringStation
topic readwrite VirtualAmsNetwork1/18.153.78.19.1.1/#
topic read VirtualAmsNetwork1/+/info
topic readwrite VirtualAmsNetwork1/+/ams/#
user CX-12345
topic readwrite VirtualAmsNetwork1/3.120.15.8.1.1/#
topic read VirtualAmsNetwork1/+/info
topic readwrite VirtualAmsNetwork1/+/ams/#