使用SASL的Kafka身份验证-重复的管理员用户?

时间:2020-08-17 14:10:37

标签: apache-kafka jaas sasl

我正在运行分布式Kafka-Broker,其中通过SASL / SSL设置了代理间通信。为此,我修改了给定here的JAAS配置。完成的文件如下所示:

KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin-secret"
  user_admin="admin-secret"
  user_alice="alice-secret"
  security.protocol=SASL_PLAINTEXT
  sasl.mechanism=PLAIN;

  org.apache.kafka.common.security.scram.ScramLoginModule required;
};

Client {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin-secret";
};

我注意到“ KafkaServer”部分有2个管理员用户。我也学到了我需要两者的艰辛方式,但是为什么呢?我有几个月前已经读过(忘了)原因的感觉,但是我似乎再也找不到了。

1 个答案:

答案 0 :(得分:2)

根据Apache Kafka documentationKafkaServer部分用于配置从此代理到其他代理以及与连接的客户端和其他代理的身份验证 该经纪人。 Client部分用于连接到Zookeeper。

由于您的问题与KafkaServer部分有关,并且您正在配置SASL / PLAIN身份验证机制,因此请参阅Apache Kafka文档的this part

此配置定义了两个用户( admin alice )。代理程序使用username部分中的属性passwordKafkaServer来启动与其他代理程序的连接。在此示例中, admin 是经纪人之间通信的用户。属性集user_userName定义了连接到代理的所有用户的密码,代理使用这些属性验证了所有客户端连接,包括来自其他代理的连接。

换句话说,这里配置了两种单独的情况:

  • 此代理连接到其他代理时,它将使用在usernamepassword中定义的用户名和密码。
  • 当客户端和其他代理连接到该代理时,user_userName条目用于对这些连接进行身份验证,其中用户名是该代理的 userName 部分user_userName键,密码为值。

因此,在您的示例中,由于以下两行,该代理将使用用户名admin和密码admin-secret连接到其他代理:

username="admin"
password="admin-secret"

并且,由于以下两行,客户和其他代理可以使用admin / admin-secretalice / alice-secret的用户名密码组合连接到该代理:

user_admin="admin-secret"
user_alice="alice-secret"

如果您仅接受来自其他代理的连接以在此侦听器上进行经纪人之间的通信,则他们可能正在使用配置的user_admin="admin-secret"部分,而user_alice="alice-secret"可能是多余的。