内容纲要
背景
越来越多的现场需求对接开源的产品,比如Spark、presto等,如果集群开了Guardian安全,这些开源的可能会用到带hostname的Principal,不带hostname会报错。
- 在 TDH5.1 中用户可以通过界面来添加相应的用户(带
hostname
) - 但是在TDH5.2.x 及 TDH6.0.x 中用户名中不能带
hostname
了,且添加后的用户的principal
不带hostname
从guardian页面下载下来的keyta文件是没有hostname
的,原因是带hostname
的principal一般是给底层服务使用,不能作为普通用户的用户名。
注意:本文适用于guardian (5.1,3.2.0)版本,可以通过下面的命令查看容器正在使用的guardian版本。
kubectl describe po $(kubectl get po -o wide | grep -i guardian-server | head -1 | awk '{print $1}') | grep -i "image:"
- guardian-3.1.3 之前版本,需要手动放置
kadmin.guardian
脚本 - guardian-3.1.3 及以后版本
kadmin.guardian
已经内置在guardian server的镜像中,一般为/usr/lib/guardian/scripts/kadmin.guardian
官方内部链接:https://wiki.transwarp.io/pages/viewpage.action?pageId=23465307
解决方案
这里以realm为TDH的集群为例,需要创建一个 test000/tdh001@TDHBAK的principal,并构造其keytab
1、将guardian-utils-guardian-3.1.3.jar包部署到容器内
可选择持久化目录存放(e.g. /var/log/guardian/),这样就无须持久化镜像;注意不要放到/usr/lib/guardian/lib/下。
下载地址:
链接:https://pan.baidu.com/s/1N9vj7bLh0WqyE0HzKcBdUg
提取码:n3bk
MD5: c47a21240ba0293d17d74535904defaf
2、放置kadmin.guardian脚本,将该jar包的路径添加到classpath最开始
#!/usr/bin/env bash
TRANSWARP_UTILS=/etc/default/transwarp-utils
APACHEDS=/etc/guardian-apacheds
JAVA=java
[ -e "$TRANSWARP_UTILS" ] && source ${TRANSWARP_UTILS}
if [ x"$JAVA_HOME" != x"" ]; then
JAVA=$JAVA_HOME/bin/java
fi
$JAVA -Dguardian.root.logger='INFO, RFA' -cp /var/log/guardian/guardian-utils-guardian-3.1.3.jar:$APACHEDS/conf:/usr/lib/guardian/lib/* io.transwarp.guardian.utils.KadminShell "$@"
3、在使用该脚本构造principal时加上参数-pau,添加带有@域的uid
# -w 后面的密码,可以到manager数据库内执行 SELECT value FROM transwarp_manager.service_config where name='guardian.ds.root.password' 查看,并不是admin租户的密码哦
> /var/log/guardian/kadmin.guardian -H 172.22.33.2 -P 10389 -b admin -w 123456 -r TDHBAK -q "addprinc -pw 123456 -pau 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
4、检查principal的uid是否带有<@realm>
# 可以看到新增了一个krbtgt/FFF@TDH
[root@mll01 guardian]# ldapsearch -H ldap://172.22.33.2:10389 -x -D uid=admin,ou=system -w 123456 -b ou=System,ou=People,dc=tdh |grep 'uid: test000/tdh001@TDHBAK'
uid: test000/tdh001@TDHBAK
5、生成keytab文件
[root@mll01 guardian]# ./kadmin.guardian -H 172.22.33.2 -P 10389 -w 123456 -q "xst test000/tdh001@TDHBAK -k /var/log/guardian/test000.keytab"