kafka 认证

来源:互联网 发布:大话西游手游藕丝数据 编辑:程序博客网 时间:2024/05/21 23:33

简介

kafka从0.9版本开始引入安全体系

(1)支持brokers和client之间的连接认证。使用SSL或者SASL
SASL/GSSAPI (Kerberos) - starting at version 0.9.0.0SASL/PLAIN - starting at version 0.10.0.0SASL/SCRAM-SHA-256 and SASL/SCRAM-SHA-512 - starting at version 0.10.2.0
(2)broker和zookeeper之间的连接认证
(3)数据传输加密,使用SSL
(4)客户端的读写权限授权
(5)授权是可插拔的,并且支持和外部授权服务集成

本文主要关注SASL/PLAIN的认证。其余的有兴趣可以详见kafka官网。

kafka authentication (认证)

ps:需要注意,启用认证后,kafka旧的生产者和消费者api将无法使用,必须用新的api

一.broker 配置
1.kafka_server_jaas.conf

  KafkaServer {            org.apache.kafka.common.security.plain.PlainLoginModule required            username="admin"            password="admin-secret"            user_admin="admin-secret"            user_alice="alice-secret";        };

说明:username和password是broker之间建立连接使用。user_用户=”密码”,定义了clinet和broker通信的用户名和密码。
假设我把这个文件放置到/etc/kafka目录下。

2.修改kafka-server-start.sh,将-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf添加到启动命令。

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf kafka.Kafka "$@"

3.修改server.properties,设置参数

listeners=SASL_PLAINTEXT://hostname:9092security.inter.broker.protocol=SASL_PLAINTEXTsasl.mechanism.inter.broker.protocol=PLAINsasl.enabled.mechanisms=PLAIN

二.客户端配置

1.kafka_client_jaas.conf

KafkaClient {        org.apache.kafka.common.security.plain.PlainLoginModule required        username="alice"        password="alice-secret";};

假定我将将文件放置到/etc/kafka目录下

2.生产者和消费者配置添加参数,可以在自定义的程序中配置properties

security.protocol=SASL_PLAINTEXTsasl.mechanism=PLAIN

3.生产者和消费者启动的时候,需要在启动命令中指定 -Djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf

部署:
直接以官方示例代码为例说明java生产者如何指定:

kafka.examples.Producer

    public Producer(String topic, Boolean isAsync) {    //可以通过system.setProperty来指定验证文件,可以作为调试将环境使用,正式环境可以使用-Djava.security.auth.login.config来指定        System.setProperty("java.security.auth.login.config","D:\\Mtimeworkstation\\Intellij\\kafkatest\\src\\main\\resources\\kafka_client_jaas.conf");        Properties props = new Properties();        props.put("bootstrap.servers", "mtime-bigdata03:9092");        props.put("client.id", "DemoProducer");        props.put("key.serializer", "org.apache.kafka.common.serialization.IntegerSerializer");        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");        //配置文件设置sasl_plaintext认证        props.put("security.protocol","SASL_PLAINTEXT");        props.put("sasl.mechanism","PLAIN");        producer = new KafkaProducer<>(props);        this.topic = topic;        this.isAsync = isAsync;    }
原创粉丝点击