kafka使用SASL/PLAIN认证

半兽人 发表于: 2019-10-18   最后更新时间: 2022-01-02 18:27:36  
{{totalSubscript}} 订阅, 13,654 游览

SASL/PLAIN是一种简单的用户名/密码的认证机制,通常与TLS加密一起使用,以实现安全的认证。Kafka支持SASL/PLAIN的默认实现,可作为生产者的扩展使用。

username用作ACL等配置已认证的Principal

1. 配置Kafka Brokers

  1. 在每个Kafka broker的config目录下添加一个类似于下面的修改后的JAAS文件,我们姑且将其称为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";
           };
    

    此配置定义了2个用户(adminalice)。 在KafkaServer中,usernamepassword是broker用于初始化连接到其他的broker,在这个例子中,admin是broker之间通信的用户。user_userName定义了连接到broker的所有用户的密码,broker使用这些来验证所有客户端的连接,包括来自其他的broker的连接。

  2. 将JAAS配置文件位置作为JVM参数传递给每个Kafka broker:

    -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf
    
  3. 在server.properties中配置SASL端口和SASL机制。 例如:

    listeners=SASL_SSL://host.name:port
    security.inter.broker.protocol=SASL_SSL
    sasl.mechanism.inter.broker.protocol=PLAIN
    sasl.enabled.mechanisms=PLAIN
    

2. 配置kafka客户端

在客户端上配置SASL身份验证:

  1. 为producer.properties或consumer.properties中的每个客户端配置JAAS。登录模块展示了客户端如何连接Broker的(和生产者和消费者一样)。以下是PLAIN机制的客户端的示例配置:

    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
      username="alice" \
      password="alice-secret";
    

    客户端选择用户名和密码为客户端配置连接的用户。 在此示例中,客户端以用户alice连接到broker。也可以通过在sasl.jaas.config中指定不同的用户名和密码,JVM中的不同客户端可以根据不同的用户来进行连接。

    客户端的JAAS配置可以指定为类似于这里描述的broker作为JVM参数。客户端使用的命名为KafkaClient。 此选项仅允许来自JVM的所有客户端连接中的一个用户。

  2. 在producer.properties或consumer.properties中配置以下属性:

     security.protocol=SASL_SSL
     sasl.mechanism=PLAIN
    

3. 在生产者中使用SASL/PLAIN

  • SASL/PLAIN应仅用SSL作为传输层,以确保在没有加密的情况下不会在线上明文传输。

  • Kafka中SASL / PLAIN的默认实现在JAAS配置文件中指定用户名和密码,如下所示。 从Kafka 2.0版开始,您可以通过使用配置sasl.server.callback.handler.classsasl.client.callback.handler.class配置自己的回调处理程序来从外部源获取用户名和密码,从而避免在磁盘上存储明文密码。

  • 在生产系统中,外部认证服务器可以实现密码认证。从Kafka 2.0版开始,可以通过配置sasl.server.callback.handler.class使用外部身份验证服务器进行密码验证的自己的回调处理程序。

实战笔记

kafka实战SASL/PLAIN认证
kafka实战SASL/SSL认证

更新于 2022-01-02
在线,6小时前登录

tiiimo 2年前

你好,这种可以动态添加用户吗?不重启kafka的方式?

半兽人 -> tiiimo 2年前

达咩

马先生 2年前

老师你好,有个问题:我的kafka需要公网访问,客户端需要通过用户,密码访问,应该怎么配置,lisntenrs和advertised.listeners应该如何配置呢,listeners=SASL_PLAINTEXT://172.26.40.149:9092
advertised.listeners=SASL_PLAINTEXT://47.92.239.56:9092 我这么配置了之后,kafka起不来,

老师您好,我有个问题:我的一个kafka集群(暂且称为kafka1集群)已经使用了SASL/PLAIN认证,其他的kafka集群(kafka2集群)想要从我这个kafka1集群取数据,那kafka2集群该怎么配置呢?

取消息?你是指kafka连接器的方式取吗?
kafka2作为客户端去消费kafka1的消息,那就是走客户端认证。

好的,谢谢老师!我配置了KafkaClient和consumer,已经取成功了。

大神,kafka SASL之PLAIN认证 在docker容器中怎么配置???启动容器的时候指定吗???怎么配置???

嗯,启动前配置

有具体的启动命令吗?我试了好多,启动容器就挂了,不知道该指定啥参数。zookeeper还需要配置吗?zookeeper集群和kafka集群都是单独的一个容器

容器的启动和vm运行kafka是一样的,运行的成功与否跟容器没太大关系。你可以加个休眠命令,进到容器里调试排查故障。

我的意思是,在启动容器的时候,怎么设定SASL/PLAIN认证,需要指定哪些参数。我在启动容器时添加了一些参数,参数好像不对或者不全导致容器启动就失败

有个疑问,我的kafka的SASL安全认证已经配置完成,但是我的logstash想要从kafka取数据,该怎么在logstash的input里配置认证?

查看kafka更多相关的文章或提一个关于kafka的问题,也可以与我们一起分享文章