Apache Kafka 使用访问控制列表(ACLs)来提供细粒度的安全性,允许你定义哪些用户可以对特定的主题、消费者组或集群执行何种操作。配置和管理Kafka的ACL通常涉及以下几个步骤:
1. 启用安全特性
首先,你需要在Kafka broker上启用安全特性。这包括设置authorizer.class.name
属性来指定授权器类,通常是kafka.security.authorizer.AclAuthorizer
。此外,你可能还需要配置SSL/TLS加密以及SASL(Simple Authentication and Security Layer)认证机制。
例如,在server.properties
文件中添加如下配置:
# 启用ACL
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
# 如果使用SASL/PLAIN,请确保也启用了相应的监听器
listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
2. 创建ACL规则
你可以通过Kafka自带的命令行工具kafka-acls.sh
来创建ACL规则。这里有一些常见的例子:
允许用户读取特定主题:
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ --add --allow-principal User:alice --operation Read --topic my-topic
允许用户写入特定主题:
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ --add --allow-principal User:alice --operation Write --topic my-topic
允许用户消费特定消费者组的消息:
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ --add --allow-principal User:alice --operation Read --consumer-group my-consumer-group
允许所有用户从某个主题读取数据:
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \ --add --allow-principal User:* --operation Read --topic public-topic
注意:从Kafka 2.0.0开始,推荐使用基于Kafka Broker而非Zookeeper的方式来管理ACLs,即使用--bootstrap-server
参数而不是--authorizer-properties
。
3. 查看现有的ACL规则
要查看已有的ACL规则,可以运行以下命令:
kafka-acls.sh --bootstrap-server localhost:9092 --list
4. 删除ACL规则
如果需要删除某条ACL规则,可以使用--remove
选项加上与添加时相同的条件。例如:
kafka-acls.sh --bootstrap-server localhost:9092 \
--remove --allow-principal User:alice --operation Read --topic my-topic
5. 验证ACL规则
最后,你应该验证ACL规则是否按照预期工作。可以通过尝试以不同的用户身份进行生产或消费操作,并检查是否被正确允许或拒绝。
请根据你的具体环境调整上述示例中的主机名、端口等信息。如果你使用的是较新版本的Kafka,建议查阅最新的官方文档获取最新指令和支持的功能。