kafka 协议标准_配置客户端以安全连接到Kafka集群LDAP

本文介绍了如何配置Kafka客户端使用LDAP而非Kerberos进行身份验证。LDAP是Kafka支持的一种身份验证机制,通过SASL/PLAIN进行。在启用LDAP验证时,必须确保集群使用TLS/SSL加密以保护凭据安全。文章还讨论了Kafka Broker上的LDAP配置以及与Kerberos的比较。此外,提到了没有Kerberos或LDAP服务器时的替代身份验证方法。
摘要由CSDN通过智能技术生成

15b773b6242efeca04690308a30f10ff.png

在上一篇文章《配置客户端以安全连接到Kafka集群- Kerberos》中,我们讨论了Kerberos身份验证,并说明了如何配置Kafka客户端以使用Kerberos凭据进行身份验证。在本文中,我们将研究如何配置Kafka客户端以使用LDAP(而不是Kerberos)进行身份验证。

我们将不在本文中介绍服务器端配置,但在需要使示例更清楚时将添加一些引用。

此处显示的示例将以粗体突出显示与身份验证相关的属性,以将其与其他必需的安全属性区分开,如下例所示。假定已为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验证:58ca02f29406d1e8d1918a3fdaf1ded9.png

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

400bc55fe6e4c39004e4acb6ec3bbb83.png

  1. 运行以下命令(以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集群设置身份验证。

原文作者:Andre Araujo

原文链接:https://blog.cloudera.com/how-to-configure-clients-to-connect-to-apache-kafka-clusters-securely-part-2-ldap/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值