Permissões para exchanges do tipo TOPIC RabbitMQ com MQTT e Stomp

O sistema de permissões do RabbitMQ é esquisito quando usamos o protocolo MQTT e o Stomp.

Antes do RabbitMQ 3.7 não era possível limitar quais tópicos cada usuário poderia dar publish ou subscribe. A única possibilidade era: permitir leitura na exchange inteira e/ou permitir escrita na exchange inteira. Essa configuração era feita através das autorizações de nível "Permissions".

No RabbitMQ 3.7 e posteriores, além da tradicional "Permissions" criou-se um novo nível de autorização chamado "Topic Permissions" e nele é possível definir quais tópicos podem ser lidos e escritos por um usuário (usando expressões regulares, regex).

Quando uma conexão MQTT é aberta com o RabbitMQ, uma conexão e um canal são abertos.

Ao fazer um SUBSCRIBE em algum tópico, o MQTT cria uma fila no vhost / com o nome:

mqtt-subscription-qos

Para que essa fila seja criada, é preciso que o usuário tenha as permissões a nível de "Permissions" em:

vhost /
configure em: mqtt-subscription-_id-qos
read em: mqtt-subscription-_id-qos
write em: mqtt-subscription-_id-qose amq.topic

Transformando isso para regex temos (note que estou aceitando qualquer mqtt client id):

virtual host: /configure regexp: ^mqtt-subscription-.+$write regexp: ^mqtt-subscription-.+$read regexp: ^(mqtt-subscription-.+)|(amq\.topic)$

Para ter permissões de leitura e escrita:

user: tiagovirtual host: /configure regexp: ^mqtt-subscription-.+$write regexp: ^(mqtt-subscription-.+)|(amq\.topic)$read regexp: ^(mqtt-subscription-.+)|(amq\.topic)$

Já na topic permission, da seguinte forma:

user: tiagovirtual host: /exchange: amq.topicwrite regexp: ^tiago(\.\w+)*$read regexp: ^tiago(\.\w+)*$

A regex ^tiago(.\w+)*$ reconhece o seguintes textos:

tiago
tiago.123
tiago.asd
tiago.asd 123 asd
tiago.asd.dsa.123.abc

A regex não aceita nada que não começar com tiago.

Referências

Documentação sobre controle de acesso e autorizações no RabbitMQ
https://www.rabbitmq.com/access-control.html

You should also read:

Verificando débitos do seu veículo no Paraná

http://transito.curitiba.pr.gov.br/processos/consulta-de-andamento-de-processos-renavam/22 http://www.detran.pr.gov.br/servico/extratodebito https://www.governodigital.pr.gov.br/servicos/Veiculo/Guias-para-pagamento-e-certidoes/Emitir-guia-para-pagamento-do-licenciamento-de-veiculos-ERrZWjo6

MQTT

O MQTT é um protocolo de troca de mensagens entre computadores. Ele é muito leve e eficiente. No MQTT temos 3 pessoas envolvidas:…