RabbitMQ + Web Stomp и безопасность

RabbitMQ + Web Stomp — это круто. Однако у меня есть некоторые темы, которые я хотел бы защитить как доступные только для чтения или только для записи.

Кажется, единственный механизм для их защиты — с rabbitmqctl. Я могу создать vhost, пользователя, а затем применить некоторые разрешения. Однако именно здесь реализация Stomp и Rabbit начинает ломаться.

темы принимают форму: /topic/blah в stomp, который направляет к «amq.topic» в Rabbit с ключом маршрутизации «blah». Казалось бы, нет возможности установить разрешения для ключа маршрутизации. Кажется:

rabbitmqctl set_permissions -p vhost user ".*" ".*" "^amq\.topic"

это лучшее, что я могу сделать, это все еще "ВСЕ" темы. Я также изучил обмены, но в javascript нет возможности определить их на лету.

Я что-то упустил здесь?

Ссылка: http://www.rabbitmq.com/blog/2012/05/14/introduction-rabbitmq-web-stomp/


person jbg    schedule 04.09.2012    source источник


Ответы (2)


Да, с RabbitMQ-WebStomp вы в значительной степени ограничены обычным набором разрешений RabbitMQ. Это не идеально, но вы сможете правильно настроить базовые разрешения. Взгляните на документы RabbitMQ:

http://www.rabbitmq.com/access-control.html

Быстро просматривая документы stomp:

http://www.rabbitmq.com/stomp.html

да, вы не можете настроить разрешения для определенного ключа маршрутизации. Возможно, вам следует использовать семантику «обмена», а также явно связать обмен с очередью (т. Е. Не использовать темы):

/exchange/exchange_name[/routing_key].

Пожалуйста, задавайте конкретные вопросы о разрешениях RMQ в списке рассылки rabbitmq-discuss. Люди там действительно помогают.

К сожалению, набора разрешений RMQ недостаточно для некоторых более сложных сценариев. В этом случае вы можете:

  • Используйте STOMP только для чтения данных и публикуйте сообщения только с использованием некоторого внешнего интерфейса AJAX, который может напрямую общаться с кроликом внутри.
  • или не используйте плагин web-stomp и напишите простой мост между SockJS и RabbitMQ вручную. Это дает вам больше гибкости, но требует больше работы.
person Marek    schedule 05.09.2012
comment
В итоге я воспользовался обменом. Не идеально, в основном потому, что усложняет развертывание, но работает. - person jbg; 05.09.2012

Попробуйте это https://github.com/simonmacmullen/rabbitmq-auth-backend-http Это гораздо более гибко. По сути, это небольшой плагин аутентификации для кролика, который делегирует решения ACL скрипту через http (который вы полностью контролируете), который должен отвечать только «разрешить» или «запретить».

person Ruslan Talpa    schedule 26.11.2013