Fluxos de dispositivos do Hub IoT (versão prévia)
Os fluxos de dispositivos do Hub IoT do Azure facilitam a criação de túneis seguros de TCP bidirecionais para vários cenários de comunicação da nuvem para dispositivo. Um fluxo de dispositivo é intermediado por um *ponto de extremidade de streaming do Hub IoT que atua como um proxy entre os pontos de extremidade de serviço e o dispositivo. Essa configuração, ilustrada no diagrama, é especialmente útil quando os dispositivos estão por trás de um firewall de rede ou residem no interior de uma rede privada. Como tal, os fluxos de dispositivo do Hub IoT ajudam atender à necessidade dos clientes de acessar dispositivos de IoT de forma amigável para o firewall e sem a necessidade de abrir completamente as portas de firewall de rede de entrada ou saída.
Ao usar os fluxos de dispositivos do Hub IoT, os dispositivos permanecem seguros e só precisarão abrir as conexões de TCP de saída para o ponto de extremidade de streaming do Hub IoT pela porta 443. Quando um fluxo é estabelecido, os aplicativos do lado do serviço e do lado do dispositivo têm acesso via programação a um objeto de cliente do WebSocket para enviar e receber os bytes brutos entre si. As garantias de confiabilidade e ordenação fornecidas por esse túnel são similares àquelas oferecidas por TCP.
Benefícios
Os fluxos de dispositivos do Hub IoT oferecem os seguintes benefícios:
Conectividade segura amigável para o firewall: os dispositivos de IoT podem ser acessados a partir dos pontos de extremidade de serviço sem a abertura da porta de firewall de entrada no perímetro de rede ou dispositivo (somente a conectividade de saída para o Hub IoT é necessária na porta 443).
Autenticação: os lados do dispositivo e do serviço do túnel precisam se autenticar com o Hub IoT usando suas credenciais correspondentes.
Criptografia: por padrão, os fluxos de dispositivos do Hub IoT usam conexões de TLS. Esse fator garante que o tráfego seja sempre criptografado, independentemente se o aplicativo usa a criptografia ou não.
Simplicidade de conectividade: em muitos casos, o uso de fluxos de dispositivos elimina a necessidade de uma configuração complexa de redes virtuais privadas para habilitar a conectividade a dispositivos de IoT.
Compatibilidade com a pilha TCP/IP: os fluxos de dispositivos do Hub IoT podem acomodar o tráfego de aplicativo de TCP/IP. Essa abordagem significa que uma ampla gama de protocolos proprietários e baseados em padrões pode usar esse recurso.
Facilidade de uso em configurações de rede privada: o serviço pode se comunicar com um dispositivo, fazendo referência à identificação do dispositivo, em vez do endereço IP do dispositivo. Esse fato é útil em situações em que um dispositivo está localizado dentro de uma rede privada e tem um endereço IP privado, ou seu endereço IP é atribuído dinamicamente e é desconhecido para o lado do serviço.
Fluxos de trabalho do fluxo de dispositivo
Um fluxo de dispositivo é iniciado quando o serviço solicita uma conexão a um dispositivo, fornecendo sua identificação do dispositivo. Esse fluxo de trabalho se encaixa especialmente no modelo de comunicação cliente/servidor, incluindo SSH e RDP, em que um usuário pretende se conectar remotamente ao servidor SSH ou RDP em execução no dispositivo usando um programa de cliente SSH ou RDP.
O processo de criação de fluxo de dispositivo envolve uma negociação entre o dispositivo, o serviço e os pontos de extremidade de streaming e principais do hub IoT. Enquanto os pontos de extremidade principais do Hub IoT orquestram a criação de um fluxo de dispositivo, o ponto de extremidade de streaming manipula o tráfego que flui entre o serviço e o dispositivo.
Fluxo de criação do fluxo de dispositivo
A criação programática de um fluxo de dispositivo usando o SDK envolve as etapas a seguir, que também são descritas na figura:
O aplicativo do dispositivo registra um retorno de chamada com antecedência para ser notificado sobre quando um novo fluxo de dispositivo é iniciado no dispositivo. Esta etapa geralmente ocorre quando o dispositivo é inicializado e se conecta ao Hub IoT.
O programa do lado do serviço inicia um fluxo de dispositivo quando necessário, fornecendo a identificação do dispositivo (não o endereço IP).
O Hub IoT notifica o programa do lado do dispositivo, invocando o retorno de chamada registrado na etapa 1. O dispositivo pode aceitar ou rejeitar a solicitação de iniciação do fluxo. Essa lógica pode ser específica para o cenário do seu aplicativo. Se o dispositivo rejeitar a solicitação de fluxo, o Hub IoT informará o serviço adequadamente; caso contrário, as etapas a seguir ocorrerão.
O dispositivo cria uma conexão TCP segura de saída para o ponto de extremidade de streaming pela porta 443 e atualiza a conexão para um WebSocket. A URL do ponto de extremidade e as credenciais a serem usadas para autenticar são fornecidas para o dispositivo pelo Hub IoT como parte da solicitação enviada na etapa 3.
O serviço é notificado do resultado do dispositivo que aceita o fluxo e cria seu próprio cliente WebSocket para o ponto de extremidade de streaming. Da mesma forma, ele recebe as informações de autenticação e a URL do ponto de extremidade de streaming do Hub IoT.
No processo de handshake acima:
O processo de handshake deve ser concluído em até 60 segundos (etapas 2 a 5), caso contrário, o handshake falhará por ter ultrapassado o tempo limite e o serviço será notificado.
Após a conclusão do fluxo de criação de fluxo acima, o ponto de extremidade de streaming atuará como um proxy e transferirá o tráfego entre o serviço e o dispositivo por meio dos respectivos WebSockets.
O dispositivo e o serviço precisam de conectividade de saída para os pontos de extremidade principais do Hub IoT, assim como do ponto de extremidade de streaming pela porta 443. A URL desses pontos de extremidade está disponível na guia Visão geral no portal do Hub IoT.
As garantias de confiabilidade e ordenação de um fluxo estabelecido são similares àquelas oferecidas por TCP.
Todas as conexões ao Hub IoT e ao ponto de extremidade de streaming usam TLS e são criptografadas.
Fluxo de término
Um fluxo estabelecido termina quando qualquer uma das conexões TCP ao gateway é desconectada (pelo serviço ou pelo dispositivo). Essa ação pode ocorrer voluntariamente fechando o WebSocket em programas do dispositivo ou do serviço ou, involuntariamente, se ocorrer uma falha de tempo de conexão ultrapassado ou do processo. Após o término da conexão do dispositivo ou do serviço ao ponto de extremidade de streaming, a outra conexão TCP também será encerrada (de forma forçada) e o serviço e o dispositivo serão responsáveis por recriar o fluxo, se necessário.
Requisitos de conectividade
Os lados do serviço e do dispositivo de um fluxo de dispositivo devem ser capazes de estabelecer conexões de TLS habilitado ao Hub IoT e ao seu ponto de extremidade de streaming. Essa situação requer conectividade de saída pela porta 443 para esses pontos de extremidade. O nome do host associado a esses pontos de extremidade pode ser encontrado na guia Visão geral do Hub IoT, conforme mostrado na figura:
Como alternativa, as informações de pontos de extremidade podem ser recuperadas usando a CLI do Azure na seção de propriedades do hub, especificamente, as chaves property.hostname
e property.deviceStreams
.
az iot hub devicestream show --name <YourIoTHubName>
A saída é um objeto JSON com todos os pontos de extremidade que seu dispositivo e serviço do hub possam precisar para se conectarem a fim de estabelecer um fluxo de dispositivo.
{
"streamingEndpoints": [
"https://<YourIoTHubName>.<region-stamp>.streams.azure-devices.net"
]
}
Observação
Verifique se a CLI do Azure versão 2.0.57 ou posterior está instalada. Você pode baixar a versão mais recente na página Instalar CLI do Azure.
Permitir conectividade de saída para os pontos de extremidade de streaming do dispositivo
Conforme mencionado no começo deste artigo, o dispositivo cria uma conexão de saída para o ponto de extremidade de streaming do Hub IoT durante o processo de iniciação dos fluxos de dispositivos. Os firewalls no dispositivo ou em sua rede devem permitir a conectividade de saída para o gateway de streaming pela porta 443 (observe que a comunicação ocorre em uma conexão WebSocket que é criptografada usando TLS).
O nome do host do ponto de extremidade de streaming do dispositivo pode ser encontrado no portal do Hub IoT do Azure, na guia Visão geral.
Como alternativa, você pode encontrar essas informações usando a CLI do Azure:
az iot hub devicestream show --name <YourIoTHubName>
Observação
Verifique se a CLI do Azure versão 2.0.57 ou posterior está instalada. Você pode baixar a versão mais recente na página Instalar CLI do Azure.
Solucionar problemas por meio de logs de recursos de fluxos de dispositivos
Você pode configurar Azure Monitor para coletar os logs de recursos para fluxos de dispositivos emitidos pelo Hub IoT. Essa abordagem pode ser útil em cenários de solução de problemas.
Siga essas etapas para criar uma configuração de diagnóstico para enviar logs de fluxos de dispositivos do Hub IoT para logs do Azure Monitor:
No portal do Azure, navegue até o seu hub IoT. No painel esquerdo, em Monitoramento, selecione Configurações de diagnóstico. Em seguida, selecione Adicionar configuração de diagnóstico.
Forneça um nome para a configuração de diagnóstico e selecione DeviceStreams na lista de logs. Em seguida, selecione Enviar para o Log Analytics. Você será guiado para escolher um workspace do Log Analytics existente ou criar um novo.
Depois de criar uma configuração de diagnóstico para enviar os logs de fluxos de dispositivos para um workspace do Log Analytics, você pode acessar os logs selecionando Logs em Monitoramento no painel esquerdo do hub IOT no portal do Azure. Os logs de fluxos de dispositivos aparecerão na tabela
AzureDiagnostics
e têmCategory=DeviceStreams
. Pode levar vários minutos após uma operação para que os logs apareçam na tabela.Conforme mostrado aqui, a identidade do dispositivo de destino e o resultado da operação também estão disponíveis nos logs.
Para saber mais sobre como usar o Azure Monitor com o Hub IoT, confira Hub IoT do Monitor. Para obter informações sobre todos os logs de recursos, as métricas e as tabelas disponíveis para o Hub IoT, consulte Monitorando a referência de dados do Hub IOT do Azure.
Disponibilidade regional
Durante a versão prévia pública, os fluxos de dispositivos do Hub IoT estão disponíveis nas regiões EUA Central, Leste dos EUA EUAP, Norte da Europa e Sudeste da Ásia. Certifique-se de criar seu hub em uma dessas regiões.
Disponibilidade do SDK
Dois lados de cada fluxo (no lado do dispositivo e do serviço) usam o SDK do Hub IoT para estabelecer o túnel. Durante a versão prévia pública, os clientes podem escolher entre as seguintes linguagens do SDK:
Os SDKs de C e C# dão suporte a fluxos de dispositivos no lado do dispositivo.
Os SDKs de Node.js e C# dão suporte a fluxos de dispositivos no lado do serviço.