背景
越来越多的现场需求对接开源的产品,比如Spark、presto等,如果集群开了Guardian安全,这些开源的可能会用到带hostname的Principal,不带hostname会报错。
kadmin.guardian
是kerberos-guardian的交互式命令行工具, 在Guardian server的pod的任意目录下,执行kadmin.guardian
指令即可执行。
所谓的V2是指配合guardian-3.2.X及以上版本的guardian使用的kad,in.guardian
工具(不适用于guardian-3.1.X及以下版本)。v1版本请参考 KB: guardian 3.2.0 以下版本如何构造带有hostname的principal和keytab
注意:本文适用于guardian 3.2.0 及以上版本,可以通过下面的命令查看容器正在使用的guardian版本。
kubectl describe po $(kubectl get po -o wide | grep -i guardian-server | head -1 | awk '{print $1}') | grep -i "image:"
官方内部链接:http://wiki.transwarp.io:8090/pages/viewpage.action?pageId=24588058
解决方案
这里以realm为TDH的集群为例,需要创建一个 test000/tdh001@TDHBAK
的principal,并构造其keytab
1、addprinc创建principal
# 首先需要进入到guardian server的pod内,我们的脚本存放在/usr/lib/guardian/scripts/kadmin.guardian
> kubectl exec -it $(kubectl get po -o wide | grep -i guardian-server | head -1 | awk '{print $1}') bash
# 执行listprincs输出所有principal信息
# -w 后面的密码,可以到manager数据库内执行 SELECT value FROM transwarp_manager.service_config where name='guardian.ds.root.password' 查看,并不是admin租户的密码哦
> /usr/lib/guardian/scripts/kadmin.guardian -H172.22.25.71 -w123456 -P8380 -T -q "listprincs"
注意:下面这步构造principal的时候,-rTDHBAK,这里的realm是你期望构造的principal里面的realm。
# 执行addprinc构造principal
> /usr/lib/guardian/scripts/kadmin.guardian -H172.22.25.71 -w123456 -P8380 -rTDHBAK -T -q "addprinc -pw 123456 test000/tdh001"
可以通过 kadmin.guardian -help
或者kadmin.guardian -h
查看使用说明
-b The zookeeper parent znode for HA, guardian is default
-d The suffix of the ds server, such as dc=tdh
-H The host of ds server, the default is localhost
-P The port of ds server, the default is 10389
-p The dn used to connect to the ds server, such as
uid=admin,ou=system
-Q The zookeeper quorum for HA
-q The kadmin query, must be xst, addprinc, listprincs, addent
-r The realm of the kerberos, such as TDH
-T Whether TLS should be used
-w The password used to connect to the ds server
# 验证principal是否添加成功
> /usr/lib/guardian/scripts/kadmin.guardian -H172.22.25.71 -w123456 -P8380 -T -q "listprincs" | grep 'test000/tdh001@TDHBAK'
2、xst -k 生成keytab文件
注意,-rTDH,这个realm使用的是你当前集群的realm。
下面的xst命令里面不需要写realm(否则有可能报错principal找不到),因为对于principal来说test000/tdh001是唯一的。
[root@jiujiu-tdh-71 scripts]# /usr/lib/guardian/scripts/kadmin.guardian -w123456 -rTDH -T -q"xst -k /tmp/test000.keytab test000/tdh001"
[root@jiujiu-tdh-71 scripts]# ls /tmp/test000.keytab
/tmp/test000.keytab
# 校验keytab中的principal信息
[root@jiujiu-tdh-71 scripts]# klist -ket /tmp/test000.keytab
Keytab name: FILE:/tmp/test000.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
0 10/12/2021 10:42:21 test000/tdh001@TDHBAK (aes128-cts-hmac-sha1-96)
0 10/12/2021 10:42:21 test000/tdh001@TDHBAK (aes256-cts-hmac-sha1-96)
0 10/12/2021 10:42:21 test000/tdh001@TDHBAK (DEPRECATED:des3-hmac-sha1)
0 10/12/2021 10:42:21 test000/tdh001@TDHBAK (DEPRECATED:des-cbc-md5)
0 10/12/2021 10:42:21 test000/tdh001@TDHBAK (DEPRECATED:arcfour-hmac)