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

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

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

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

假如我以kerberos认证的方式连接kafka集群,那么我的用户名是principal的primary部分。例如principal是  kafka/[email protected] ,那么我的用户名就是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

时间: 2024-12-09 20:17:46

kafka kerberos 认证访问与非认证访问共存下的ACL问题的相关文章

5.Apache用户认证,域名跳转,访问日志

[toc] Apache用户认证 11.18 Apache用户认证 用户认证功能就是在用户访问网站的时候,需要输入用户名密码才能进行访问.一些比较好总要的站点和网站后台都会加上用户认证,以保证安全. 1.下面对xavi.com站点来做一个全站的用户认证: vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把xavi.com那个虚拟主机编辑成如下内容 <VirtualHost *:80> DocumentRoot "/dat

Django Restful Framework【第三篇】认证、权限、限制访问频率

一.认证 认证请求头 views.py #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.authentication import BaseAuthentication from rest_framework.permissions import

RestFramework自定制之认证、权限、限制访问频率

认证 所谓认证就是检测用户登陆与否,通常与权限对应使用.网站中都是通过用户登录后由该用户相应的角色认证以给予对应的权限. 自定制认证规则的重点是继承内置的BaseAuthentication类,重写其authenticate()方法 方式一:通过url传参进行认证 from django.conf.urls import url, include from app01.views import TestView urlpatterns = [ url(r'^test/', TestView.as

[福利]非认证公众帐号也能申请微信连Wi-Fi了

年初3月份时,拥有线下经营场所且开通微信认证的公众号可以开通微信连Wi-Fi接入,现在微信团队进一步开放了权限,非认证公众帐号也能申请微信连Wi-Fi了. 微信连Wi-Fi团队宣布,降低微信连Wi-Fi的准入门槛,面向所有公众号开放自助申请接口,未认证的公众号也可开通微信连Wi-Fi插件,向其用户提供微信连Wi-Fi服务. 微信连Wi-Fi怎么开通?未认证的商户公众帐号可按照原有的申请流程通过自助申请即可开通微信连Wi-Fi插件: 在微信公众平台(mp.weixin.qq.com)登陆公众号,进

[转]MIPS 下非对齐访问的问题

1.问题 MIPS 下使用访存指令读取或写入数据单元时,目标地址必须是所访问之数据单元字节数的整数倍,这个叫做地址对齐. 比如在 MIPS 平台上,lh 读取一个半字时,存储器的地址必须是 2 的整数倍: lw 读取一个字时,存储器的地址必须是 4的整数倍: sd 写入一个双字时,存储器的地址必须是 8 的整数倍.倘若访存时,目标地址不对齐,则会引起异常,典型的是系统提示“总线错误”后,直接杀死进程. 看一个测试程序(龙芯2E平台): #include <stdio.h>#include &l

Best Coder Round#25 1003 树的非递归访问

虽然官方解释是这题目里的树看作无向无环图,从答案来看还是在“以1作为根节点”这一前提下进行的,这棵树搭建好以后,从叶节点开始访问,一直推到根节点即可——很像动态规划的“自底向上”. 但这棵树的搭建堪忧:给出的边不知道哪边更接近根节点.所以我给出的方案干脆在两个顶点都将对方加成孩子,等到访问的时候再作处理,根据从1这个根节点开始访问这个特性,额外加一个“isVisited"来做区分. 然后利用栈对树进行非递归访问 /** * For best-coder problem 3 */ #include

redis非授权访问的查毒过程

排查及处理过程 2016年9月26日晚,阿里云后台报告有一台服务器在异地登录的告警,初步怀疑是被入侵了,临时采取关闭这台服务器的方法避免对集群中的其他主机造成危害. 第二天,开始排查原因. 首先在服务器上发现一个额外的计划任务(下图是解决过程中被我注释掉了) 联想到这个机器上跑有redis,基本断定是redis的未加密码导致的非授权访问. 根据以往经验,linux上的这个病毒通常是DDOS或者挖矿程序.下面来慢慢分析. 我们根据crontab里面的网址,我们到chrome里面输入这个链接下载下看

JumpNode递归和非递归访问

JumpNode的定义结构为如下所示: struct JumpNode { int data; //存储数据 int order; // 记录访问次序,初始化均为0 JumpNode *jump, *next; // next为线性下一节点,jump为跳跃到下一节点 JumpNode(int d): data(d), order(-1), jump(NULL), next(NULL) {} }; 现在需要以递归和非递归的方式来访问到一个JumpNode *list.在访问的时候给各个节点的ord

二叉树非递归访问

二叉树非递归访问,借助一个栈,来模拟递归调用过程. ? 1 2 3 4 5 6 struct TreeNode {      char val;      TreeNode *left;      TreeNode *right;      TreeNode(int x) : val(x), left(NULL), right(NULL) {}  }; 1. 先序遍历 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 void