kafka-ACL

发布时间 2023-10-26 09:51:49作者: 坚强的小蚂蚁

本文档时在centos7直接部署添加认证的kafka文件基础上,做下面的修改实现ACL访问控制topic

参考:https://www.seaxiang.com/blog/Qpsqii

一. 添加多个kafka用户及相关的配置文件

1.kafka_server_jaas.conf
KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin"
    user_admin="admin"
    user_wyk_reader="wyk_reader_pwd"
    user_wyk_writer="wyk_writer_pwd"
    user_no_acl="no_acl_pwd";
};
KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin"
        user_admin="admin"
        user_wyk_reader="wyk_reader_pwd"
        user_wyk_writer="wyk_writer_pwd"
        user_no_acl="no_acl_pwd";
};

Client {
    org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin"
        user_admin="admin"
        user_wyk_reader="wyk_reader_pwd"
        user_wyk_writer="wyk_writer_pwd"
        user_no_acl="no_acl_pwd";
};
2.kafka_zoo_jaas.conf
ZKServer{
    org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin"
        user_admin="admin"
        user_wyk_reader="wyk_reader_pwd"
        user_wyk_writer="wyk_writer_pwd"
        user_no_acl="no_acl_pwd";
};
3.新增生产者配置文件wyk_writer_jaas.conf
KafkaClient { 
	 org.apache.kafka.common.security.plain.PlainLoginModule required
     username="wyk_writer"
     password="wyk_writer_pwd";
     };
4.新增消费者配置文件wyk_reader_jaas.conf
KafkaClient {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="wyk_reader"
        password="wyk_reader_pwd";
};

二. ACL授权及验证

我们已经开启了SASL,并给控制台客户端配置了生产者和消费者的认证文件,下面我们来测试授权之后和未授权用户的区别

为了起到对比效果,我们先新增一个认证文件用户为no_acl的配置文件no_acl_jaas.conf

1.创建配置文件no_acl_jaas.conf
vim no_acl_jaas.conf
KafkaClient {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="no_acl"
        password="no_acl_pwd";
};
2.给用户对测试主题csdn01授权

使用下面的命令行授权用户 wyk_reader 对主题csdn01 的读权限,授权用户 wyk_writer 对主题csdn01 的写权限,no_acl用户不设置任何权限用做对比。

# 给用户wyk_writer 添加csdn01主题的 生产者权限
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=10.255.60.149:2181 --add --allow-principal User:wyk_writer --operation Write --topic csdn01

# 给用户wyk_reader 添加csdn01主题的 消费者权限
#需要注意这里消费者还需要给消费者组配置权限,消费者组名称要和consumer.properties中配置的group.id一致
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=10.255.60.149:2181 --add --allow-principal User:wyk_reader --operation Read --topic csdn01 --group test-consumer-group
3.验证ACL权限

首先在kafka-console-producer.sh中使用no_acl_jaas.conf配置文件

image-20230713170506273

使用下面命令生产消息时报错未授权

./kafka-console-producer.sh --topic csdn01 --broker-list 10.255.60.149:9092 --producer.config /data/kafka/config/producer.properties

image-20230713170703280

然后在kafka-console-producer.sh中使用wyk_writer_jaas.conf配置文件时,生产消息正常

image-20230713170826032

同样的,当使用no_acl用户作为消费者时可以看到启动时会报错:Not authorized to access topics:[csdn01]。而使用拥有csdn01主题的消费者权限的用户wyk_reader启动时可以正常的消费数据: