Apache kafka 动物园管理员和卡夫卡与SASL安全

Apache kafka 动物园管理员和卡夫卡与SASL安全,apache-kafka,apache-zookeeper,sasl,Apache Kafka,Apache Zookeeper,Sasl,我已经安装了一个具有安全性的卡夫卡集群,它工作正常 根据文档,我使用命令kafka configs.sh创建用户名和密码,并授予该用户访问主题的权限 这也很有效 但是,kafka configs.sh命令本身不需要任何类型的身份验证,因此我想到,任何人都可以运行该命令,在kafka中创建自己的用户,并授予自己的权限 也许我需要在Zookeeper上启用SASL安全性?但我找不到任何关于如何做到这一点的一致或有效的文档。向zookeeper.config添加属性,如requireclientaut

我已经安装了一个具有安全性的卡夫卡集群,它工作正常

根据文档,我使用命令
kafka configs.sh
创建用户名和密码,并授予该用户访问主题的权限

这也很有效

但是,
kafka configs.sh
命令本身不需要任何类型的身份验证,因此我想到,任何人都可以运行该命令,在kafka中创建自己的用户,并授予自己的权限

也许我需要在Zookeeper上启用SASL安全性?但我找不到任何关于如何做到这一点的一致或有效的文档。向
zookeeper.config
添加属性,如
requireclientauthscheme=sasl
似乎没有任何作用。或者至少它不会停止在没有任何身份验证的情况下在zookeeper中创建新用户

我是不是在走一条可行的道路?或者我需要备份并做一些不同的事情

作为参考,我使用Kafka 1.0.0和Zookeper 3.4.11。但是如果其他版本更好的话,我在版本上是灵活的

感谢您的帮助!:)


谢谢

我终于找到了解决这个问题的方法。:)

基本上,您需要使用Zookeeper的on
setAcl
命令锁定节点
/config/users
。关于如何使用SASL对Zookeeper ACL进行身份验证的文档充其量也很差。使用
addauth
进行身份验证的正常Zookeeper机制对SASL不起作用,因为SASL必须在启动时发生,而不是Zookeeper期望的更晚

setAcl
的语法很复杂,如果你搞错了,你可以永远把自己锁在外面。所以要小心。但Zookeeper确实有办法在启动时注入超级用户,让自己摆脱这种情况

因此,对于您的
kafka configs.sh
,您必须指定
-Djava.security.auth.login.config=[some file]
参数以将客户端凭据传递给Zookeeper。服务器凭据同样位于Zookeeper服务器上的JAAS文件中

如果有人需要我的解决方案,我可以提供更多的技术细节,但不知何故,我怀疑我是少数几个试图使用SASL_紧急停堆来认真保护卡夫卡和动物园管理员的人之一。:)


不过,我确实希望SASL_SCRAM能流行起来,因为Kerberos是一种三头野兽式的技术,除非我必须使用,否则我宁愿不使用它P

Hi Bicker,你能详细解释一下用SASL_紧急停堆保护卡夫卡动物园管理员的过程吗。我还想知道这个方案是否可以防止中间人攻击,或者我是否还需要启用SSL。对于Kafka,我使用的是SASL_SCRAM over SSL。但是,Zookeeper不支持SASL_紧急停堆。Zookeeper甚至不支持SSL!“kafka ACL”命令将在Zookeeper中存储kafka的ACL。因此,您需要设置ACL以保护Zookeeper中的/config/users。作为用户“超级”进行身份验证需要为Zookeeper启用DigestLoginModule安全性。缺少SSL仍然是一个问题,但当您发出kafka acls命令时,必须有人嗅探流量,这不是完美的安全性,但它会阻止临时数据访问者访问。:)我目前的策略是确保zookeeper集群访问我们的专有网络,并在kafka集群中为代理间通信启用SSL。是否有为卡夫卡设置SASL_紧急停堆的文件。请提供使用的配置步骤。是的,我发现这一页非常有用:它是Confluent的文档,但这一部分也100%适用于普通卡夫卡