我已经设置了一个SASL SCRAM安全性的Kafka群集,它运行正常。
根据文档,我使用命令kafka-configs.sh
创建用户名和密码,并授予该用户对主题的访问权限。
这也很有效。
但是,kafka-configs.sh
命令本身不需要任何类型的身份验证,因此我发现任何人都可以运行该命令并在Kafka中创建自己的用户并授予他们自己的权限。
也许我需要在Zookeeper上启用SASL安全性?但我找不到任何关于如何做到这一点的一致或有效的文件。向zookeeper.config
requireclientauthscheme=sasl
添加属性似乎没有做任何事情。或者至少它不会阻止kafka-configs.sh
在没有任何形式的身份验证的情况下在zookeeper中创建新用户。
我甚至在这里走下了可行的道路吗?或者我需要备份并做一些不同的事情吗?
供参考,我使用的是Kafka 1.0.0和Zookeper 3.4.11。但是如果其他版本更好的话,我对版本很灵活。
任何帮助表示赞赏! :)
谢谢!
答案 0 :(得分:2)
我终于通过解决方案破解了这个问题。 :)
基本上,您需要在setAcl
命令上使用Zookeeper来锁定节点/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_SCRAM认真保护Kafka和Zookeeper的人之一。 :)
我确实希望SASL_SCRAM能够抓住,因为Kerberos是一种技术的三头兽,除非必须,否则我不会使用它。 :P