使用ranger对kafka进行鉴权
测试环境:ranger-kafka-plugin为0.6.3版本,kafka版本为kafka_2.10-0.10.1.1,且kafka broker为一个节点。
一、Ranger对kafka进行权限控制,前提需要kafka开启kerberos认证(注意:若kafka不开启kerberos的话Ranger无法获取kafka相关操作的用户,进而无法完成鉴权操作)
二、开启kerberos认证
包括zookeeper开启kerberos认证,kafka开启zookeeper认证。
1、安装配置Kerberos Server
(1)安装server:
yum install krb5-libs krb5-server krb5-workstation
具体配置略.

(2)安装client:yum install krb5-libs krb5-workstation

2、开启zookeeper kerberos认证
由于kafka依赖zookeeper,所以zookeeper也需要开启kerberos认证,这部分内容可参考zookeeper官网进行配置。

3、开启kafka kerberos认证
(1) 编辑kafka_server_jaas.conf文件:内容如下:

KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=”/etc/security/keytabs/kafka.keytab”
storeKey=true
useTicketCache=false
serviceName=”kafka”
principal=”kafka/xhhdev@HHKDC”;
};

KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
renewTicket=true
serviceName=”kafka”;
};

Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
useTicketCache=true;
};

(2)加入jvm参数
-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/usr/local/soft/kafka/config/kafka_server_jaas.conf”

在下面脚本中加入:
vim kafka-run-class.sh

if [ -z “$KAFKA_JVM_PERFORMANCE_OPTS” ]; then
KAFKA_JVM_PERFORMANCE_OPTS=”-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/usr/local/soft/kafka/config/kafka_server_jaas.conf”
fi

(3)server.properties中加入如下配置

listeners=SASL_PLAINTEXT://xhhdev:6667

security.inter.broker.protocol=SASL_PLAINTEXT

sasl.mechanism.inter.broker.protocol=GSSAPI

sasl.enabled.mechanisms=GSSAPI

sasl.kerberos.service.name=kafka

(4)创建文件producer.properties 及consumer.properties 且加入如下配置:

security.protocol=SASL_PLAINTEXT

sasl.mechanism=GSSAPI

sasl.kerberos.service.name=kafka

三、安装ranger-kafka-plugin
1、解压包:tar –zxvf ranger-0.6.3-kafka-plugin.tar.gz

2、修改install.properties文件

POLICY_MGR_URL=http://xhhtest:6080 (Ranger-admin 访问地址)
REPOSITORY_NAME=kafkadev (服务名称)
XAAUDIT.DB.IS_ENABLED=true
XAAUDIT.DB.FLAVOUR=MYSQL
XAAUDIT.DB.HOSTNAME= xhhtest
XAAUDIT.DB.DATABASE_NAME=ranger_audit
XAAUDIT.DB.USER_NAME=root
XAAUDIT.DB.PASSWORD=123456

3、添加软连接

假设kafka_2.10-0.10.1.1安装目录为:/usr/local/soft/kafka/
ranger-0.6.3-kafka-plugin 安装目录为:/usr/local/ranger-0.6.3-kafka-plugin
则执行:
ln -s /usr/local/soft/kafka/conf/ /usr/local/kafka
ln -s /usr/local/soft/kafka/lib/ /usr/local/kafka

4、执行 ./enable-kafka-plugin.sh

之所以执行软连接,是因为执行此脚本时需要知道kafka_2.10-0.10.1.1的conf 和lib所在位置。

5、重启kafka服务

四、鉴权测试
1、在ranger-admin界面添加kafka service (name为kafkadev)
2、查看插件是否成功,audit->plugins显示
3、测试
(1)执行kinit -kt /etc/security/keytabs/kafka.service.keytab kafka/xhhdev@HHKDC
(2)创建topic:./kafka-topics.sh –zookeeper xhhdev:2181 –create –topic topic_test –partitions 1 –replication-factor 1,此时可以创建成功。
(3)生产:切换到用户xhhtest,
执行kinit -kt /etc/security/keytabs/xhhtest.service.keytab xhhtest/xhhdev@HHKDC

./kafka-console-producer.sh –broker-list xhhdev:6667 –topic topic_test –producer.config producer.properties,此时报错如下:

WARN Error while fetching metadata with correlation id 0 : {topic_test=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)

原因是:xhhtest没有权限

(4)设置policy,增加权限,再次执行ok。

参考文献:
http://ranger.apache.org/
http://kafka.apache.org/documentation/#security_sasl
https://www.ibm.com/support/knowledgecenter/en/SSPT3X_4.2.5/com.ibm.swg.im.infosphere.biginsights.admin.doc/doc/admin_ranger_plugin_kafka.html

使用ranger对kafka进行鉴权的更多相关文章

  1. SpringBoot+JWT+SpringSecurity+MybatisPlus实现Restful鉴权脚手架

    若图片查看异常,请前往掘金查看:https://juejin.im/post/5d1dee34e51d4577790c1cf4 前言 JWT(json web token)的无状态鉴权方式,越来越流行 ...

  2. ApiAuthValue鉴权机制总结

    一.背景介绍 1.自动化的配置工具autoconfig介绍 项目开发过程中,有些配置会随着运行环境的变化而各不相同.如jdbc驱动的配置,在开发环境可能链接到开发本地的数据库,测试环境则有一套测试专用 ...

  3. 搭建一个分布式MongoDB鉴权集群

    今天休假在家,测试并搭建了一个replica set shard MongoDB鉴权集群.replica set shard 鉴权集群中文资料比较少,本文是个人笔记,同时也希望对后来者有所帮助.本文仅 ...

  4. 开放平台鉴权以及OAuth2.0介绍

    OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容. OAuth 2.0 ...

  5. 取消mod_sofia的呼叫鉴权

    FreeSWITCH中默认的SIP呼叫是要鉴权的,流程如下. 终端 FreeSWITCH A -----Invite------> FS A <----Trying------ FS A ...

  6. android 高德地图出现【定位失败key鉴权失败】

    如题:android 高德地图出现[定位失败key鉴权失败] 原因:使用的是debug模式下的SHA1,发布的版本正确获取SHA1的方式见: 方法二使用 keytool(jdk自带工具),按照如下步骤 ...

  7. RESTful登录设计(基于Spring及Redis的Token鉴权)

    转载自:http://www.scienjus.com/restful-token-authorization/ http://m.blog.csdn.net/article/details?id=4 ...

  8. .NET 统一用户管理 -- 统一鉴权

    统一鉴权 目的 为什么要统一鉴权了,每一个业务系统几乎都离不开,用户,角色,权限 这个 3个基础功能,为了避免各个系统各自去开发一套权限管理等基础功能,也同时轻松管理每个用户的全部权限. 怎么做   ...

  9. linux上svn连接visual svn server时ssl鉴权失败,问题解决(转)

    场景:1.在windows 7上安装了visual svn server作为自己的svn服务器. 2.在虚拟机centos 6.3上使用svn客户端check代码,报错: [plain] view p ...

随机推荐

  1. LINQ 常规实践总结

    1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续两次OrderBy,后面一个有可能会打乱前面一个的排序顺序,可能与预期不符. 要实现sql中的order by word,nam ...

  2. docker安装Oracle 12c

    1.安装阿里的docker源: cat /etc/docker/daemon.json { "registry-mirrors": ["https://pee6w651. ...

  3. OO Unit2多线程电梯总结博客

    OO Unit2多线程电梯总结博客 传说中的电梯居然就这样写完了-撒花

  4. SpringBoot是怎么在实例化时候将bean加载进入容器中

    之前写过的很多spring文章,都是基于应用方面的,这次的话,就带大家来一次对spring的源码追踪,看一看spring到底是怎么进行的初始化,如何创建的bean,相信很多刚刚接触spring的朋友, ...

  5. C# net request payload形式发送post请求

    因为开发微信群发电脑版需要模拟微信POST请求,微信发送消息使用request payload发送,实际发送的是json字符串.我们只需要生成的json字符串和请求的一致,header头完全模拟即可. ...

  6. Python编程从入门到实践笔记——字典

    Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...

  7. 前后端分离密码登陆加密RSA方案(java后端)

    前言:密码加密有很多种方案,这里不做过多讨论,本篇文章是基于RSA加密实现. 首先在前端工程中需要引入加密js: "jsencrypt": "2.3.1",(注 ...

  8. 005. [转] SSH端口转发

    玩转SSH端口转发 SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),远程端口转发(Remote Port Forwarding)以及动态端口转发(Dynamic ...

  9. 纯CSS编写汉克狗

    1,CSS中原生的变量定义语法是:--*,变量使用语法是:var(--*),其中*表示我们的变量名称:在CSS变量命名中,不能包含$,[,^,(,%等字符,普通字符局限在只要是“数字[0-9]”“字母 ...

  10. Vue slot插槽

    插槽用于内容分发,存在于子组件之中. 插槽作用域 父级组件作用域为父级,子级组件作用域为子级,在哪定义的作用域就在哪. 子组件之间的内容是在父级作用域的,无法直接访问子组件里面的数据. 插槽元素 &l ...