如何限制 Kafka 管理客户端访问控制以授予 acl 权限?



摘要

主要问题是如何保护 Kafka 上 ACL 的设置。ACL 可用于限制谁可以使用/生产主题,但如何限制 ACL 的设置?例如,另一台网络计算机上的某些用户使用kafka-acls.sh

我对 kafka 很陌生,我刚刚设置了我的第一个 kafka 1.0.0 集群,我正在使用 Kafka 管理员 CLI(kafka-acls.sh) 为委托人授予 acl。

这是我发现的问题:我可以在任何其他机器上使用此 kafka-acls.sh 来操作我的 kafka 集群,而无需任何权限?!这是现有的安全问题吗?

我的要求是,作为管理员,对于我的 kafka 主题,我会向消费者授予读取权限。但是,如果消费者所有者可以使用 kafka-acls.sh,他们可以自己添加该权限。

我试过这些:

kafka-acls.sh --授权方属性 zookeeper.connect=localhost:2181 --add --cluster --operation create --deny-principal User:*

kafka-acls.sh --授权方属性 zookeeper.connect=localhost:2181 --add --cluster --operation alter--deny-principal 用户:*

资源Cluster:kafka-cluster的当前 ACL :

用户:* 具有操作的拒绝权限:从主机创建:* 用户:* 具有操作的拒绝权限:从主机更改:*

我希望这可以阻止任何人更改任何主题的 ACL;但我仍然可以向任何委托人授予权限。我希望 kafka 属性文件中的一些设置可以完成这项工作。我关于 ACL 的属性设置是:

# 切换是否启用主题删除,默认值为 false #delete.topic.enable=true

###To 在代理上启用 ZooKeeper 身份验证 zookeeper.set.acl=true

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

super.users=User:Admin

伙计们,有什么想法可以限制管理员 CLI 吗?

任何建议将不胜感激。

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 中,管理客户端包含创建 ACL 的方法。

https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html

然而,目前/bin 中的 CLI 命令尚未重写以使用这个新的 API,这就是为什么它们仍然直接连接到 Zookeeper。

最新更新