kafka 认证

简介

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

(1)支持brokers和client之间的连接认证。使用SSL或者SASL
SASL/GSSAPI (Kerberos) - starting at version 0.9.0.0
SASL/PLAIN - starting at version 0.10.0.0
SASL/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:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.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_PLAINTEXT
sasl.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;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值