返回到文章

采纳

编辑于

kafka使用SASL/PLAIN认证

SASL之PLAIN认证
kafka
kafka
安全

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认证