kafka kerberos 认证访问与非认证访问共存下的ACL问题

在Kafka集群中引入Kerberos认证及ACL权限控制,解决非认证连接的权限问题,确保现有服务不中断。

在一个正在运行的kafka集群中添加kerberos认证和ACL权限控制,同时保证以前所有的producer\consumer服务不中断

解决方式: 使kafka集群监听两个端口,一个为无认证连接,另一个为kerberos的认证连接

这时候在配置ACL的时候出了问题:

假如我以kerberos认证的方式连接kafka集群,那么我的用户名是principal的primary部分。例如principal是  kafka/master@HZ.DATA.COM ,那么我的用户名就是kafka。 这时候我只要给kafka这个用户配置相应的权限就可以了。

但是当我以非认证的方式连接kafka集群的时候,我会得到以下的错误:

1
2
[WARN ] 16 : 06 : 55 , 440 , [Class]NetworkClient, Error  while  fetching metadata with correlation id  1  : {test=UNKNOWN_TOPIC_OR_PARTITION}
org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test]


或者在console-producer中的错误如下:

1
2
3
4
5
[ 2017 - 08 - 22  15 : 17 : 27 , 576 ] WARN Error  while  fetching metadata with correlation id  2  : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[ 2017 - 08 - 22  15 : 17 : 27 , 685 ] WARN Error  while  fetching metadata with correlation id  4  : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[ 2017 - 08 - 22  15 : 17 : 27 , 787 ] WARN Error  while  fetching metadata with correlation id  6  : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[ 2017 - 08 - 22  15 : 17 : 27 , 890 ] WARN Error  while  fetching metadata with correlation id  7  : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[ 2017 - 08 - 22  15 : 17 : 27 , 993 ] WARN Error  while  fetching metadata with correlation id  8  : {test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)


原因: 一旦为kerberos的用户针对某个资源(比如topic)配置ACL之后,那么对于非认证方式访问的时候因为没有权限所以访问不到对应的数据。

解决方法: 将kafka集群的日志设为debug级别后重启,可以看到非认证方式访问kafka集群时的用户为ANONYMOUS


                  1、给 ANONYMOUS配置相应的权限即可

                  2、每一个topic都要为 ANONYMOUS设置权限毕竟不方便, 可以将ANONYMOUS设为super.users










本文转自 落花非有意  51CTO博客,原文链接:http://blog.51cto.com/1992zhong/1958387,如需转载请自行联系原作者
Kafka Kerberos认证Kafka消息队列系统中一种安全认证机制,用于确保Kafka集群中的通信和数据传输的安全性。 Kafka是一个分布式的高吞吐量消息队列系统,可以用于实现实时数据流处理和消息传递。为了保护Kafka集群免受未授权的访问和攻击,Kafka提供了多种安全认证机制,其中之一就是Kerberos认证Kerberos是一种强大的网络认证协议,用于客户端和服务端之间的身份验证和数据传输的加密。Kerberos特别适合于分布式系统,因为它可以使用户在多个系统中共享认证凭证。 Kafka Kerberos认证的工作原理如下: 1. 客户端将请求发送到Kafka集群中的任意一个Broker。 2. Broker发送Kerberos令牌请求给Kerberos认证中心(KDC)。 3. KDC对Broker和客户端进行身份验证,并颁发令牌。 4. Broker将令牌发送回客户端。 5. 客户端使用令牌进行身份验证,并将请求再次发送到Broker,以获取或发送消息。 通过使用Kerberos认证Kafka可以确保只有经过身份验证的客户端能够连接和与Kafka集群进行通信。这种认证机制可以有效防止未授权的访问和数据泄露风险。同时,Kerberos认证还增加了数据传输的安全性,通过对传输的数据进行加密,防止数据被窃听或篡改。 总而言之,Kafka Kerberos认证是一种在Kafka消息队列系统中确保安全通信和数据传输的有效机制,它通过Kerberos认证和加密技术,实现了身份验证和数据传输的安全性。这可以帮助用户建立安全可靠的消息传递系统,并保护集群免受未授权访问和数据泄露的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值