前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >配置客户端以安全连接到Kafka集群–LDAP

配置客户端以安全连接到Kafka集群–LDAP

作者头像
大数据杂货铺
发布2021-02-07 14:36:57
4.6K0
发布2021-02-07 14:36:57
举报
文章被收录于专栏:大数据杂货铺大数据杂货铺

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

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

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

代码语言:javascript
复制
security.protocol=SASL_SSL
ssl.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进行身份验证:

代码语言:javascript
复制
# Uses SASL/PLAIN over a TLS encrypted connection
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
# LDAP credentials
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="supersecret1";
# TLS truststore
ssl.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验证:
代码语言:javascript
复制
org.apache.kafka.common.security.ldap.internals.LdapPlainServerCallbackHandler
  1. Kafka必须通过TLS连接(LDAPS)连接到LDAP服务器。为确保Kafka代理可以信任LDAP服务器证书,请将LDAP服务器的CA证书添加到Kafka服务使用的信任库中。您可以在Cloudera Manager的以下属性中找到信任库的位置:
  1. 运行以下命令(以root用户身份)以将LDAP CA证书添加到信任库中:
代码语言:javascript
复制
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可能如下所示:

代码语言:javascript
复制
uid=jsmith,ou=users,dc=mycompany,dc=com

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

代码语言:javascript
复制
uid={0},ou=users,dc=mycompany,dc=com"

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

代码语言:javascript
复制
CN=Smith, John, ou=users, dc=mycompany, dc=com

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

代码语言:javascript
复制
{0}@mycompany.com

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

示例

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

代码语言:javascript
复制
# Complete configuration file for LDAP auth
$ cat ldap-client.properties
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.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/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LDAP验证
  • LDAP和Kerberos
  • 确保集群使用TLS / SSL加密
  • 在Kafka Broker上启用LDAP身份验证
  • 局限性
  • 示例
  • 如果我没有Kerberos或LDAP服务器怎么办?
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档