Summary
主要问题是如何确保在Kafka上设置ACL的设置 . ACL可用于限制谁可以使用/生成主题,但ACL的设置如何受限制?例如 . 使用 kafka-acls.sh
的另一台网络机器上的某些用户
Details
我是kafka的新手,我刚刚 Build 了我的第一个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 Create --deny-principal用户:* kafka-acls.sh --authorizer-properties zookeeper.connect = localhost:2181 --add --cluster --operation Alter - deny-principal用户:*资源的当前ACL集群:kafka-cluster:用户:*具有拒绝操作权限:从主机创建:*用户:已拒绝操作许可:来自主持人:
我希望这可以阻止任何人更改任何主题的ACL;但我仍然可以给任何委托人许可 . 我期待kafka属性文件中的一些设置可以完成工作 . 我关于ACL的属性设置是:
#切换到是否启用主题删除,默认值为false#delete.topic.enable = true ###在代理上启用ZooKeeper身份验证zookeeper.set.acl = true authorizer.class.name = kafka.security.auth . SimpleAclAuthorizer super.users = User:Admin
各种想法限制管理CLI,伙计们?
任何意见,将不胜感激 .
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 .