Apache kafka 卡夫卡安全:只允许特定用户在单个主题内阅读特定消息

Apache kafka 卡夫卡安全:只允许特定用户在单个主题内阅读特定消息,apache-kafka,Apache Kafka,我有一个要求,在卡夫卡的一个“市场数据”主题中,我们将“火爆”一堆不同提供商的财务价格信息。问题是,其中一些提供商有细粒度的许可要求,甚至包括单个证券。在不为每个不同的许可粒度创建不同主题的情况下,有没有办法防止Kafka客户端接收基于消息内部内容的信息?IE卡夫卡可以进行细粒度的主题内许可吗 如果不是,那么这方面的规范解决方案是什么?否。开箱即用的Apache Kafka无法进行“细粒度主题内许可” 您必须编写自定义卡夫卡序列化程序/反序列化程序(SerDes)库,或者在中间实现自己的权限服务

我有一个要求,在卡夫卡的一个“市场数据”主题中,我们将“火爆”一堆不同提供商的财务价格信息。问题是,其中一些提供商有细粒度的许可要求,甚至包括单个证券。在不为每个不同的许可粒度创建不同主题的情况下,有没有办法防止Kafka客户端接收基于消息内部内容的信息?IE卡夫卡可以进行细粒度的主题内许可吗


如果不是,那么这方面的规范解决方案是什么?

否。开箱即用的Apache Kafka无法进行“细粒度主题内许可”

您必须编写自定义卡夫卡序列化程序/反序列化程序(SerDes)库,或者在中间实现自己的权限服务器,以提供基于角色的访问控制(RBAC)和基于内容的过滤。 如果您将数据分成不同的主题,那么是的,基本卡夫卡ACL可以控制对主题的访问,但这不是最初的问题,您不会在卡夫卡中创建600万个主题

最初的问题是关于有一个主题混合了不同类型的数据。为此,您需要有一个客户端反序列化程序,该程序读取所有数据,然后根据授权服务器所说的允许查看的内容过滤掉某些消息


如果您担心客户端永远不应该接收不允许接收的数据,即使是在客户端堆栈的深处,那么您可以使用不同的密钥加密消息,并可以控制谁获得密钥

好吧,Kafka没有服务器端安全功能允许您根据消息内容过滤消费者收到的消息。如果您控制客户端,您可以在消费者级别进行过滤。@AlexandreJuma好的。但我们至少在主题级别上有许可粒度吗?IE消费者1可以看到主题A、B、C,但不能看到主题D和E,消费者2可以看到主题C、D和E,但不能看到主题A和B?如果是这种情况,那么我可能可以使用主题来解决这个问题,因为我刚刚读到一篇文章,其中的主题可能比我最初认为的要多得多。如果使用不同的密钥加密消息,则可以控制谁获得密钥。如果创建延迟服务器,则通常可以更自由地分发exchange数据。如果您创建了一个授权服务器,那么您可以控制谁可以连接到授权服务器,以及过滤哪些消息类型(例如,实现为KSQL查询或KSQL UDF),KSQL是合流社区授权的,因此是免费的,并且源是可用的。让我们对消息进行基于内容的过滤,或者输出到另一个主题,或者通过HTTP(s)直接流式传输到客户端,因此根本不通过kafka客户端。我没有关于授权服务器的博客,但这是所有市场数据分发系统(MDD)的常见问题,包括非卡夫卡系统。汤普森路透、彭博社和其他人都在消息之上编写自己的MDD。例如,Xignite()在Kafka之上构建了一个完整的MDD,其中包含来自世界各地的所有Exchange提要,并作为一项服务提供。这在技术上是如何工作的?我假设不同的许可“颗粒”需要它们自己的主题?例如,如果允许消费者A使用“CME_数据”主题,但不允许使用“Reuters_数据”主题,卡夫卡能否确保消费者A只接收CME_数据主题上携带的消息?因为我可以看到您将如何从授权服务器获得不同的权限,但我不知道技术上它将如何“打开”Kafka上为您提供的某些源。如果数据位于单独的主题中,则正常的Kafka ACL将起作用,但如果您有一个主题包含混合数据,则需要客户端代码读取所有数据,然后过滤用户无权从流中看到的消息。如果您在授权服务器中更改了授权规则,那么下次反序列化程序检查新的授权规则时,它将开始应用新的筛选并允许或拒绝某些消息。我已冒昧地将您的所有评论浓缩到一个(非常好-谢谢)答案中。如果您愿意,请随时撤销。