Kafka SASL_PLAINTEXT权限管理,并整合SpringBoot

在这里插入图片描述

使用SASL/PLAIN进行身份验证

SASL/PLAIN是一种简单的用户名/密码身份验证机制,通常与TLS一起用于加密以实现安全身份验证。Kafka支持SASL/PLAIN的默认实现,可以扩展到生产环境中使用

1. Kafka brokers 配置:

1)kafka增加认证信息:

向每个Kafka代理的配置目录中添加一个经过适当修改的类似于下面的JAAS文件

在kafka的配置文件中创建JAAS文件:

新建: kafka_jaas.conf 写入以下内容

KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-sec"
user_admin="admin-sec"
user_producer="prod-sec"
user_consumer="cons-sec";
};

在这里插入图片描述
JAAS文件定义了链接Kafka Broker时所需要的用户名密码及broker各个节点之间相互通信的用户名密码

  • username定义一个公共的用户名,用于节点之间进行通信,
  • user_xxxx 为自定义的用户,主要是客户端用来连接kafka的,所有可以使用的用户必须在此定义,不能再之后新增。等号后面是密码xxxxx是用户名,这里大小写一个字都不能差,除了用户名和密码

producer用于开放生产权限。
consumer用于开放消费权限。

username/ password:broker之间通信使用的用户名密码。
user_admin/user_producer/user_consumer:客户端(管理员、生产者、消费者)链接broker时所使用到的用户名密码。

2)修改kafka启动脚本:kafka-server-start.sh

将JAAS配置文件位置作为JVM参数传递给每个Kafka代理

-Djava.security.auth.login.config=/root/ysw/sasl_kafka_zk/kafka/config/kafka_jaas.conf

找到 export KAFKA_HEAP_OPTS,添加jvm 参数,注意kafka_jaas.conf文件是之前第一步创建的安全认证文件
在这里插入图片描述

exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/root/ysw/sasl_kafka_zk/kafka/config/kafka_jaas.conf kafka.Kafka "$@"

3)修改 kafka 配置文件下的server.properties

配置服务器中的SASL端口和SASL机制,所涉及的属性如下

listeners=SASL_PLAINTEXT://主机名称:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true //当没有找到ACL配置时,允许所有的访问操作。

allow.everyone.if.no.acl.found=true 时,整个ACL机制为黑名单机制,即只有黑名单中的用户不能访问资源,非黑名中的用户都可以正常访问kafka的资源
allow.everyone.if.no.acl.found=false时, 也就是默认为false,ACL的机制是白名单机制,只有白名单中的用户才能访问kafka的资源,其他用户为未授权用户。

启动kafka

bin/kafka-server-start.sh config/server.properties

如果是kafka集群,其他节点,也要按照这样进行配置即可

2. Kafka客户端(clients)配置

broker开启了SASL也 要在客户端上配置SASL身份验证

1)创建JAAS文件:

  • 在kafka 配置文件中新建消费者:kafka_client_consumer_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="consumer"
password="cons-sec";
};

在这里插入图片描述

  • 在kafka 配置文件中新建消费者: 生产者:kafka_client_producer_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="producer"
password="prod-sec";
};

在这里插入图片描述
在这里插入图片描述

2)修改客户端脚本指定JAAS文件加载:

将JAAS配置文件位置作为JVM参数传递给每个客户机JVM

  • 修改生产启动脚本: kafka-console-producer.sh

在这里插入图片描述

-Djava.security.auth.login.config=/root/ysw/kafka_zk_alone/kafka_alone/config/kafka_client_producer_jaas.conf
  • 修改生产启动脚本: kafka-console-consumer.sh
    在这里插入图片描述
exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/root/ysw/kafka_zk_alone/kafka_alone/config/kafka_client_consumer_jaas.conf kafka.tools.ConsoleConsumer "$@"

3)修改客户端配置信息:

分别在producer.properties和consumer.properties添加认证机制

  • producer.properties:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
  • consumer.properties:
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN

# consumer group id
group.id=ysw-group-sasl

在这里插入图片描述

3. 生产消费测试

  • 生产
    不指定配置文件,会报连接错误
bin/kafka-console-producer.sh --broker-list kafka2:9099 --topic test

指定配置文件

bin/kafka-console-producer.sh --broker-list kafka2:9099 --topic test --producer.config config/producer.properties
  • 消费:
bin/kafka-console-consumer.sh --bootstrap-server kafka2:9099 --topic test --from-beginning --consumer.config config/consumer.properties

3. SpringBoot 整合SASL(使用java api来使用客户端)

  1. 新建kafka_client_jaas.conf添加如下内容
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="producer"
password="prod-sec";
};
  1. 代码中主要添加如下内容
    在这里插入图片描述
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Properties;

public class CustomConsumerSasl extends Thread{


    KafkaConsumer<String, String> consumer;
    
    public CustomConsumerSasl() {
        Properties properties = new Properties();
        //连接的集群
        //"kafka1:9092,kafka2:9092,kafka3:9092"
        properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka3:9092");
        //消费组
        properties.setProperty("group.id", "test2");
        //此参数有效条件 默认值是latest 及最大可消费offset也是最新发布存入的消息offset
        //1.还在同一个消费组消费但是之前的最小可消费offset已经不存在
        // 或者换了一个组去消费
        properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest");
        //关闭自动提交offset
        properties.put("enable.auto.commit", "false");
        //properties.put("max.poll.records",2);

//6235213288010379048
        //开启自动提交
     //  properties.put("enable.auto.commit", "true");
     //  properties.put("auto.commit.interval.ms", "1000");
        //反序列化key val
        properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        /**添加SASL权限认证后的需要添加的内容==================begin=======================*/

        //接入协议为SASL_SSL, 鉴权方式为PLAIN
        properties.put("sasl.mechanism","PLAIN");
        properties.put("security.protocol","SASL_PLAINTEXT");
       // properties.put("sasl.jaas.config","org.apache.kafka.common.security.plain.PlainLoginModule required username=\"producer\" password=\"prod-sec\"");


        /**
         * 将应用启动参数java.security.auth.login.config设置为kafka_client_jaas.conf的绝对路径,可以通过代码或者启动参数设置。
         * 注意 : spring boot配置中可以不需要的这个kafka_client_jaas.conf,它通过读取application.yaml中的配置生成了一个
         * 为客户端节点的认证文件:kafka_client_jaas.conf的内容为:
         * KafkaClient {
         * org.apache.kafka.common.security.plain.PlainLoginModule required
         * username="producer"
         * password="prod-sec";
         * };
         *
         */

        System.setProperty("java.security.auth.login.config", "E:/apps/kafka_client_jaas.conf");
        /**添加SASL权限认证后的需要添加的内容==================end=======================*/

        //创建消费者
        consumer = new KafkaConsumer<String, String>(properties);
        订阅主题指定topic
       consumer.subscribe(Arrays.asList("test"));
        //consumer.subscribe(Arrays.asList("bigdata2","bigdata3"));


    }

    @Override
    public void run() {
        long i = 0;
        // 一般生产这开启就不需要关闭了
        while (true) {
            //获取取数     每次拉去会获取多条数据,默认500
            ConsumerRecords<String, String> records = consumer.poll(1000);
            for (ConsumerRecord<String, String> recode : records) {
i++;
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String dateString = formatter.format(recode.timestamp());
//解析打印ConsumerRecords
                System.out.println(i +"   timestamp= " + dateString + "       partition=" + recode.partition() + "         recodeOffset = " + recode.offset() + "   " + "recodeValue = " + recode.value());
            }
            System.out.println("===================================");
        }
    }



    public static void main(String[] args) {
        new CustomConsumerSasl().start();


        // new MyConsumer().setConsumerTest();
    }
}

参考:https://www.jianshu.com/p/09129c9f4c80

使用SASL机制的KAFKA集群的安装:(包含springBoot整合)

阿里云社区zookeeper和kafka的SASL认证以及生产实践
Kafka安全认证SASL/PLAIN,并和springBoot整合

Spring Boot + Spring Kafka配置公网接入阿里云Kafka

K SASL(Simple Authentication and Security Layer)是一种用于认证和安全的机制。在Kafka中,可以通过在producer.properties或consumer.properties配置文件中设置以下属性来启用SASL认证:security.protocol=SASL_PLAINTEXT(或SASL_SSL)、sasl.mechanism=GSSAPI、sasl.kerberos.service.name=kafka。这些配置用于指定认证协议、SASL机制和Kafka服务的Kerberos服务名称。 Kafka支持四种SASL机制:GSSAPI(Kerberos)、PLAIN、SCRAM-SHA-256和SCRAM-SHA-512。其中,GSSAPI是一种使用Kerberos的机制,PLAIN是一种简单的用户名和密码认证机制,而SCRAM-SHA-256和SCRAM-SHA-512是基于Salted Challenge Response Authentication Mechanism的机制。 SASL/PLAIN是一种简单的用户名和密码认证机制,通常与TLS(Transport Layer Security,传输层安全)一起使用以加密和实现安全认证。在Kafka中,默认提供了SASL/PLAIN的实现,可以作为生产者的扩展使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [kafkasasl配置](https://blog.csdn.net/asdfsadfasdfsa/article/details/104546740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [kafka安全认证与授权(SASL/PLAIN)](https://blog.csdn.net/u011618288/article/details/128959762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值