使用 SASL 的 Kafka 身份验证 - 重复的管理员用户?
Posted
技术标签:
【中文标题】使用 SASL 的 Kafka 身份验证 - 重复的管理员用户?【英文标题】:Kafka Authentication with SASL - duplicate admin user? 【发布时间】:2020-12-06 16:41:07 【问题描述】:我正在运行一个分布式 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】:根据Apache Kafka documentation,KafkaServer
部分用于配置身份验证从此代理到其他代理,以及客户端和其他代理连接到 这个经纪人。 Client
部分用于连接到 Zookeeper。
由于您的问题是关于 KafkaServer
部分,并且您正在配置 SASL/PLAIN 身份验证机制,请参阅 Apache Kafka 文档的 this part:
此配置定义了两个用户(admin 和 alice)。代理使用
KafkaServer
部分中的属性username
和password
来启动与其他代理的连接。在本例中,admin 是代理间通信的用户。属性集user_userName
定义了连接到代理的所有用户的密码,代理使用这些属性验证所有客户端连接,包括来自其他代理的连接。
也就是说,这里配置了两种不同的情况:
当此代理连接到其他代理时,它将使用username
和password
中定义的用户名和密码。
当客户端和其他代理连接到此代理时,user_userName
条目用于验证这些连接,其中用户名是user_userName
密钥的 userName 部分,密码就是值。
因此,在您的示例中,由于这两行,此代理将使用用户名admin
和密码admin-secret
连接到其他代理:
username="admin"
password="admin-secret"
并且,客户端和其他代理可以使用admin
/ admin-secret
或alice
/ alice-secret
的用户名密码组合连接到此代理,因为这两行:
user_admin="admin-secret"
user_alice="alice-secret"
如果您只接受来自其他代理的连接以在此侦听器上进行代理间通信,那么他们可能正在使用配置的user_admin="admin-secret"
部分,而user_alice="alice-secret"
可能是多余的。
【讨论】:
这证实了我的怀疑。引用的部分甚至是我以前读过但再也找不到的部分。非常感谢:)以上是关于使用 SASL 的 Kafka 身份验证 - 重复的管理员用户?的主要内容,如果未能解决你的问题,请参考以下文章
Kafka SASL/PLAIN加密 及Kafka-Python整合
具有 SASL 安全性的 Zookeeper 和 Kafka