前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最新版本Kyuubi1.9.1 WebUI企业生产场景Basic LDAP安全认证实践案例总结

最新版本Kyuubi1.9.1 WebUI企业生产场景Basic LDAP安全认证实践案例总结

作者头像
用户9421738
发布2024-07-02 11:22:27
3510
发布2024-07-02 11:22:27
举报
文章被收录于专栏:大数据从业者

前言

之前文章已记录如何使用Kyuubi整合Spark与Flink计算引擎及KyuubiUI的使用方法,感兴趣的朋友请自行阅读。本文属于姊妹篇,继续记录WebUI在企业生产环境的场景下,如何开启WebUI的Basic LDAP安全认证,该特性也是1.9.1版本引入。欢迎关注微信公众号:大数据从业者!

Kyuubi LDAP认证

说明:如果没有或者不了解LDAP,参考下一章节的LDAP入门实践!

至于Kyuubi源码编译和安装部署,之前文章已经详细记录,本文不再重复赘述。根据本人的实践验证,Kyuubi WebUI开启Basic LDAP安全认证,需要修改kyuubi-default.conf,相关内容如下:

代码语言:javascript
复制
[root@felixzh apache-kyuubi-1.9.1-bin]# vim conf/kyuubi-defaults.conf
kyuubi.authentication LDAP
kyuubi.authentication.ldap.url ldap://felixzh2:389/
kyuubi.authentication.ldap.baseDN ou=People,dc=felixzh,dc=com
kyuubi.server.administrators felixzhUser

参数说明:

代码语言:javascript
复制
kyuubi.authentication支持多种认证,以逗号分割即可。比如同时开启KERBEROS和LDAP,可以配置为kyuubi.authentication为KERBEROS,LDAP。
kyuubi.authentication.ldap.url为你的LDAP服务地址端口信息。
kyuubi.authentication.ldap.baseDN为你的LDAP的全局唯一DN(distinguished name)。
kyuubi.server.administrators为管理员用户,只有管理员拥有WebUI所有操作权限。

实践验证

启动Kyuubi服务,日志会看到启用Basic认证添加相应BasicAuthenticationHandler的信息:

登录地址http://felixzh:10099,点击操作会提示输入用户名、密码:

注意:上述登录用户一定要归属于kyuubi.authentication.ldap.baseDN所配置的DN范围内。如果响应提示403 Forbidden,Error validating LDAP user,详细如下:

原因就是:baseDN配置的不对或者上述登录用户与密码不对。可以remote debug相应源码排查:

代码语言:javascript
复制
kyuubi\kyuubi-common\src\main\scala\org\apache\kyuubi\service\authentication\ldap\LdapSearchFactory.scala

登录成功,就可以执行SQL、查看Management相关目录,如下:

当然,使用kyuubi beeline也需要设置用户名和密码,如下:

代码语言:javascript
复制
./beeline -u 'jdbc:hive2://felixzh:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi1.9.1' -n felixzhUser -p admin@123

至此,Kyuubi WebUI Basic LDAP安全认证实践记录完成。至于更精细的库、表、列权限管理可以基于Ranger和Kyuubi插件kyuubi-spark-authz配合完成。

LDAP入门实践(可选)

OpenLDAP软件是LDAP协议的开源实现,具体包括lloadd(负载均衡进程)、slapd(服务端进程)、libraries(工具和样例)。

顾名思义,LDAP是一种轻量级协议,支持TCP/IP、用于访问目录服务。目录服务是一种用于存储、组织和检索信息的服务。LDAP中信息以树状结构组织,其中的基本数据单元就是条目;条目通常由一组属性(Attributes)组成,并且具有全局唯一DN(distinguished name)唯一标识。DN由RDN(Relative Distinguished Name)构成,RDN是条目的最后一级。比如表达式uid=felixzh,cn=online,ou=market,dc=example,dc=com就是一个dn,相当于数据库中的主键(primary key)。而属性由类型(type)和一个或者多个值(value)组成,相当于关系数据库中字段的概念。基于互联网域名的命名方法越来越流行,因为它允许使用DNS定位目录服务。下图展示一个使用基于域命名的LDAP目录树示例。

OpenLDAP使用嵌入式KV存储(如LMDB)而不使用关系数据库(RDBMS)。数据模型非常不同,用关系数据库表示目录数据需要将数据拆分为多个表,需要选择合适的键,性能会受到影响。LDAP最常见场景就是单点登录,很多开源软件都集成支持LDAP,比如Jenkins,GitLab、Jumpserver,Grafana、Kyuubi、Presto等等。

安装配置

代码语言:javascript
复制
[root@felixzh2 ~]# yum install -y openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

其中,migrationtools可以同步Linux用户/用户组到LDAP。

通过slaptest校验配置:

代码语言:javascript
复制
[root@felixzh2 openldap]# slaptest

如上图所示,出于性能考虑建议配置DB_CONFIG文件,如下:

代码语言:javascript
复制
[root@felixzh2 openldap]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@felixzh2 openldap]# chown -R ldap:ldap /var/lib/ldap/

启动ldap

代码语言:javascript
复制
[root@felixzh2 openldap]# systemctl start slapd.service
[root@felixzh2 openldap]# systemctl status slapd.service

导入基础Schema

代码语言:javascript
复制
[root@felixzh2 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
[root@felixzh2 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
[root@felixzh2 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

生成密码

slappasswd是 OpenLDAP 提供命令行工具,用于生成LDAP加密密码。

代码语言:javascript
复制
[root@felixzh2 openldap]# slappasswd -s felixzh
{SSHA}bkNEreQG06lV6VBBPfCybhxImmBq3S0U

配置修改

不要直接修改LDAP配置文件,而采用自带ldapmodify工具修改:

代码语言:javascript
复制
ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/changes.ldif

上述changes.ldif就是想修改的管理配置,如baseDN、管理员、密码:

代码语言:javascript
复制
[root@felixzh2 openldap]# vim /etc/openldap/changes.ldif
dn:olcDatabase={2}hdb,cn=config
changetype:modify
replace:olcSuffix
olcSuffix:dc=felixzh,dc=com

dn:olcDatabase={2}hdb,cn=config
changetype:modify
replace:olcRootDN
olcRootDN:cn=Manager,dc=felixzh,dc=com

dn:olcDatabase={2}hdb,cn=config
changetype:modify
replace:olcRootPW
olcRootPW:{SSHA}bkNEreQG06lV6VBBPfCybhxImmBq3S0U

dn:cn=config
changetype:modify
replace:olcLogLevel
olcLogLevel:-1

dn:olcDatabase={1}monitor,cn=config
changetype:modify
replace:olcAccess
olcAccess:{0} to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=felixzh,dc=com" read by * none

而实际场景通常需要以不同的OU区分实际的组织部门,如下:

代码语言:javascript
复制
[root@felixzh2 openldap]# vim  /etc/openldap/base.ldif
dn:dc=felixzh,dc=com
dc:felixzh
objectClass:top
objectClass:domain

dn:ou=People,dc=felixzh,dc=com
ou:People
objectClass:top
objectClass:organizationalUnit

dn:ou=Group,dc=felixzh,dc=com
ou:Group
objectClass:top
objectClass:organizationalUnit

通过ldapadd添加上述entry到ldap:

代码语言:javascript
复制
[root@felixzh2 openldap]# ldapadd -x -W -D cn=Manager,dc=felixzh,dc=com -f /etc/openldap/base.ldif

迁移linux账号为LDAP账号

OpenLDAP默认没有普通用户,为方便测试,新建linux用户和用户组:

代码语言:javascript
复制
[root@felixzh2 openldap]# groupadd felixzhUser
[root@felixzh2 openldap]# useradd -g felixzhUser felixzhUser
[root@felixzh2 openldap]# echo 'admin@123' | passwd --stdin felixzhUser
Changing password for user felixzhUser.
passwd: all authentication tokens updated successfully

使用migrationtools工具集中的migrate_passwd.pl将felixzhUser用户信息转换成users.ldif

代码语言:javascript
复制
[root@felixzh2 openldap]# cd /usr/share/migrationtools/
[root@felixzh2 migrationtools]# grep ":10[0-9][0-9]" /etc/passwd |grep felixzhUser > passwd
[root@felixzh2 migrationtools]# export LDAP_BASEDN=dc=felixzh,dc=com
[root@felixzh2 migrationtools]# export LDAP_DEFAULT_MAIL_DOMAIN=felixzh.com
[root@felixzh2 migrationtools]# ./migrate_passwd.pl passwd users.ldif

然后通过ldapadd将上述users.ldif添加到ldap:

代码语言:javascript
复制
[root@felixzh2 migrationtools]# ldapadd -x -w felixzh -D cn=Manager,dc=felixzh,dc=com -f users.ldif

验证效果

可以通过ldapsearch查看,如下:

代码语言:javascript
复制
[root@felixzh2 migrationtools]# ldapsearch -x cn=felixzhUser -b dc=felixzh,dc=com

也可以通过界面化工具查看,更为直观:

为了方便用户验证,写个简单Java程序测试,代码地址:

代码语言:javascript
复制
https://github.com/felixzh2020/felixzh-learning-java

管理员登录验证

普通用户登录验证

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据从业者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档