可视化方式快捷管理kafka的acl配置

2021-11-01 11:13:28 浏览数 (1)

前言

我在 kafka基于SCRAM认证,快速配置启用ACL 中,以SASL_SCRAM配置方式为示例说明了如何快速在一个kafka集群中启用认证授权机制,提高集群使用的安全性。

但是可能有这一样种场景,比如有多个部门,不同的项目组或项目之间都在共用这个集群,不同的项目组或项目之间会使用不同的用户名/密码或者对不同的topic/消费组分别进行授权,这样,如果我们每次都通过命令的方式,用户信息或者topic数量比较多的时候,无论是查看或者修改都极不方便,所以需要一个可视化的控制台可以便捷的进行操作。

kafka-console-ui

简介

kafka-console-ui支持基于SASL_SCRAM机制可视化管理ACL。

github地址:github.com/xxd76379515…

ACL管理页面如下:

快速使用

打包

代码语言:javascript复制
git clone https://github.com/xxd763795151/kafka-console-ui.git
cd kafka-console-ui
sh package.sh
复制代码

部署

代码语言:javascript复制
# 解压缩
tar -zxvf kafka-console-ui.tar.gz
# 进入解压缩后的目录
cd kafka-console-ui
复制代码

启动、停止

代码语言:javascript复制
# 启动
sh bin/start.sh
# 停止
sh bin/shutdown.sh
复制代码

修改配置

代码语言:javascript复制
# 编辑配置
vim config/application.yml
复制代码

主要配置如下:

代码语言:javascript复制
kafka:
  config:
    # kafka broker地址,多个以逗号分隔
    bootstrap-server: 'localhost:9092'
    # 服务端是否启用acl,如果不启用,下面的几项都忽略即可
    enable-acl: true
    # 只支持2种安全协议SASL_PLAINTEXT和PLAINTEXT,启用acl则设置为SASL_PLAINTEXT,不启用acl不需关心这个配置
    security-protocol: SASL_PLAINTEXT
    sasl-mechanism: SCRAM-SHA-256
    # 超级管理员用户名,在broker上已经配置为超级管理员
    admin-username: admin
    # 超级管理员密码
    admin-password: admin
    # 启动自动创建配置的超级管理员用户
    admin-create: true
    # broker连接的zk地址
    zookeeper-addr: localhost:2181
    sasl-jaas-config: org.apache.kafka.common.security.scram.ScramLoginModule required username="${kafka.config.admin-username}" password="${kafka.config.admin-password}";
复制代码

因为是启用ACL,所以enable-acl一定要为true,另外要把broker地址、zk地址、超级管理的账户密码修改为自己的。

注意配置项里有是否自动创建管理员用户,如果kafka集群配置启用了ACL,但是超级管理员还没创建集群节点已经启动了,此时集群仍然是不可用状态,各集群节点间通信认证是失败的,可以直接启动这个控制台,让它把这个超级管理员自动创建了,就不用自己手工去创建这个用户了。

功能说明

  • 用户权限列表

展示当前所有用户权限信息,并可查询:

  • 管理生产权限

快速增加或者删除某个用户对某个topic的消息发送权限

  • 管理消费权限

快速增加或者删除某个用户使用消费组订阅某个topic的权限

  • 删除当前用户及其相关所有权限

将当前用户配置删除同时清空该用户授予的所有权限信息

  • 细粒度权限控制

可以选择某个资源(topic或消费组)增加什么权限(白名单、黑名单什么的都能配置)

  • 查看并管理某个资源的权限明细
  • 新增、更新用户
  • 查看用户信息

注意这个密码一致性,可能存在不一致或没有密码的情况,这个是效验结果。因为kafka scram的用户密码是单向加密的,无法解密,所以这里是把密码缓存起来了,如果有的用户不是通过这个平台创建的,这里缓存的密码是不一致的或者就没有缓存,所以每次查看用户明细的时候,这里会用缓存的密码与实际kafka的用户密码做一个校验,以此来判断查出来的密码是否是正确的。

  • 管理员用户不允许操作

管理员用户信息,不允许操作,主要是避免误操作,影响到集群的稳定性。

末语

还有其它的一些功能,目前ACL这一块实现的还是相对完备,缺点就是只支持SASL_SCRAM。

目前kafka的安全协议有4种:PLAINTEXT、SSL、SASL_PLAINTEXT、SASL_SSL,私以为,如果kafka集群是在内网中,且只有自己的项目在用,PLAINTEXT,即明文传输完全够用,也不需要认证机制。如果是在云上,暴露在公网里了,消息安全性也很高可能需要SSL信道加密了。

如果只是做权限认证,且使用安全协议SASL_PLAINTEXT,不妨考虑一下这个解决方案。

0 人点赞