title: How can queues be made private/secure in RabbitMQ in a multitenancy system?
body: <p>I have read the <a href="http://www.rabbitmq.com/getstarted.html" rel="noreferrer">Get Started</a> guide provided by RabbitMQ and have even contributed the sixth example to <a href="https://github.com/paolo-losi/stormed-amqp/tree/master/examples/tutorial6" rel="noreferrer">stormed-amqp</a>, so I have an inkling of knowledge about AMQP.</p>
  
  <p>However, the guide is not comprehensive and avoids things like authentication and authorization.</p>
  
  <p>We're designing a multitenancy system that will use RabbitMQ in an RPC-type of situation. What is perhaps different about this implementation of RPC is that the remote procedures will actually be other tenant programs on the system.</p>
  
  <p>Basically, I want to isolate the data buses, which includes the following assertions:</p>
  
  <ol>
  <li>Our server <em>will not</em> deliver data to the wrong tenant program (this is handled easily and is relevant but not questioned).</li>
  <li>Tenant programs are not be able to read data from queues that aren't theirs.</li>
  <li>Tenant programs are not be able to write to queues that aren't theirs.</li>
  </ol>
  
  <p>This question is strictly about RabbitMQ security. I know that RabbitMQ supports SSL, which provides end-to-end encryption, and I know RabbitMQ supports username/password authentication. I don't know if these things apply to privatizing queue usage (aka ACL), i.e. the connection may be encrypted, and the user may be verified, but the user can read to / write from all the queues.</p>
  
  <p>Can anybody enlighten me on this more advanced topic? I'm confident that RabbitMQ can support this sort of system but not exactly positive. I know there are things in RabbitMQ that I just don't know about, e.g. what are vhosts and will they help in this situation? I just don't see the solution in my current knowledge limited to routing keys, queue names and exchanges.</p>