Защищенные сквозные подключения к 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

использованная литература