如何配置Kafka客户端以使用LDAP进行身份验证

本篇内容介绍了“如何配置Kafka客户端以使用LDAP进行身份验证”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

专业领域包括网站设计制作、成都网站设计、购物商城网站建设、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,创新互联公司的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。

此处显示的示例将以粗体突出显示与身份验证相关的属性,以将其与其他必需的安全属性区分开,如下例所示。假定已为Apache Kafka集群启用了TLS,并且应该为每个安全集群启用TLS。

security.protocol=SASL_SSLssl.truststore.location=/opt/cloudera/security/jks/truststore.jks

我们在下面的所有示例中都使用Kafka-console-consumer 。所有概念和配置也适用于其他应用程序。 

LDAP验证

LDAP代表轻量级目录访问协议,并且是用于身份验证的行业标准应用程序协议。它是CDP上Kafka支持的身份验证机制之一。

LDAP认证也通过SASL框架完成,类似于Kerberos。SASL支持各种身份验证机制,例如我们在上一篇文章中介绍过的GSSAPI,以及将用于LDAP身份验证的PLAIN。

必须设置以下Kafka客户端属性,以配置Kafka客户端通过LDAP进行身份验证:

# Uses SASL/PLAIN over a TLS encrypted connectionsecurity.protocol=SASL_SSLsasl.mechanism=PLAIN# LDAP credentialssasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="supersecret1";# TLS truststoressl.truststore.location=/opt/cloudera/security/jks/truststore.jks

上面的配置使用SASL / PLAIN进行身份验证,并使用TLS(SSL)进行数据加密。LDAP身份验证的选择是在SASL / PLAIN的服务器端处理程序上配置的,我们将在本节后面介绍。 

LDAP和Kerberos

LDAP和Kerberos是不同的身份验证协议,各有其优缺点。但是,在Kafka集群中使用这些协议并不是相互排斥的。同时为集群启用Kerberos和LDAP身份验证是一种有效的配置。

身份目录服务(例如Active Directory,RedHat IPA和FreeIPA)支持Kerberos和LDAP身份验证,并且为Kafka集群启用了这两种功能,从而为客户端提供了处理身份验证的不同选择。

LDAP可以消除与配置Kerberos客户端有关的一些复杂性,例如要求在客户端安装Kerberos库以及在更严格的环境中与Kerberos KDC的网络连接。 

确保集群使用TLS / SSL加密

与Kerberos协议不同,当使用LDAP进行身份验证时,用户凭据(用户名和密码)通过网络发送到Kafka集群。因此,当为Kafka启用LDAP身份验证时为Kafka客户端之间的所有通信启用并实施TLS加密非常重要。这将确保凭据始终通过网络加密,并且不会受到损害。

必须将所有Kafka代理配置为对其SASL端点使用SASL_SSL安全协议。 

在Kafka Broker上启用LDAP身份验证

安装Kafka服务时,默认情况下未为Kafka代理启用LDAP身份验证,但是在Cloudera数据平台(CDP)上配置它非常容易:

  1. 在Cloudera Manager中,在Kafka服务配置中设置以下属性以匹配您的环境:通过选择LDAP作为上面的SASL / PLAIN身份验证选项,Cloudera Manager会自动将Kafka Brokers配置为使用以下SASL / PLAIN回调处理程序,该实现LDAP验证:

org.apache.kafka.common.security.ldap.internals.LdapPlainServerCallbackHandler
  1. Kafka必须通过TLS连接(LDAPS)连接到LDAP服务器。为确保Kafka代理可以信任LDAP服务器证书,请将LDAP服务器的CA证书添加到Kafka服务使用的信任库中。您可以在Cloudera Manager的以下属性中找到信任库的位置:

  2. 运行以下命令(以root用户身份)以将LDAP CA证书添加到信任库中:

keytool \  -importcert \-keystore /opt/cloudera/security/jks/truststore.jks \-storetype JKS \  -alias ldap-ca \-file /path/to/ldap-ca-cert.pem
  1. 单击Kafka>操作>重新启动以重新启动Kafka服务并使更改生效。 

局限性

Kafka服务器的LDAP回调处理程序使用Apache Shiro库将用户ID(简短登录名)映射到LDAP领域中的用户实体。它通过提供一个“用户DN模板”来做到这一点,给定用户短名称,该模板可用于在LDAP中派生用户专有名称:

例如,如库文档中所述,“如果目录使用LDAP uid属性表示用户名,则jsmith用户的用户DN可能如下所示:

uid=jsmith,ou=users,dc=mycompany,dc=com

在这种情况下,您可以使用以下模板值设置此属性:

uid={0},ou=users,dc=mycompany,dc=com"

这将LDAP回调处理程序的使用限制为以用户名是专有名称的一部分的方式配置的LDAP目录。对于RedHat IPA和FreeIPA实现,通常是上面这样。但是,在Active Directory中,默认情况下,专有名称的格式为:

CN=Smith, John, ou=users, dc=mycompany, dc=com

它们包含用户的全名而不是用户ID,这使得不可能通过简单的模式从简短的用户名中获取它。幸运的是,对于Active Directory ,除专有名称外,<用户名> @ <域>也是有效的LDAP用户名。如果使用的是Active Directory,则可以将LDAP用户DN模板设置为以下模板(使用上面的mycompany.com示例):

{0}@mycompany.com

如果您的LDAP目录不接受可以如上所述构造的用户名,请考虑使用Kerberos身份验证而不是LDAP。 

示例

以下是使用Kafka控制台使用者使用LDAP身份验证从主题读取的示例:

# Complete configuration file for LDAP auth$ cat ldap-client.propertiessecurity.protocol=SASL_SSLsasl.mechanism=PLAINsasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="supersecret1";ssl.truststore.location=/opt/cloudera/security/jks/truststore.jks# Connect to Kafka using LDAP auth$ kafka-console-consumer \   --bootstrap-server host-1.example.com:9093 \   --topic test \    --consumer.config ./ldap-client.properties

注意:上面的配置文件包含敏感凭据。确保设置了文件许可权,以便只有文件所有者才能读取它。 

如果我没有Kerberos或LDAP服务器怎么办?

到目前为止,Kerberos和LDAP身份验证是行业标准,是我们在整个客户群中与Kafka一起使用的最常见的身份验证机制。但是,它们并不是唯一的。

Kerberos和LDAP要求Kafka集群与后端目录服务集成,有时在某些环境中不可用。在这种情况下,仍然可以使用其他方法(例如相互TLS身份验证或带有密码文件后端的SASL / PLAIN)为Kafka集群设置身份验证。

“如何配置Kafka客户端以使用LDAP进行身份验证”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


分享文章:如何配置Kafka客户端以使用LDAP进行身份验证
文章URL:http://hbruida.cn/article/pohdhh.html