2012-09-04 29 views
5

RabbitMQ + Web Stomp es increíble. Sin embargo, tengo algunos temas que me gustaría asegurar como de solo lectura o de solo escritura.RabbitMQ + Web Stomp y seguridad

Parece que el único mecanismo para protegerlos es con rabbitmqctl. Puedo crear un vhost, un usuario y luego aplicar algunos permisos. Sin embargo, aquí es donde la implementación de Stomp and Rabbit comienza a descomponerse.

temas tomar forma:/tema/blah en stomp, que se dirige a "amq.topic" en Rabbit con una clave de enrutamiento "bla". Parece que no hay forma de establecer permisos para la clave de enrutamiento. Parece:

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

es lo mejor que puedo hacer, lo que es todavía "TODOS" los temas. También he investigado los intercambios, pero no hay forma de que JavaScript los defina sobre la marcha.

¿Falta algo aquí?

Referencia: http://www.rabbitmq.com/blog/2012/05/14/introducing-rabbitmq-web-stomp/

Respuesta

5

Sí, con RabbitMQ-WebStomp que está bastante limitado a permisos RabbitMQ normales establecidos. No es ideal, pero debería ser capaz de obtener la configuración de permisos básica correcta. Echar un vistazo a documentos RabbitMQ:

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

buscar rápidamente en los documentos Stomp:

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

sí, no se puede establecer permisos para un enrutamiento clave particular. Tal vez deberías usar la semántica de 'intercambio', además de vincular un intercambio con una cola explícitamente (es decir: no usar temas):

/exchange/exchange_name [/ routing_key].

Por favor, haga preguntas concretas sobre los permisos de RMQ en la lista de correo de rabbitmq-discuss. La gente de allí es realmente útil.

Desafortunadamente, el conjunto de permisos de RMQ no es suficiente para algunos escenarios más complejos. En este caso es posible que desee:

  • Uso STOMP sólo para leer de datos, y publicar sólo los mensajes usando alguna de las interfaces AJAX externo que puede hablar directamente con el conejo internamente.
  • o, no use el complemento web-stomp y escriba un puente simple entre SockJS y RabbitMQ manualmente. Esto le da más flexibilidad pero requiere más trabajo.
+0

Terminé usando un intercambio. No es ideal, principalmente porque complica las implementaciones, pero está funcionando. – jbg

7

Probar este https://github.com/simonmacmullen/rabbitmq-auth-backend-http Es mucho más flexible. Básicamente es un pequeño complemento de autenticación para conejo que delega las decisiones de ACL a un script sobre http (del que tiene control total) que solo tiene que responder con "permitir" o "denegar"