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

配置客户端以安全连接到Kafka集群–PAM身份验证

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

在本系列的前几篇文章《配置客户端以安全连接到Kafka集群- Kerberos》和《配置客户端以安全连接到Kafka集群- LDAP》中,我们讨论了Kafka的Kerberos和LDAP身份验证。在本文中,我们将研究如何配置Kafka集群以使用PAM后端而不是LDAP后端。

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

代码语言:javascript
复制
security.protocol=SASL_SSL

ssl.truststore.location=/opt/cloudera/security/jks/truststore.jks.truststore.location=/opt/cloudera/security/jks/truststore.jks

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

PAM验证

将Kafka集群配置为执行PAM(可插入身份验证模块)身份验证时,Kafka会将客户端的身份验证委派给为其运行的操作系统配置的PAM模块。

Kafka客户端配置与我们用于LDAP身份验证的配置相同,正如我们在上一篇文章中看到的:

代码语言:javascript
复制
# Uses SASL/PLAIN over a TLS encrypted connection
security.protocol=SASL_SSL.protocol=SASL_SSL
sasl.mechanism=PLAIN.mechanism=PLAIN
# LDAP credentials
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="supersecret1";.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.truststore.location=/opt/cloudera/security/jks/truststore.jks

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

确保正在使用TLS/SSL加密

与LDAP身份验证情况类似,由于用户名和密码是通过网络发送的以用于客户端身份验证,因此对于Kafka客户端之间的所有通信启用并实施TLS加密非常重要。这将确保凭据始终通过网络加密,并且不会受到损害。

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

其他要求

根据系统中配置的PAM模块,可能需要正确配置一些其他要求才能使PAM身份验证起作用。确切的配置取决于所使用的模块,不在本文档的范围之内。

以下是使用某些PAM模块时可能需要的两个附加配置的简单示例:

  • 如果要使用登录服务的pam_unix模块,则kafka用户(运行Kafka代理的用户)必须有权访问/etc/shadow文件,以使身份验证起作用。

下面的命令只是一个简单的示例,说明如何在单个节点上实现此目标。可能会有更好的方法来确保整个集群都满足此要求。

代码语言:javascript
复制
usermod -G shadow kafka-G shadow kafka
chgrp shadow /etc/shadow/etc/shadow
chmod 440 /etc/shadow 440 /etc/shadow
  • 如果使用了pam_nologin模块,则代理上文件/var/run/nologin的存在将阻止Kafka的PAM身份验证正常工作。为了使PAM身份验证正常工作,必须从所有代理中删除文件/var/run/nologin,或者必须禁用pam_nologin模块。

在Kafka Broker上启用PAM身份验证

安装Kafka服务时,默认情况下未为Kafka代理启用PAM身份验证,但是通过Cloudera Manager对其进行配置非常简单:

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

代码语言:javascript
复制
org.apache.kafka.common.security.pam.internals..apache.kafka.common.security.pam.internals.PamPlainServerCallbackHandler
  • 配置要用于身份验证的PAM服务:
  • 单击Kafka>操作>重新启动以重新启动Kafka服务并使更改生效。

示例

注意:以下信息包含敏感的凭据。将此配置存储在文件中时,请确保已设置文件许可权,以便只有文件所有者才能读取它。

以下是使用Kafka控制台使用者通过PAM身份验证从主题读取的示例。请注意,此示例的配置与上一节中的LDAP示例相同。

代码语言:javascript
复制
$ cat pam-client.properties-client.properties
security.protocol=SASL_SSL.protocol=SASL_SSL
sasl.mechanism=PLAIN.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="supersecret1";.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="alice" password="supersecret1";
ssl.truststore.location=/opt/cloudera/security/jks/truststore.jks.truststore.location=/opt/cloudera/security/jks/truststore.jks


$ kafka-console-consumer \-console-consumer \
   --bootstrap-server host-1.example.com:9093 \--bootstrap-server host-1.example.com:9093 \
   --topic test \--topic test \
    --consumer.config ./pam-client.properties--consumer.config ./pam-client.properties

还有更多方法

我们将在本博客系列中回顾所有这些身份验证方法,这些方法为您提供了灵活的配置Kafka集群的方法,以与您环境中的身份验证机制集成。

原文作者:Andre Araujo

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PAM验证
  • 确保正在使用TLS/SSL加密
  • 其他要求
    • 在Kafka Broker上启用PAM身份验证
      • 示例
        • 还有更多方法
        相关产品与服务
        SSL 证书
        腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档