如何限制授予 acl 权限的 Kafka Admin Client 访问控制?

How to restrict Kafka Admin Client access control for granting acl permissions?

总结

主要问题是如何保护 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 Create --deny-principal User:*

kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --cluster --operation Alter--deny-principal User:*

Current ACLs for resource Cluster:kafka-cluster:

User:* has Deny permission for operations: Create from hosts: * User:* has Deny permission for operations: Alter from hosts: *

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

# Switch to enable topic deletion or not, default value is false #delete.topic.enable=true

###To enable ZooKeeper authentication on brokers 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 设置示例 post 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 的原因。