Veröffentlicht am: 28. Juli 2023 •
Letzte Aktualisierung: 11. Oktober 2023
Dieser Artikel ist Teil der Serie:
Secure Tunnels
Sie finden das alles sehr kompliziert? Wir auch! Dennoch: Melden Sie sich einfach, wir helfen gerne.
Weitere Artikel folgen in Kürze. Schauen Sie doch in den nächsten Tagen nochmal vorbei!
Aus verschiedenen Gründen kann es notwendig sein, sich mit Geräten innerhalb einer Anlage zu verbinden. Häufig hat man aber keinen direkten Zugriff auf die Netzwerkinfrastruktur und kann somit kein VPN einrichten. Eine sichere Verbindung ist dennoch möglich, mithilfe von sogenannten Secure Tunnels.
Over-the-Air-Updates sind heute ein Must-Have-Feature für IoT-Geräte
Im Rahmen unseres Projekts MyAppCafé stehen wir vor mehreren technischen Herausforderungen. Hierbei übernimmt ein spezialisierter Industrieroboter das Handling, indem er die Kaffeebecher zu den verschiedenen Stationen wie Kaffeemaschine, Eismaschine, Lebensmitteldrucker und Getränkeausgabe bringt. Als verantwortliches Team sind wir sowohl für die Roboterprogramme als auch für die Entwicklung der umfassenden Software und Cloud-Infrastruktur zuständig.
Im Rahmen der kontinuierlichen Produktverbesserung haben wir festgestellt, dass wir die Roboterprogramme an verschiedenen Stellen optimieren können. Insbesondere das Programm zum Öffnen und Schließen des Greifers konnte verbessert werden. Wir erreichen damit nicht nur eine verringerte Bearbeitungszeit, sondern vor allem auch eine erhöhte Zuverlässigkeit, da wir fehlerhafte Signale effizienter abfangen.
Für ein Update des (Kawasaki)-Roboters sind aber zwei Dinge notwendig:
Mit einem Windows-Laptop vor Ort wäre das also überhaupt kein Problem. Eine zweite Option ist das Aufbauen einer VPN-Verbindung.
Leider ist beides für uns unmöglich, denn inzwischen werden die Kaffeebars auch von der Firma Robojo in den USA an mehreren Standorten vertrieben. Da die Roboterzelle auch oft in bestehende Netzwerke (bspw. das Campus-Netzwerk einer Uni) eingebunden wird, haben wir auch keinen Zugriff auf Router und Firewall und können somit kein VPN erstellen.
Diese technischen Herausforderungen haben uns dazu veranlasst, nach einer alternativen Lösung zu suchen.
Da wir bereits AWS für verschiedene Teillösungen wie den Video-Kamerastream, die Backend-API, das Logging und das Flottenmanagement nutzen, lag es nahe, bei AWS nach einer geeigneten Lösung zu suchen und glücklicherweise sind wir mit AWS IoT Secure Tunnels auch fündig geworden.
Der Prozess beginnt damit, dass das IoT-Gerät eine WebSocket-Verbindung zur AWS IoT-Plattform herstellt und sich für den Secure Tunneling-Dienst authentifiziert. Sobald die Verbindung hergestellt und die Identität des Geräts überprüft wurde, kann das Gerät den sicheren Tunnel öffnen.
Der sichere Tunnel ist eine verschlüsselte Verbindung, die es dem IoT-Gerät ermöglicht, sicher mit AWS-Diensten in der Cloud zu kommunizieren, ohne dass diese direkt dem öffentlichen Internet ausgesetzt sind. Dies bietet eine zusätzliche Sicherheitsebene für die IoT-Geräte, da sie nicht direkt angreifbar sind und ihre Kommunikation vor unbefugtem Zugriff geschützt ist.
Sobald der sichere Tunnel geöffnet ist, können die Daten zwischen dem IoT-Gerät und der Cloud sicher übertragen werden. Die Kommunikation erfolgt über die WebSocket-Verbindung und wird mithilfe von TLS (Transport Layer Security) verschlüsselt, um die Vertraulichkeit und Integrität der übertragenen Daten zu gewährleisten.
Die Verwendung von WebSockets ermöglicht eine bidirektionale Kommunikation zwischen dem IoT-Gerät und der Cloud, was für viele IoT-Anwendungen von entscheidender Bedeutung ist. Es ermöglicht auch eine effiziente Datenübertragung, da die Verbindung nicht bei jeder einzelnen Nachricht neu aufgebaut werden muss.
Nachdem der Secure Tunnel erfolgreich aufgebaut wurde, übernimmt der lokale Proxy eine entscheidende Rolle. Er sorgt dafür, dass lokaler Traffic über den Tunnel vom Client (die sogenannte "Source") über den Tunnel auf den Server (die "Destination") weitergeleitet wird. Er muss somit sowohl auf dem Client als auch dem Server installiert werden. Der Client kann den local proxy auch innerhalb eines Docker-Containers betreiben, da man aber wahrscheinlich Zugriff auf das Host-System haben möchte, ist das auf dem Server in der Regel keine Option.
Zunächst hat man damit aber nur eine Verbindung vom Client zum Server hergestellt.
Um die Verbindung zu den Zielgeräten, wie beispielsweise den Robotern in unserem Fall, herzustellen, ist ein weiteres Proxy-Programm notwendig. Der Einfachheit halber setzen wir hier nginx ein. Nginx nutzt dabei spezielle Konfigurationen, um den Datenverkehr entsprechend zu verteilen und sicherzustellen, dass die Informationen an die richtigen Zielgeräte gelangen.
In unserer Konfiguration wird der Verkehr also folgendermaßen weitergeleitet:
Durch diese intelligente Vermittlung des Datenverkehrs ermöglicht dieses komplexe System eine sichere und zuverlässige Kommunikation zwischen dem Client und den Zielgeräten, selbst wenn sich diese in unterschiedlichen Netzwerken oder geografischen Standorten befinden. So wird sichergestellt, dass Updates und Befehle präzise an die Roboter und andere Zielgeräte übertragen werden können.