Apache kafka 使用SASL进行Kafka身份验证-重复管理员用户?

Apache kafka 使用SASL进行Kafka身份验证-重复管理员用户?,apache-kafka,jaas,sasl,Apache Kafka,Jaas,Sasl,我正在运行一个分布式Kafka代理,其中使用SASL/SSL设置代理间通信。为此,我调整了给定的JAAS配置。完成的文件如下所示: KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret" user_admin="admin-secret"

我正在运行一个分布式Kafka代理,其中使用SASL/SSL设置代理间通信。为此,我调整了给定的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个管理员用户。我也学到了我需要两者的艰难方式,但为什么呢?我感觉几个月前我已经读过(忘记了)原因,但我似乎再也找不到了。

根据,KafkaServer部分用于配置从此代理到其他代理的身份验证,以及客户端和连接到此代理的其他代理的身份验证。
客户端
部分用于连接Zookeeper

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

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

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

  • 当此代理连接到其他代理时,它将使用
    username
    password
    中定义的用户名和密码
  • 当客户端和其他代理连接到此代理时,
    user\u userName
    条目用于验证这些连接,其中用户名是
    user\u userName
    密钥的用户名部分,密码是值
因此,在您的示例中,此代理将使用用户名
admin
和密码
admin secret
连接到其他代理,因为这两行代码:

username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret"
而且,客户端和其他代理可以使用用户名密码组合
admin
/
admin secret
alice
/
alice secret
连接到此代理,因为有以下两行:

username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret"
如果您仅在此侦听器上接受来自其他代理的用于代理间通信的连接,则它们可能正在使用配置的
user\u admin=“admin secret”
部分,并且
user\u alice=“alice secret”
可能是多余的。

根据,
KafkaServer
部分用于配置从此代理到其他代理的身份验证,以及客户端和连接到此代理的其他代理的身份验证。
客户端
部分用于连接Zookeeper

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

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

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

  • 当此代理连接到其他代理时,它将使用
    username
    password
    中定义的用户名和密码
  • 当客户端和其他代理连接到此代理时,
    user\u userName
    条目用于验证这些连接,其中用户名是
    user\u userName
    密钥的用户名部分,密码是值
因此,在您的示例中,此代理将使用用户名
admin
和密码
admin secret
连接到其他代理,因为这两行代码:

username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret"
而且,客户端和其他代理可以使用用户名密码组合
admin
/
admin secret
alice
/
alice secret
连接到此代理,因为有以下两行:

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

如果您只接受来自其他代理的连接以便在此侦听器上进行代理间通信,那么他们可能正在使用配置的
user\u admin=“admin secret”
部分,而
user\u alice=“alice secret”
可能是多余的。

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