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

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

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

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

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

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

[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中的错误如下:

[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

原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/193970.html

(0)
上一篇 2021年11月15日
下一篇 2021年11月15日

相关推荐

发表回复

登录后才能评论