Защищенные сквозные подключения к IoT-устройствам
Индустрия 4.0 приводит к увеличению количества децентрализованных приложений и услуг наряду с используемыми устройствами IoT. Возможность доступа к этим устройствам для задач поддержки и обслуживания часто является важным требованием. Служба Azure IoT Hub от Microsoft теперь предлагает простой способ установления таких подключений.
Что такое потоки устройств Azure IoT Hub?
Microsoft Azure IoT Hub — Device Streams — это новая служба PaaS, которая обеспечивает прямой доступ к IoT-устройствам.
Доступ может быть установлен даже в том случае, если эти устройства находятся за брандмауэрами или в частных сетях. Основным элементом является новая конечная точка потоковой передачи, позволяющая устанавливать двунаправленные туннели TCP между службой и устройствами IoT. На момент написания статьи сервис все еще находился в предварительной версии.
IoT Hub действует как прокси и берет на себя установление связи и безопасную передачу данных. Строки подключения для устройства IoT и пользователя службы центра IoT формируют основу для установления связи.
На основе этих строк подключения выполняется аутентификация и создается маркер доступа для новой конечной точки потоковой передачи. Оба действия могут быть реализованы с помощью интерфейсов, предоставляемых Device SDK и Service SDK.
Использование устройства и службы SDK
Соединение между службой и устройствами IoT с использованием сеанса потока устройств инициируется службой. Поэтому реализация всегда начинается с ServiceClient
Service SDK, используя строку подключения службы. С помощью метода CreateStreamAsync
запускается запрос на подключение к IoT-устройству. Устройство IoT указывается с помощью уникального идентификатора устройства из Центра Интернета вещей.
С другой стороны, устройство IoT устанавливает соединение с центром IoT, используя DeviceClient
пакета SDK для устройств. WaitForDeviceStreamRequestAsync
ожидает входящего запроса на подключение.
Подумайте о сценариях, в которых нежелателен автоматический доступ к устройству и другой человек должен явным образом принять подключение. Поэтому Device SDK предлагает два дополнительных метода. Метод AcceptDeviceStreamRequestAsync
можно использовать для принятия запроса. Чтобы отклонить запрос, следует использовать RejectDeviceStreamRequestAsync
.
После установления соединения с Центром Интернета вещей следующим шагом будет создание соединения WebSocket. Он действует как туннель между службой и устройствами IoT. В следующем примере кода показано, как создать это соединение WebSocket с помощью маркера доступа, сгенерированного при инициации запроса потока устройства. Этот шаг одинаков для сервисных и IoT-устройств.
В отношении обмена данными следует выделить следующий момент:
- Для подключения требуется только исходящее соединение с использованием порта 443
- Обмен данными всегда защищен прозрачным шифрованием
- Обмен данными осуществляется по правилам TCP/IP. Это означает, что надежность и последовательность пакетов данных гарантированы.
Когда соединение WebSocket установлено с конечной точкой потоковой передачи с обеих сторон, существует защищенное сквозное соединение. Как вы можете использовать это для создания SSH-подключения к устройству IoT, объясняется в следующем разделе.
Установка SSH-соединения
Представленные примеры кода уже можно использовать для обмена данными между сервисом и IoT-устройством. Этого может быть достаточно, если приложения доступны с обеих сторон, а также могут быть изменены. Однако как реализуется связанный с обслуживанием анализ журналов или конфигурация IoT-устройства при использовании стандартного приложения, такого как SSH?
С потоками устройств Azure IoT Hub это не большая проблема. Если предположить, что подключение к концентратору Интернета вещей уже установлено (как объяснялось в предыдущем разделе), на следующей схематической диаграмме показан процесс создания подключения SSH к устройству Интернета вещей.
Основными строительными блоками являются service proxy
и device proxy
. service proxy
действует как своего рода сервер и ожидает локального соединения SSH. device proxy
берет на себя роль клиента, устанавливая соединение с демоном SSH на устройстве IoT. Оба прокси-приложения туннелируют трафик между локальными экземплярами и конечной точкой потоковой передачи Центра Интернета вещей. Проще говоря, это туннелирование представляет собой процесс копирования между двумя потоками, как показано в следующем примере файла device proxy
.
Метод HandleIncomingDataAsync
получает трафик данных от IoT-устройства и записывает его в поток, который берет на себя связь с демоном SSH. Метод HandleOutgoingDataAsync
копирует ответы демона SSH в поток WebSocket подключения к центру Интернета вещей. После этого данные передаются на service proxy
через потоки устройств IoT-концентратора. В service proxy
есть аналогичная опция для копирования данных и взаимодействия с SSH-клиентом. Показанные механизмы также могут быть перенесены в другие стандартные приложения TCP, такие как RDP или SCP, путем адаптации портов.
На GitHub можно найти полный рабочий пример приложения. В нем рассматривается SSH-подключение к устройству IoT с помощью Azure IoT Hub — Device Streams. (Пример работы с потоками устройств Azure IoT Hub)
Эта статья была первоначально опубликована на:
https://www.fzankl.de/en/blog/remote-access-for-iot-devices-using-azure-iot-hub