使用 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:

此配置定义了两个用户(adminalice)。代理使用KafkaServer 部分中的属性usernamepassword 来启动与其他代理的连接。在本例中,admin 是代理间通信的用户。属性集user_userName 定义了连接到代理的所有用户的密码,代理使用这些属性验证所有客户端连接,包括来自其他代理的连接。

也就是说,这里配置了两种不同的情况:

当此代理连接到其他代理时,它将使用usernamepassword 中定义的用户名和密码。 当客户端和其他代理连接到此代理时user_userName 条目用于验证这些连接,其中用户名是user_userName 密钥的 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" 可能是多余的。

【讨论】:

这证实了我的怀疑。引用的部分甚至是我以前读过但再也找不到的部分。非常感谢:)

以上是关于使用 SASL 的 Kafka 身份验证 - 重复的管理员用户?的主要内容,如果未能解决你的问题,请参考以下文章

Kafka 动态添加 SASL 用户,无需重启集群

Kafka SASL/PLAIN加密 及Kafka-Python整合

具有 SASL 安全性的 Zookeeper 和 Kafka

使用 ca cert(.crt 或 .pem)配置 Kafka 客户端

配置kafka密码认证

Smack 4.1 SASL 身份验证错误