MQTT gerenciado na nuvem

Isolamento de Tenants MQTT: Mantendo Separados os Dados dos Clientes

Entenda a diferença entre isolamento lógico e físico de tenants MQTT, como funciona a proteção contra vizinhos barulhentos e como escolher o nível de isolamento certo para os seus clientes.

Ilustração de isolamento de tenants MQTT com compartimentos murados separados para os dispositivos e as mensagens de cada cliente em um broker
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

O isolamento de tenants MQTT é o que garante que um cliente nunca consiga ler, escrever ou desacelerar as mensagens de outro cliente. Neste artigo, você vai entender a diferença entre isolamento lógico e físico, como funciona a proteção contra vizinhos barulhentos, quais modos de falha testar e como escolher o nível certo de separação para cada cliente.

Por Que o Isolamento de Tenants Importa

Se o seu produto conecta dispositivos que pertencem a clientes diferentes, o broker guarda os dados deles lado a lado. Um único erro, como uma assinatura com wildcard que corresponde a mais do que devia, uma credencial compartilhada ou uma colisão de client ID, pode expor a telemetria de um cliente a outro ou permitir que uma frota com mau comportamento degrade o serviço de todos. Esses incidentes são difíceis de explicar aos clientes e caros de remediar e, quando a telemetria contém dados pessoais, também envolvem obrigações da LGPD.

O isolamento tem três dimensões, e um bom design trata de todas elas:

  1. Confidencialidade. Um tenant não pode ler as mensagens, os valores retidos ou os dados de sessão de outro tenant.
  2. Integridade. Um tenant não pode publicar nos topics de outro tenant nem assumir as sessões dele.
  3. Disponibilidade. Um tenant não pode consumir tanta capacidade a ponto de prejudicar os demais.

Isolamento Lógico vs Físico

Isolamento Lógico

Com o isolamento lógico, os tenants compartilham os mesmos processos e máquinas do broker, e o software os mantém separados. Cada tenant tem as suas próprias identidades e o seu próprio espaço de topics, e cotas por tenant limitam o uso de recursos. É assim que funciona a maioria dos serviços de nuvem compartilhados e, quando implementado com cuidado, é uma fronteira forte para confidencialidade e integridade.

O seu limite é que os recursos físicos continuam compartilhados. As cotas limitam o impacto de um vizinho barulhento, mas um tenant em um cluster compartilhado não consegue garantias de capacidade independentes de todos os outros.

Isolamento Físico

Com o isolamento físico, um tenant recebe o seu próprio cluster: processos separados, máquinas separadas e, muitas vezes, endpoints de rede separados. Nada do que outro cliente faça pode afetar a sua CPU, memória ou conexões. Custa mais, porque a capacidade é reservada em vez de compartilhada, e leva mais tempo para provisionar.

Um passo adicional é colocar esse cluster dedicado dentro da própria conta de nuvem do cliente, o que acrescenta a propriedade da própria infraestrutura. Esse é o modelo bring your own cloud descrito em broker MQTT BYOC.

Nível de isolamento Compartilhado com outros Protege contra Escolha típica para
Apenas prefixo de topic (sem imposição) Tudo Apenas confusão acidental Apps internos de um único dono
Lógico, identidade de broker por tenant Hardware, processos Vazamento de dados, falsificação de identidade, vizinhos barulhentos limitados A maioria dos clientes SaaS, protótipos
Físico, cluster dedicado Nada no nível do broker Vizinhos barulhentos por completo Frotas grandes, SLAs rigorosos, clientes regulados
Físico, na conta do cliente Nada; o cliente é dono da infraestrutura Requisitos de propriedade da infraestrutura Políticas de controle de dados e conformidade

Proteção Contra Vizinhos Barulhentos na Prática

Vizinhos barulhentos raramente são maliciosos. As causas usuais são banais:

  • Firmware que reconecta imediatamente após uma falha, criando uma tempestade de conexões.
  • Um script de teste publicando em loop, sem nenhum atraso.
  • Payloads grandes demais, como imagens, enviados onde se esperava um JSON pequeno.
  • Milhares de assinaturas criadas por um cliente que nunca cancela nenhuma.

Uma proteção eficaz atua no nível do cliente e do tenant: limites de conexões, taxa de mensagens, tamanho de payload e assinaturas; bloqueio de endereços após repetidas falhas de login; e um retorno claro para o cliente. No MQTT 5, o reason code 0x97 (Quota exceeded) informa ao cliente exatamente por que uma publicação ou conexão foi recusada. Leia mais sobre como as cotas de conexão do broker MQTT afetam o design dos clientes.

A Identidade É a Base

O isolamento falha mais rápido na camada de identidade. Siga estas regras:

  • Nunca compartilhe credenciais entre tenants. Cada cliente recebe as suas próprias credenciais e, idealmente, cada dispositivo também.
  • Vincule os client IDs às credenciais. No MQTT, uma segunda conexão com o mesmo client ID derruba a primeira. Se os client IDs não estiverem vinculados a identidades, um tenant poderia atrapalhar outro reutilizando os IDs dele.
  • Use TLS em tudo. Credenciais enviadas por TCP puro em uma rede pública podem ser capturadas. As portas 8883 ou 8084 devem ser o padrão em produção.
  • Rotacione segredos. Planeje a rotação desde o primeiro dia, incluindo como os dispositivos recebem novas credenciais.

O guia de boas práticas de segurança MQTT aborda esses controles com mais profundidade.

Testando o Seu Isolamento

Não presuma que o isolamento funciona; verifique. Um plano de testes mínimo:

  1. Conecte um cliente com as credenciais do tenant A e assine #. Publique a partir do tenant B. O tenant A não deve receber nada.
  2. Tente se conectar com o client ID do tenant B usando as credenciais do tenant A. O broker deve rejeitar.
  3. Publique retained messages como tenant B e depois assine o mesmo nome de topic como tenant A. Nenhuma mensagem retida pode chegar.
  4. A partir do tenant A, ultrapasse o limite de conexões ou de taxa. Confirme que a latência e as conexões do tenant B não foram afetadas.
  5. Erre o login do tenant A repetidamente a partir de um endereço. Confirme que o bloqueio se aplica a esse endereço, e não ao tenant B.

Veja um pequeno script em Python, usando paho-mqtt 2.x, para o teste 1. Rode-o com os dados do tenant A enquanto outro cliente publica com os do tenant B.

import ssl
import time
import paho.mqtt.client as mqtt

received = []

def on_connect(client, userdata, flags, reason_code, properties):
    print("Tenant A connected:", reason_code)
    client.subscribe("#", qos=0)

def on_message(client, userdata, msg):
    received.append(msg.topic)
    print("Unexpected message:", msg.topic)

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="YOUR_CLIENT_ID",
                     protocol=mqtt.MQTTv5)
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.on_connect = on_connect
client.on_message = on_message
client.connect("YOUR_BROKER_HOST", 8883, keepalive=30)
client.loop_start()
time.sleep(60)   # publique a partir do tenant B durante esta janela
client.loop_stop()
print("Isolation OK" if not received else f"Leak: {len(received)} messages")

No seu próprio broker, é claro, você verá o tráfego do seu próprio tenant, então rode este teste com um tenant que não tenha publicadores próprios.

Como o ConnectMQ Isola os Tenants

O ConnectMQ aplica o isolamento com intensidades diferentes conforme o plano:

  • Serverless (Free e Paid). Os brokers compartilham um cluster com isolamento multi-tenant. Cada broker tem credenciais geradas, client IDs vinculados a essas credenciais e cotas por plano, por exemplo até 25 conexões no plano gratuito e até 1.000 no plano pago. Proteção contra flood e bloqueio de IP após repetidas falhas de login protegem o cluster compartilhado.
  • Dedicated. O seu broker roda em um cluster isolado, então nenhum outro cliente compartilha a capacidade dele.
  • BYOC. O broker roda na sua própria conta de nuvem e o ConnectMQ o gerencia.
  • Self Managed Enterprise. Para organizações que operam a plataforma por conta própria.

O servidor MQTT público em broker.connectmq.com é, de propósito, o oposto de isolado: a sua área de demonstração pode ser lida por qualquer pessoa e serve apenas para experimentos. Use-o para aprender, nunca para dados de clientes. A página do servidor MQTT público (gratuito) lista os seus limites.

Escolhendo o Nível Certo

Parta do que os seus clientes e contratos exigem, não do que é tecnicamente possível:

  • Nenhum dado de cliente, apenas aprendizado: o servidor MQTT público.
  • Seu próprio produto, um único dono de todos os dados: um broker Serverless privado.
  • Muitos clientes com requisitos comuns: um broker isolado por cliente, ou um broker compartilhado com separação rigorosamente imposta no seu próprio back-end.
  • Clientes com garantias de capacidade ou necessidades regulatórias: Dedicated ou BYOC.

Para ver como produtos SaaS combinam essas opções, leia MQTT para SaaS IoT.

Comece com o ConnectMQ

Crie um broker isolado em minutos no plano Serverless gratuito em app.connectmq.com, sem cartão de crédito. Quando um cliente precisar de garantias mais fortes, migre-o para um cluster Dedicated ou para BYOC com o mesmo código cliente. A visão geral de broker MQTT gerenciado e o guia de broker MQTT na nuvem explicam os planos em mais detalhes.

Perguntas frequentes

Qual é a diferença entre isolamento MQTT lógico e físico?

O isolamento lógico mantém os tenants separados por software em máquinas compartilhadas; o isolamento físico dá a um tenant o seu próprio cluster. O isolamento físico também elimina por completo os efeitos de vizinhos barulhentos.

Outro cliente em um broker compartilhado pode ler minhas mensagens?

Não, se o provedor isolar os tenants corretamente. Cada tenant deve ter credenciais e espaço de topics próprios, o que você pode verificar com um teste de assinatura com wildcard.

O que acontece quando um tenant ultrapassa a sua cota?

O broker recusa a conexão ou a mensagem excedente. Clientes MQTT 5 recebem um reason code como 0x97 para que possam recuar e registrar a causa.

O servidor MQTT público é isolado?

Não. A área pública de broker.connectmq.com pode ser lida por qualquer pessoa e se destina apenas a testes.

Artigos relacionados

Broker MQTT BYOC: Bring Your Own Cloud Explicado

Um broker MQTT BYOC roda na sua conta de nuvem, mas é operado por um provedor. Entenda como o modelo funciona, a divisão de responsabilidades e como preparar a sua conta para ele.

9 min de leitura

Alternativa ao Google Cloud IoT Core: Opções e Migração Após o Encerramento

O Google desativou o Cloud IoT Core em agosto de 2023. Este guia compara as alternativas realistas, mapeia os conceitos do IoT Core para MQTT puro e mostra como mover dispositivos para um broker MQTT gerenciado mantendo os dados fluindo para o Google Cloud.

9 min de leitura

Mensagens MQTT por Segundo: Como Estimar e Medir a Vazão

O planejamento de vazão em MQTT se resume a algumas fórmulas e a uma medição honesta. Aprenda a estimar mensagens de entrada e saída por segundo, considerar os picos e associar o resultado a um plano de broker.

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.