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

配置客户端以安全连接到Kafka集群- Kerberos

作者头像
大数据杂货铺
发布于 2021-02-07 06:36:31
发布于 2021-02-07 06:36:31
5.9K00
代码可运行
举报
文章被收录于专栏:大数据杂货铺大数据杂货铺
运行总次数:0
代码可运行

这是有关Apache Kafka安全性的简短博客文章系列的第一部分。在本文中,我们将说明如何配置客户端以使用不同的身份验证机制对集群进行身份验证。

可以将受保护的Apache Kafka集群配置为使用以下不同方法来强制执行身份验证:

  • SSL – TLS客户端身份验证
  • SASL / GSSAPI – Kerberos身份验证
  • SASL / PLAIN – LDAP和基于文件的身份验证
  • SASL / SCRAM-SHA-256和SASL / SCRAM-SHA-512
  • SASL /OAUTHBEARER

在本文中,我们将开始研究Kerberos身份验证,并将重点介绍通过配置为使用Kerberos的集群进行身份验证所需的客户端配置。其他身份验证机制将在本系列的后续文章中介绍。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
security.protocol=SASL_SSL

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

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

Kerberos身份验证

迄今为止,Kerberos是我们在该领域中用于保护Kafka集群安全的最常用选项。它使用户能够使用存储在Active Directory,RedHat IPA和FreeIPA等服务中的公司身份,从而简化了身份管理。Kerberos化的Kafka集群还使与大数据生态系统中的其他服务集成变得更加容易,该服务通常使用Kerberos进行强身份验证。

Kafka通过简单身份验证和安全层(SASL)框架实现Kerberos身份验证。SASL是身份验证框架,是RFC 4422定义的标准IETF协议。它支持多种不同的身份验证机制,而实现Kerberos身份验证的机制称为GSSAPI。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
The basic Kafka client properties that must be set to configure the Kafka client to authenticate via Kerberos are shown below:


# Uses SASL/GSSAPI over a TLS encrypted connection
security.protocol=SASL_SSL
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
# TLS truststore
ssl.truststore.location=/opt/cloudera/security/jks/truststore.jks

上面的配置使用Kerberos(SASL / GSSAPI)进行身份验证。TLS(SSL)仅用于通过有线进行数据加密

JAAS配置

但是,以上属性未向客户端提供其通过Kafka集群进行身份验证所需的凭据。我们需要更多信息。

使用Kerberos时,我们可以通过两种方式将凭据提供给客户端应用程序。以有效的Kerberos票证的形式存储在票证缓存中,或者作为keytab文件,应用程序可以使用该文件来获取Kerberos票证

Kafka客户端中Kerberos凭证的处理由Java身份验证和授权服务(JAAS)库完成。因此,我们需要为客户端配置必要的信息,以便JAAS知道从何处获取凭证。

有两种方法可以为Kafka客户端设置这些属性:

  • 创建一个JAAS配置文件,并将Java系统属性java.security.auth.login.config指向它;要么
  • 内联JAAS配置,设置Kafka客户端属性sasl.jaas.config 。

在本节中,我们显示如何使用这两种方法。为了简单起见,本文中的示例将使用sasl.jaas.config方法。

使用JAAS配置文件

如果您使用的是JAAS配置文件,则需要告诉Kafka Java客户端在哪里找到它。这是通过在命令行中设置以下Java属性来完成的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
... -Djava.security.auth.login.config=/path/to/jaas.conf
...

如果您在Cloudera数据平台(CDP)中使用Kafka命令行工具,则可以通过设置以下环境变量来实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ export KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/jaas.conf"

配置文件的内容取决于凭证的来源。要使用存储在用户票证缓存中的Kerberos票证,请使用以下jaas.conf文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
KafkaClient {
 com.sun.security.auth.module.Krb5LoginModule required
 useTicketCache=true;
};

要使用Keytab,请改用以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
KafkaClient {
 com.sun.security.auth.module.Krb5LoginModule required
 useKeyTab=true
 keyTab="/etc/security/keytabs/alice.keytab"
 principal="alice@EXAMPLE.COM";
};

使用sasl.jaas.config属性

我通常不喜欢使用单独的JAAS配置文件,而更喜欢使用sasl.jaas.config Kafka属性为客户端设置JAAS配置。这通常更简单,并且摆脱了其他配置文件(jaas.conf )。下面的配置与上面的jaas.conf配置相同。

注意:以下设置必须写在一行中。该行末尾的分号是必需的。

要使用存储在票证缓存中的Kerberos票证,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;

要使用keytab,请改用以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/etc/security/keytabs/alice.keytab" principal="alice@EXAMPLE.COM";

示例

以下是使用Kafka控制台使用者使用Kerberos身份验证并直接连接到代理(不使用负载均衡器)从主题读取的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Complete configuration file for Kerberos auth using the ticket cache
$ cat krb-client.properties
security.protocol=SASL_SSL
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true;
ssl.truststore.location=/opt/cloudera/security/jks/truststore.jks
# Authenticate with Kerberos to get a valid ticket
$ kinit alice
Password for alice@REALM:


# Connect to Kafka using the ticket in the ticket cache
$ kafka-console-consumer \
   --bootstrap-server host-1.example.com:9093 \
   --topic test \
    --consumer.config /path/to/krb-client.properties

与Kerberos的网络连接

Kerberos的中心组件是Kerberos分发中心(KDC)。KDC是处理客户端启动的所有Kerberos身份验证的服务。为了使Kerberos身份验证正常工作,Kafka集群和客户端都必须具有与KDC的连接。

在公司环境中,这很容易实现,通常是这种情况。但是,在某些部署中,KDC可能会放置在防火墙后面,从而使客户端无法通过它来获取有效票证。

云和混合部署(云+本地部署)可能会给客户端使用Kerberos身份验证带来挑战,因为本地KDC通常未集成到部署了云的服务中。但是,由于Kafka支持其他身份验证机制,因此客户可以使用其他替代方法,我们将在下一篇文章中进行探讨。

原文作者:Andre Araujo

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
0915-7.1.7-Kafka Connectors for SAP HANA测试
Kafka原生没有提供SAP HANA的Connector,GitHub开源项目Kafka Connectors for SAP提供了kafka与SAP之间的Connector,可实现定时全量或增量的拉取SAP HANA数据发送到Kafka。详细信息,参考GitHub:https://github.com/SAP/kafka-connect-sap/tree/master
Fayson
2024/04/10
3770
0915-7.1.7-Kafka Connectors for SAP HANA测试
如何通过Cloudera Manager为Kafka启用Kerberos及使用
在CDH集群中启用了Kerberos认证,那么我们的Kafka集群能否与Kerberos认证服务集成呢?本篇文章主要讲述如何通过Cloudera Manager为Kafka集群启用Kerberos认证及客户端配置使用。
Fayson
2018/03/29
3.2K0
如何通过Cloudera Manager为Kafka启用Kerberos及使用
0502-CDSW中访问Kerberos环境下的Kafka
Fayson在前面的文章《0500-使用Python2访问Kerberos环境下的Kafka》和《0501-使用Python访问Kerberos环境下的Kafka(二)》中介绍了两种方式访问Kerberos环境下的Kafka。在前面文章的基础上Fayson介绍在CDSW访问Kerberos环境下的Kafka。
Fayson
2019/11/27
6870
0501-使用Python访问Kerberos环境下的Kafka(二)
在前面的文章Fayson介绍了一种Python访问Kerberos环境下Kafka的文章,参考《0500-使用Python2访问Kerberos环境下的Kafka》,本篇文章主要介绍另一种方式访问Kerberos环境下的Kafka。
Fayson
2019/11/28
1.8K0
Spark2Streaming读Kerberos环境的Kafka并写数据到Hive
在前面的文章Fayson介绍了一些关于Spark2Streaming的示例如《Spark2Streaming读Kerberos环境的Kafka并写数据到HBase》和《Spark2Streaming读Kerberos环境的Kafka并写数据到Kudu》,本篇文章Fayson主要介绍如何使用Spark2Streaming访问Kerberos环境的Kafka并将接收到的Kafka数据写入Hive.
Fayson
2018/08/03
3.8K1
Spark2Streaming读Kerberos环境的Kafka并写数据到Hive
如何在Kerberos环境下使用Flume采集Kafka数据写入HBase
在前面的文章Fayson也介绍了一些关于Flume的文章《非Kerberos环境下Kafka数据到Flume进Hive表》、《如何使用Flume准实时建立Solr的全文索引》、《如何在Kerberos环境使用Flume采集Kafka数据并写入HDFS》、《如何使用Flume采集Kafka数据写入Kudu》和《如何使用Flume采集Kafka数据写入HBase》。本篇文章Fayson主要介绍在Kerberos的CDH集群中使用Flume采集Kafka数据写入HBase。 内容概述 1.环境准备 2.配置Fl
Fayson
2018/07/12
1.1K0
Spark2Streaming读Kerberos环境的Kafka并写数据到HDFS
在前面的文章Fayson介绍了一些关于Spark2Streaming的示例如《Spark2Streaming读Kerberos环境的Kafka并写数据到HBase》、《Spark2Streaming读Kerberos环境的Kafka并写数据到Kudu》及《Spark2Streaming读Kerberos环境的Kafka并写数据到Hive》,本篇文章Fayson主要介绍如何使用Spark2Streaming访问Kerberos环境的Kafka并将接收到的Kafka数据逐条写入HDFS。
Fayson
2018/08/03
1.4K0
Spark2Streaming读Kerberos环境的Kafka并写数据到HDFS
Spark2Streaming读Kerberos环境的Kafka并写数据到Kudu
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在前面的文章Fayson介绍了一些关于SparkStreaming的示例《如何使用Spark Streaming读取HBase的数据并写入到HDFS》、《SparkStreaming读Kafka数据写HBase》和《SparkStreaming读Kafka数据写Kudu》以上文章
Fayson
2018/07/12
2.6K0
Kerberos环境下删除ZooKeeper服务注册信息问题分析
在CDH集群中启用了Kerberos服务后,通过zookeeper-client登录Kerberos删除服务的注册信息时报“Authentication isnot valid”,具体操作及异常信息如下。Fayson这里已经使用fayson用户kinit后操作的,当然即使用hive的keytab文件kinit后也会报同样的错。
Fayson
2018/03/29
4.1K0
Kerberos环境下删除ZooKeeper服务注册信息问题分析
Spark2Streaming读Kerberos环境的Kafka并写数据到HBase
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在前面的文章Fayson介绍了在Kerberos环境下《Spark2Streaming读Kerberos环境的Kafka并写数据到Kudu》,本篇文章Fayson主要介绍如何使用Spark2Streaming访问Kerberos环境的Kafka并将接收到的Kafka数据写入HBa
Fayson
2018/07/12
2.3K0
kafka 配置kerberos校验以及开启acl实践
转载请注明原创地址:http://www.cnblogs.com/dongxiao-yang/p/7131626.html
sanmutongzi
2020/03/04
2.5K0
0543-5.15.0-Kerberos环境下Kafka管理工具Kafka Eagle安装使用
Fayson在前面的文章介绍了《如何在CDH集群安装Kafka Manager》和《0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安装使用》。Kafka-eagle支持Kerberos环境下的Kafka集群管理,本篇文章Fayson主要介绍在Kerberos环境下Kafka管理工具Kafka Eagle安装使用。
Fayson
2019/03/07
1.6K1
如何使用Java连接Kerberos的Kafka
Kafka从0.8版本以后出了新的API接口,用于异步方式发送消息,性能优于旧的API,本篇文章主要使用新的API接口进行测试。继上一篇文章如何通过Cloudera Manager为Kafka启用Kerberos及使用,本篇文章主要讲述如何使用Java连接Kerberos的Kafka集群生产和消费消息。
Fayson
2018/03/29
4.8K0
如何使用Java连接Kerberos的Kafka
如何在Kerberos环境使用Flume采集Kafka数据并写入HDFS
注意:Fayson的github调整为:https://github.com/fayson/cdhproject,本文的代码在github中也能找到。
Fayson
2018/03/29
6K0
如何在Kerberos环境使用Flume采集Kafka数据并写入HDFS
集群启用Kerberos后对Zookeeper的Znode操作异常分析
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.问题描述 ---- 在CDH集群中Zookeeper已启用Kerberos服务,在命令行为使用Kerberos账号进行Kinit操作,使用zookeeper-client登录后仍然可以进行创建znode和删除znode,并且可以删除其它有服务的Znode,具体操作如下: [root@ip-172-31-3
Fayson
2018/04/18
2.5K1
集群启用Kerberos后对Zookeeper的Znode操作异常分析
0887-7.1.4-如何在CDP中为Kafka启用Kerberos认证及使用
1.文档编写目的 在CDP集群中启用了Kerberos认证,那么Kafka集群能否与Kerberos认证服务集成呢?本文主要讲述如何通过Cloudera Manager为Kafka集群启用Kerberos认证及客户端配置使用。 内容概述 1.修改Kafka配置 2.配置客户端 3.客户端测试Producer和Consumer 测试环境 1.RedHat7.6 2.CM版本7.3.1和CDP版本7.1.4 3.采用root用户 4.Kafka2.4.1 2.修改Kafka配置 1.登录Cloudera Man
Fayson
2022/08/26
1.1K0
0887-7.1.4-如何在CDP中为Kafka启用Kerberos认证及使用
实时数仓链路分享:kafka =>SparkStreaming=>kudu集成kerberos
本文档主要介绍在cdh集成kerberos情况下,sparkstreaming怎么消费kafka数据,并存储在kudu里面
王知无-import_bigdata
2020/08/12
6530
实时数仓链路分享:kafka =>SparkStreaming=>kudu集成kerberos
0500-使用Python2访问Kerberos环境下的Kafka
Kafka支持多种客户端语言(C/C++、Go、Java、JMS、.NET、Python)。Fayson在前面多篇文章介绍了Java访问Kerberos和非Kerberos环境下的Kafka,参考《如何使用Java连接Kerberos的Kafka》。本篇文章Fayson主要介绍使用Python2访问Kerberos环境下的Kafka。在学习本篇文章内容前你还需要知道《如何通过Cloudera Manager为Kafka启用Kerberos及使用》。
Fayson
2019/11/27
1K0
配置客户端以安全连接到Kafka集群–LDAP
在上一篇文章《配置客户端以安全连接到Kafka集群- Kerberos》中,我们讨论了Kerberos身份验证,并说明了如何配置Kafka客户端以使用Kerberos凭据进行身份验证。在本文中,我们将研究如何配置Kafka客户端以使用LDAP(而不是Kerberos)进行身份验证。
大数据杂货铺
2021/02/07
4.8K0
基于SASL和ACL的Kafka安全性解析
本文主要介绍基于SCRAM进行身份验证,使用Kafka ACL进行授权,SSL进行加密以及使用camel-Kafka连接Kafka群集以使用camel路由生产和消费消息的过程。
Luga Lee
2021/12/09
2.5K0
基于SASL和ACL的Kafka安全性解析
推荐阅读
相关推荐
0915-7.1.7-Kafka Connectors for SAP HANA测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档