如何配置Kafka集群以使用PAM后端
这篇文章将为大家详细讲解有关如何配置Kafka集群以使用PAM后端,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
我们将研究如何配置Kafka集群以使用PAM后端而不是LDAP后端。
此处显示的示例将以粗体突出显示与身份验证相关的属性,以将其与其他必需的安全属性区分开,如下例所示。假定已为Apache Kafka集群启用了TLS,并且应该为每个安全集群启用TLS。
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身份验证的配置相同,正如我们在上一篇文章中看到的:
# Uses SASL/PLAIN over a TLS encrypted connectionsecurity.protocol=SASL_SSL.protocol=SASL_SSLsasl.mechanism=PLAIN.mechanism=PLAIN# LDAP credentialssasl.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 truststoressl.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文件,以使身份验证起作用。
下面的命令只是一个简单的示例,说明如何在单个节点上实现此目标。可能会有更好的方法来确保整个集群都满足此要求。
usermod -G shadow kafka-G shadow kafkachgrp shadow /etc/shadow/etc/shadowchmod 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回调处理程序:
org.apache.kafka.common.security.pam.internals..apache.kafka.common.security.pam.internals.PamPlainServerCallbackHandler
配置要用于身份验证的PAM服务:
单击Kafka>操作>重新启动以重新启动Kafka服务并使更改生效。
示例
注意:以下信息包含敏感的凭据。将此配置存储在文件中时,请确保已设置文件许可权,以便只有文件所有者才能读取它。
以下是使用Kafka控制台使用者通过PAM身份验证从主题读取的示例。
$ 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集群以使用PAM后端就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。