SASL/PLAIN是一种简单的用户名/密码
的认证机制,通常与TLS加密一起使用,以实现安全的认证。Kafka支持SASL/PLAIN的默认实现,可作为生产者的扩展使用。
username用作ACL等配置已认证的Principal
。
1. 配置Kafka Brokers
在每个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个用户(admin 和 alice)。 在
KafkaServer
中,username
和password
是broker用于初始化连接到其他的broker,在这个例子中,admin是broker之间通信的用户。user_userName
定义了连接到broker的所有用户的密码,broker使用这些来验证所有客户端的连接,包括来自其他的broker的连接。将JAAS配置文件位置作为JVM参数传递给每个Kafka broker:
-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf
在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身份验证:
为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的所有客户端连接中的一个用户。在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.class
和sasl.client.callback.handler.class
配置自己的回调处理程序来从外部源获取用户名和密码,从而避免在磁盘上存储明文密码。在生产系统中,外部认证服务器可以实现密码认证。从Kafka 2.0版开始,可以通过配置
sasl.server.callback.handler.class
使用外部身份验证服务器进行密码验证的自己的回调处理程序。
你好,这种可以动态添加用户吗?不重启kafka的方式?
达咩
老师你好,有个问题:我的kafka需要公网访问,客户端需要通过用户,密码访问,应该怎么配置,lisntenrs和advertised.listeners应该如何配置呢,listeners=SASL_PLAINTEXT://172.26.40.149:9092
advertised.listeners=SASL_PLAINTEXT://47.92.239.56:9092 我这么配置了之后,kafka起不来,
参见:https://www.orchome.com/1903
老师您好,我有个问题:我的一个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里配置认证?