摘要
主要问题是如何确保在Kafka上设置ACL的设置。 ACL可用于限制谁可以使用/生成主题,但ACL的设置如何受限制?例如。使用kafka-acls.sh
详情
我对kafka很新,我刚刚建立了我的第一个kafka 1.0.0群集,而我正在使用Kafka管理员CLI(kafka-acls.sh)为校长授予acls。
这是我发现的问题:我可以在任何其他机器上使用此kafka-acls.sh来操作我的kafka群集,而无需任何许可?!这是现有的安全问题吗?
我的要求是,作为管理员,对于我的kafka主题,我会向消费者授予读取权限。但如果消费者所有者可以使用kafka-acls.sh,他们可以自己添加该权限。
我试过这些:
kafka-acls.sh --authorizer-properties zookeeper.connect = localhost:2181 --add --cluster --operation创建--deny-principal用户:*
kafka-acls.sh --authorizer-properties zookeeper.connect = localhost:2181 --add --cluster --operation Alter - deny-principal用户:*
资源
Cluster:kafka-cluster
的当前ACL:用户:*拥有拒绝操作权限:从主机创建:* 用户:*具有拒绝操作权限:来自主机:*
我希望这可以阻止任何人更改任何主题的ACL;但我仍然可以给任何委托人许可。我期待kafka属性文件中的一些设置可以完成工作。我关于ACL的属性设置是:
#切换到是否启用主题删除,默认值为false #delete.topic.enable =真
###在代理上启用ZooKeeper身份验证 zookeeper.set.acl =真
authorizer.class.name = kafka.security.auth.SimpleAclAuthorizer
super.users =用户:管理
任何限制管理员CLI的想法,伙计们?
任何建议都将不胜感激。
答案 0 :(得分:1)
ACL存储在Zookeeper中,因此您需要以安全模式运行Zookeeper并具有经过身份验证的访问权限(需要Apache Kafka 0.9或更高版本)。
https://cwiki.apache.org/confluence/display/KAFKA/KIP-38%3A+ZooKeeper+Authentication
这将允许您限制ACL管理工具在任何地方和任何人工作,因为它们包含一个zookeeper客户端,必须配置有效的管理员凭据才能连接和更改存储在Zookeeper中的Kafka ACL。
本博客文章中介绍了安全Kafka代理和Zookeeper设置示例 https://www.confluent.io/blog/apache-kafka-security-authorization-authentication-encryption/
在更新版本的Apache Kafka中,还有一个名为AdminClient的API,它允许在没有直接的Zookeeper依赖关系或连接的情况下编写应用程序。在1.0.0中,AdminClient包含创建ACL的方法。
https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html
但是目前还没有重写/ bin中的CLI命令来使用这个新的API,这就是为什么它们仍然直接连接到Zookeeper。