使用SASL认证
1. JAAS配置
Kafka使用Java认证和授权服务(JAAS)进行SASL配置。
-
为broker配置JAAS
KafkaServer
是每个KafkaServer/Broker使用JAAS文件中的部分名称。本节为broker提供了SASL配置选项,包括进行broker之间通信所需的任何SASL客户端连接。客户端部分用于验证与zookeeper的SASL连接。它还允许broker在zookeeper节点上设置SASL ACL。并锁定这些节点,以便只有broker可以修改它。所有的broker必须有相同的principal名称。如果要使用客户端以外的名称,设置zookeeper.sasl.client(例如,-Dzookeeper.sasl.client = ZkClient)。
默认情况下,Zookeeper使用“zookeeper”作为服务名称。如果你需要修改,设置zookeeper.sasl.client.user(例如,-Dzookeeper.sasl.client.username=zk)
-
Kafka客户端的JAAS配置
客户端可以使用客户端配置属性sasl.jaas.config或使用broker类似的静态JAAS配置文件配置JAAS。
-
JAAS配置使用客户端配置属性
客户端可以将JAAS配置指定为生产者或消费者属性,而不创建物理配置文件。 此模式还使同一个JVM中的不同生产者和消费者通过为每个客户端指定不同的属性来使用不同的凭据。 如果指定了静态JAAS配置系统属性java.security.auth.login.config和客户端属性sasl.jaas.config,将使用客户端属性。
请参阅GSSAPI(Kerberos),PLAIN或SCRAM的配置例子。
-
使用静态配置文件的JAAS配置
使用静态JAAS配置文件来配置客户端上的SASL认证。
- 添加一个名为KafkaClient的客户端登录部分的JAAS配置文件。 在KafkaClient中为所选机制配置登录模块,如设置GSSAPI(Kerberos),PLAIN或SCRAM的示例中所述。 例如,GSSAPI凭据可以配置为:
KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="/etc/security/keytabs/kafka_client.keytab" principal="kafka-client-1@EXAMPLE.COM"; };
- 将JAAS配置文件位置作为JVM参数传递给每个客户端JVM。 例如:
-Djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf
- 添加一个名为KafkaClient的客户端登录部分的JAAS配置文件。 在KafkaClient中为所选机制配置登录模块,如设置GSSAPI(Kerberos),PLAIN或SCRAM的示例中所述。 例如,GSSAPI凭据可以配置为:
-
2. SASL配置
SASL可以使用PLAINTEXT或SSL作为传输层,分别使用安全协议SASL_PLAINTEXT或SASL_SSL。 如果使用SASL_SSL,则还必须配置SSL。
-
SASL机制
Kafka支持一下的SASL机制:
- GSSAPI (Kerberos)
- PLAIN
- SCRAM-SHA-256
- SCRAM-SHA-512
-
为Kafka broker配置SASL
-
在server.properteis配置一个SASL端口,SASL_PLAINTEXT或SASL_SSL至少增加一个到
listeners
,用逗号分隔:listeners=SASL_PLAINTEXT://host.name:port
如果你只配置一个SASL端口(如果你需要broker使用SASL互相验证),那么需要确保broker之间设置相同的SASL协议:
security.inter.broker.protocol=SASL_PLAINTEXT (or SASL_SSL)
-
选择一个或多个支持的机制,并通过以下的步骤为机器配置SASL。在broker之间启用多个机制:
-
-
为Kafka客户端配置SASL
SASL仅支持新的java生产者和消费者,不支持老的API。
要在客户端上配置SASL验证,选择在broker中启用的客户端身份验证的SASL机制,并按照以下步骤配置所选机制的SASL。