可以为Kafka提供自定义的LoginModule以支持LDAP吗?

Joh*_*ohn 4 ldap sasl jaas apache-kafka

可以将Kafka配置为使用多种身份验证机制:纯文本用户名/密码,Kerberos或SSL。前两个使用SASL,其中需要一个JAAS配置文件。

对于纯文本auth方法,配置如下所示(从文档中获取):

KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin-secret"
   user_admin="admin-secret"
   user_alice="alice-secret";
};
Run Code Online (Sandbox Code Playgroud)

我想使用LDAP进行身份验证。我的问题是:如果我用PlainLoginModule实现LoginModule的类替换并将该类放置在代理的类路径中,是否可以通过任何希望的方式(例如LDAP)实现身份验证?

我无法以合理的方式使用Kerberos,因为它的主体在我工作的组织内定义的方式,因此我希望使用LDAP,因为我需要支持RBAC。

Mic*_*son 6

是的,您可以为Kafka提供一个自定义类,该类可以实现LoginModule并具有所需的身份验证逻辑。

然后使用您的类名更新JAAS文件,并确保它在类路径中。

你需要把一些样板代码正确得到的一切设置,但你可以使用PlainLoginModulePlainSaslServerProviderPlainSaslServerFactoryPlainSaslServer作为例子。

您的LoginModule类应具有与之相同的逻辑,PlainLoginModule但应初始化您的Provider实现(在静态块中)。

您的Provider类应具有与相同的逻辑,PlainSaslServerProvider但应引用您的SaslServerFactory实现。

您的SaslFactory类应该再次具有与之相同的逻辑,PlainSaslServerFactory但是创建实现的实例SaslServer

最后,您的SaslServer类应在其evaluateResponse()方法中实现必要的LDAP逻辑。只需确保正确设置即可,this.authorizationId因为这将成为用户主体并设置completetrue(就像PlainSaslServer.evaluateResponse()这样)

  • @John Confluent Enterprise现在具有LDAP授权器https://docs.confluent.io/current/confluent-security-plugins/kafka/introduction.html (3认同)