具有 SASL 安全性的 Zookeeper 和 Kafka
Posted
技术标签:
【中文标题】具有 SASL 安全性的 Zookeeper 和 Kafka【英文标题】:Zookeeper and Kafka with SASL security 【发布时间】:2018-06-17 21:42:18 【问题描述】:我已经设置了一个具有SASL SCRAM 安全性的 Kafka 集群,它工作正常。
根据文档,我使用命令kafka-configs.sh
创建用户名和密码并授予该用户访问主题的权限。
这也很好用。
但是,kafka-configs.sh
命令本身不需要任何类型的身份验证,因此我想到任何人都可以运行该命令并在 Kafka 中创建自己的用户并授予自己的权限。
也许我需要在 Zookeeper 上启用 SASL 安全性?但我找不到任何关于如何做到这一点的一致或有效的文档。像requireclientauthscheme=sasl
这样向zookeeper.config
添加属性似乎没有任何作用。或者至少它不会阻止kafka-configs.sh
在没有任何身份验证的情况下在 zookeeper 中创建新用户。
我什至会走上一条可行的道路吗?还是我需要备份并做一些不同的事情?
作为参考,我使用的是 Kafka 1.0.0 和 Zookeper 3.4.11。但如果其他版本效果更好,我会灵活选择版本。
任何帮助表示赞赏! :)
谢谢!
【问题讨论】:
【参考方案1】:我终于破解了这个问题的解决方案。 :)
基本上,你需要使用Zookeeper的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_SCRAM 认真保护 Kafka 和 Zookeeper 的人之一。 :)
我确实希望 SASL_SCRAM 能够流行起来,因为 Kerberos 是一种三头技术野兽,除非必须,否则我宁愿不使用它。 :P
【讨论】:
嗨 Beaker,您能否详细解释一下您使用 SASL_SCRAM 保护 kafka-zookeeper 的过程。我还想知道这个方案是否可以防止中间人攻击,或者我是否必须另外启用 SSL。 对于 Kafka,我使用 SASL_SCRAM over SSL 来处理所有事情。但是,Zookeeper 不支持 SASL_SCRAM。 Zookeeper 甚至不支持 SSL! “kafka-acls”命令将 Kafka 的 ACL 存储在 Zookeeper 中。所以你需要设置一个 ACL 来保护 Zookeeper 中的 /config/users。作为用户“super”的身份验证需要为 Zookeeper 启用 DigestLoginModule 安全性。缺少 SSL 仍然是一个问题,但是当您发出 kafka-acls 命令时,必须有人在嗅探流量,这不是完美的安全性,但它会阻止临时数据浏览者获得访问权限。 :) 我目前的策略是保护 Zookeeper 集群对我们 VPC 内的访问,并为 kafka 集群中的代理间通信启用 SSL。是否有您遵循为 kafka 设置 SASL_SCRAM 的文档? .请提供使用的配置步骤。 是的,我发现这个页面最有帮助:docs.confluent.io/current/kafka/authentication_sasl_scram.html 这是 Confluent 的文档,但这部分也 100% 应用于普通 Kafka以上是关于具有 SASL 安全性的 Zookeeper 和 Kafka的主要内容,如果未能解决你的问题,请参考以下文章