RabbitMQ中的私人消息。选择什么:验证的用户ID,每个客户端的队列,每个客户端的vhost?

时间:2017-04-25 22:38:04

标签: rabbitmq

我正在构建一个向动态数量的消费者提供私人消息的系统。消费者使用他们自己的用户名/密码订阅队列并等待消息(消费者也可以发送消息)。该消息包含敏感信息。

问题是,如何确保(以安全的方式)发布者向消费者1"将仅由" consumers1"收到。我做了一些研究:

  1. Validated User-ID + VPN
  2. 每个客户端的write-queue-each和每个客户端的send-queue
  3. vhost-per-client(有2个队列)
  4. 哪种方法最安全? VPN是否是备选方案1中TLS / SSL的良好替代品?选项1似乎是最简单的实现和维护,但是它足够安全吗?

1 个答案:

答案 0 :(得分:0)

选项1.验证的用户ID为发布消息的客户端提供有限的身份验证。这是你的情况吗?或客户是消费者?如果他们只是消费者,那么我不会看到经验证的用户ID有帮助。 VPN阻止中间人嗅探你的客户凭证,我认为这是TLS的良好替代品。

选项2,结合每个客户端的适当权限(读取权限,命名客户端应限制的队列)将阻止其他一个客户端读取另一个客户端的消息。

选项3与选项2类似,但由于虚拟主机充当安全边界,因此即使权限设置不正确,一个客户端也无法读取另一个客户端的消息。

还要考虑贵组织的安全漏洞。具有敏感数据的邮件将在您的RabbitMQ群集中未加密。您可能还希望对邮件正文进行加密,但这会大大增加复杂性。

如果是我的系统,我真的很关心客户端隔离和客户端数据的保护,我至少会:

  • 使用TLS保护互联网上的凭据和数据(客户端到RabbitMQ)
  • 强制使用用户标头
  • 将每个客户端放在一个单独的vhost

然后取决于它的实际程度(以及我是多么偏执):