使用SASL / SCRAM进行身份验证

请先在不配置任何身份验证的情况下启动Kafka

1. 创建SCRAM Credentials

1.1 创建broker通信用户(或称超级用户) bash Emacs bin/kafka-configs.sh --zookeeper centos1:2181 --alter --add-config 'SCRAM-SHA-256=[password=adminpwd],SCRAM-SHA-512=[password=adminpwd]' --entity-type users --entity-name admin

1.2 创建客户端用户dbcUser bash Emacs bin/kafka-configs.sh --zookeeper centos1:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=changeit],SCRAM-SHA-512=[password=changeit]' --entity-type users --entity-name dbcUser

1.3 查看SCRAM证书 bash Emacs bin/kafka-configs.sh --zookeeper centos1:2181 --describe --entity-type users --entity-name dbcUser

删除SCRAM证书 (只是说明功能,这里不执行) bash Emacs bin/kafka-configs.sh --zookeeper centos1:2181 --alter --delete-config 'SCRAM-SHA-512' --entity-type users --entity-name dbcUser

2. 配置Kafka Brokers

2.1 在每个Kafka broker的config目录中添加一个kafka_server_jaas.conf,内容如下 bash Emacs KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="adminpwd"; };

注意:不要少写了分号

2.2 将JAAS配置文件位置作为JVM参数传递给每个Kafka broker

修改 kafka/bin/kafka-server-start.sh

将exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@" 注释, 增加下面的内容 bash Emacs #exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@" exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=$base_dir/../config/kafka_server_jaas.conf kafka.Kafka "$@"

或者不修改kafka-server-start.sh脚本, 而是将下面的内容添加到~/.bashrc bash Emacs export KAFKA_PLAIN_PARAMS="-Djava.security.auth.login.config=/usr/local/kafka/config/kafka_server_jaas.conf" export KAFKA_OPTS="$KAFKA_PLAIN_PARAMS $KAFKA_OPTS"

2.3 在server.properties中配置SASL端口和SASL机制。 bash Emacs # 认证配置 listeners=SASL_PLAINTEXT://centos1:9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 sasl.enabled.mechanisms=SCRAM-SHA-256 # ACL配置 allow.everyone.if.no.acl.found=false super.users=User:admin authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

2.4 重启ZK/Kafka

重启ZK / Kafka服务. 所有broker在连接之前都会引用’kafka_server_jaas.conf’. bash Emacs #重启所有zookeeper bin/zookeeper-server-stop.sh bin/zookeeper-server-start.sh -daemon config/zookeeper.properties #重启说有broker bin/kafka-server-stop.sh bin/kafka-server-start.sh -daemon config/server.properties

3. 客户端配置

先使用kafka-console-producer 和 kafka-console-consumer 测试一下

kafka-console-producer

1. 创建 config/client-sasl.properties 文件 bash Emacs security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256

2. 创建 config/kafka_client_jaas_admin.conf 文件 bash Emacs KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="adminpwd"; };

3. 修改kafka-console-producer.sh脚本

这里我们复制一份新文件来改 bash Emacs cp bin/kafka-console-producer.sh bin/kafka-console-producer-admin.sh vi bin/kafka-console-producer-admin.sh #exec $(dirname $0)/kafka-run-class.sh kafka.tools.ConsoleProducer "$@" exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_client_jaas_admin.conf kafka.tools.ConsoleProducer "$@"

4. 创建测试topic(之前以及创建则不用创建) bash Emacs bin/kafka-topics.sh --create --zookeeper localhost:2181 --partitions 1 --replication-factor 1 --topic test

5. 测试生产消息 bash Emacs bin/kafka-console-producer-admin.sh --broker-list centos1:9092 --topic test --producer.config config/client-sasl.properties [wanghy@centos1 kafka]$ bin/kafka-console-producer-admin.sh --broker-list centos1:9092 --topic test --producer.config config/client-sasl.properties >hello, I am admin >

可以看到admin用户无需配置ACL就可以发送消息

6. 测试 dbcUser 用户

创建一个bin/kafka-console-producer-dbc.sh文件 bash Emacs cp bin/kafka-console-producer-admin.sh bin/kafka-console-producer-dbc.sh exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_client_jaas_dbc.conf kafka.tools.ConsoleProducer "$@"

创建kafka_client_jaas_dbc.conf文件 bash Emacs cp config/kafka_client_jaas_admin.conf config/kafka_client_jaas_dbc.conf KafkaClient { org.apache.kafka.common.security.scram.ScramLoginModule required username="dbcUser" password="changeit"; };

生产消息 bash Emacs [wanghy@centos1 kafka]$ bin/kafka-console-producer-dbc.sh --broker-list centos1:9092 --topic stest --producer.config config/client-sasl.properties >hello, I am dbcUser [2019-03-15 09:47:28,483] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {stest=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient) [2019-03-15 09:47:28,486] ERROR Error when sending message to topic stest with key: null, value: 19 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [stest] >

报错了,提示没有访问权限

kafka-console-consumer

1. 创建 config/consumer-dbc.properties 文件 bash Emacs security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256 group.id=dbc-group

2. 创建 bin/kafka-console-consumer-dbc.sh 文件 bash Emacs cp bin/kafka-console-consumer.sh bin/kafka-console-consumer-dbc.sh vi bin/kafka-console-consumer-dbc.sh

修改内容如下 bash Emacs #exec $(dirname $0)/kafka-run-class.sh kafka.tools.ConsoleConsumer "$@" exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=$(dirname $0)/../config/kafka_client_jaas_dbc.conf kafka.tools.ConsoleConsumer "$@"

3. 测试消费者 bash Emacs bin/kafka-console-consumer-dbc.sh --bootstrap-server centos1:9092 --topic test --consumer.config config/consumer-dbc.properties --from-beginning [2019-03-15 10:03:27,794] WARN [Consumer clientId=consumer-1, groupId=dbc-group] Error while fetching metadata with correlation id 2 : {test=TOPIC_AUTHORIZATION_FAILED} (org.apache.kafka.clients.NetworkClient) [2019-03-15 10:03:27,796] ERROR Error processing message, terminating consumer process: (kafka.tools.ConsoleConsumer$) org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [test] Processed a total of 0 messages

没有权限

kafka身份认证 maxwell_Kafka 使用SASL / SCRAM进行身份验证相关推荐

  1. Kafka集群搭建及SASL/SCRAM,ACL权限控制

    Kafka集群搭建及SASL/SCRAM,ACL权限控制 环境 部署zookeeper集群及安全认证 部署kafka集群及安全认证 环境 系统版本:Centos7.4 kafka版本:kafka_2. ...

  2. 身份认证云平台商丘_网络身份认证平台

    在线身份认证解决方案 背景介绍 近年来互联网金融的迅猛发展,让我们看到了金融与互联网结合之后迸发的巨大能量.互联网因其便利.快捷.覆盖面广.快速响应客户需求.强调用户使用感受等特点,在与金融业务结合之 ...

  3. php 身份认证 claim,asp.net core cookie身份认证view视图中读取/读取User.Claims中的值实例...

    假设claim如下,q为查询出来的用户表结果集 var claims = new List(){ new Claim("UserId", q.Id.ToString()), new ...

  4. Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制

    文章目录 SASL_SCRAM+ACL实现动态创建用户及权限控制 使用SASL / SCRAM进行身份验证 1. 创建SCRAM Credentials 创建broker建通信用户(或称超级用户) 创 ...

  5. 芯盾时代:致力于身份认证安全的领军者

    本文讲的是芯盾时代:致力于身份认证安全的领军者 信息安全技术的关注点,一直在随着互联网的发展而变化. 互联网兴起时,作为流量聚集地的门户网站,主要面向大众提供信息,缺乏个性化色彩,防火墙.IDS/IP ...

  6. Springboot整合shiro基于url身份认证和授权认证

    你还不会shiro吗? 前奏 shiro核心配置文件(rolesFilter可选). 身份认证 多表登录源如何操作? 授权管理 如何解决界面多角色/资源问题 访问效果 权限管理在日常开发中很重要,所以 ...

  7. 基于token与基于服务器的身份认证

    基于token与基于服务器的身份认证 1.基于服务器的身份认证 我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认 ...

  8. 细说ASP.NET Forms身份认证

    细说ASP.NET Forms身份认证 阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 ...

  9. jws webservice 跳过https认证_基于OAuth2的OIDC (OpenId Connect)身份认证

    OIDC协议 OIDC(OpenID Connect)是在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议. OAuth2协议 OAuth2是一个授权协议,它无法提供完善的 ...

最新文章

  1. 自然语言处理的 算法 BYTEDANCE
  2. 在ASP.NET应用程序中捕捉身份验证状态的变化
  3. SQL SERVER与C#中数据类型的对应关系
  4. kali64位下载怎么是AMD_AMD平台虚拟机安装macOS Sierra方法
  5. jpa添加索引的几种方式
  6. python语言通过字典实现映射关系_mpython3丨字典的使用介绍
  7. VTK:vtkNew<vtkDenseArray<double>>用法实战
  8. 第三次学JAVA再学不好就吃翔(part104)--flush和close
  9. C/C++ 常见编程技巧!你学会了吗?
  10. 拥抱ROS2系列:ROS2概述和实践入门(一)
  11. Mr.J-- HTTP学习笔记(四)-- 连接管理
  12. idea module取得是parent的文件路径_React(或使用TS)中样式混乱解决方案 *.module.less...
  13. python基础教程期末考试题库_PYTHON语言应用试题题目及答案,课程2020最新期末考试题库,章节测验答案...
  14. 湖南2021年高考成绩查询与录取查询课件,@所有高考生,高考成绩和录取动态查询方式公布...
  15. mysql协议分析1,MySQL协议分析(1)
  16. HTML在线电视直播网页模板,苹果cms网站添加TV电视直播教程
  17. VC++每个版本对应的vcredist
  18. 手机腾讯视频离线缓存ts格式文件合并为完整视频
  19. NPDP产品经理小知识:商业模式画布的9个构成要素
  20. 系统架构师(十七)系统可靠性分析与设计

热门文章

  1. param name=allowScriptAccess value=never/是什么意思
  2. 项目管理中的成本计算
  3. (转)Native Extensions for Silverlight (NESL)?
  4. 王杰与宣萱合作lt;老婆大人gt; 获封两个第一(图)
  5. goss - 一个简洁的 golang 对象存储库
  6. 微信商城店铺怎么开通
  7. 飞鸽传书——短信接口
  8. 长江中下游先民最早驯化野生稻 国稻种芯:全球35亿人口主食
  9. 快消行业营销难?巨量引擎让生意每一步明明白白
  10. 又是面试题?对,合并有序序列。