Kafka使用Java认证
和授权服务(JAAS)
进行SASL配置。
KafkaServer
是每个KafkaServer/Broker
使用的JAAS文件中的名称。本节提供broker的SASL配置选项,包括进行broker之间通信所需的SASL客户端连接。如果将多个listeners配置为SASL,则名称可以在listeners名称前以小写字母开头,后跟一个句点,例如sasl_ssl.KafkaServer
。
客户端部分用于验证与zookeeper的SASL连接。它还允许broker在zookeeper节点上设置SASL ACL
。并锁定这些节点,以便只有broker可以修改它。所有的broker必须principal名称相同。如果要使用客户端以外的名称,设置zookeeper.sasl.client
(例如,-Dzookeeper.sasl.clientconfig=ZkClient
)。
默认情况下,Zookeeper使用 “zookeeper” 作为服务名称。如果你需要修改,设置zookeeper.sasl.client.user
(例如,-Dzookeeper.sasl.client.username=zk
)
Broker还可以使用sasl.jaas.config
配置JAAS。属性名称必须以包括SASL机制的listener前缀为前缀,例如:listener.name.{listenerName}.{saslMechanism}.sasl.jaas.config
只能指定一个登录模块。 如果listener上配置了多种机制,则listener必须使用和机制前缀为每种机制提供的配置。 例如:
listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="admin" \
password="admin-secret";
listener.name.sasl_ssl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="admin-secret" \
user_admin="admin-secret" \
user_alice="alice-secret";
如果在不同级别定义了JAAS配置,则使用的优先级顺序为:
listener.name.{listenerName}.{saslMechanism}.sasl.jaas.config
{listenerName}.KafkaServer
KafkaServer
请注意,只能使用静态JAAS配置来配置ZooKeeper JAAS
配置。
客户端可以使用sasl.jaas.config
或使用类似broker的静态JAAS配置文件配置JAAS。
客户端的JAAS配置
客户端可以将JAAS配置指定给生产者或消费者,无需创建物理配置文件。通过为每个客户端指定不同的属性,此模式还使同一JVM中的不同生产者和消费者可以使用不同的凭据。如果同时指定了静态JAAS配置系统属性java.security.auth.login.config
和客户端属性sasl.jaas.config
,则将会使用客户端的属性。
静态文件配置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";
};
-Djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf
SASL可与PLAINTEXT
或SSL
一起或分别用作安全协议传输层(SASL_PLAINTEXT
或SASL_SSL
,如果使用SASL_SSL,则必须配置SSL)。
SASL机制
Kafka支持以下的SASL机制:
为Kafka broker配置SASL
在server.properties
配置一个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 client配置SASL
SASL仅支持新的java生产者和消费者,不支持老的API。
要在客户端上配置SASL验证,选择在broker中启用的客户端身份验证的SASL机制,并按照以下步骤配置所选机制的SASL。