TDH5.0以上版本之间配置单向或双向互信

  使用配置, 其他常见问题
内容纲要

概要描述


对于单个TDH集群,所有用户和服务都包含在一个Kerberos realm中。虽然这对于简单使用很有效,但是考虑到大型企业的工作方式,这通常是不现实的。随着时间的推移,大型企业最终会使用多个Kerberos域,比如合并、收购,或者只是想隔离企业的不同部分。
但是,在默认情况下,KDC只知道自己的realm和自己kdc database中的principal。如果来自一个域的用户希望使用由另一个域控制的服务,该怎么办? 为了实现这一点,需要在两个域之间建立Kerberos信任。

例如,假设一个非常大的公司,它决定创建多个域来识别不同的业务线,包括HR和MARKETING。因为两个域中的用户可能都需要从两个域访问服务,例如HR的KDC需要相信来自MARKETING的信息。反之亦然。从表面上看,这似乎很简单,但实际上存在两种不同类型的信任: 单向信任和双向信任(或完全信任)。上述例子代表了一种双向信任。

如果有另外一个DEV域,其中的研发部门有需要去访问DEV域和MARKETING域。但是市场部用户不应该访问DEV域,此场景需要单向信任

那么如何建立Kerberos信任呢? AS和TGS内部使用了一个特殊的principal,它的形式是krbtgt/{REALM}@{REALM},这一原则对于建立信任非常重要。对于信任,principal采用krbtgt/{TRUSTING_REALM}@{TRUSTED_REALM}的形式。这个原则的一个关键是它在两个realm都存在,并且和principal的密码和使用的加密类型必须是相同的

本文将举例如何建立KTDH到TDH集群的单向信任(TDH集群需要访问KTDH集群的资源)

  • KTDH outgoing TDH
  • 信任的一方是KTDH,被信任的一方是TDH

环境准备

file

file

详细说明


Step1: 任意一个集群的Guardian页面添加互信关系,注意密码要填写目标域中管理员的密码

  • 这里我们在KTDH集群上添加对TDH集群的OUTGOING信任,代表TDH集群可以单向访问KTDH集群
  • KTDH集群添加好之后,在TDH集群上能看到对应的生成了INCOMING的信任关系
  • 该步完成之后,会在双方realm下生成 DN: uid=krbtgt/KTDH@TDH,ou=System,ou=People,dc=tdh (krbtgt/TDH-TRUSTING@TDH-TRUSTED)
  • Realm一栏需要填写另一个Realm的名称;
  • 信任类型可以选择为INCOMMING,OUTGOING,TWO_WAY三种;
  • 主机名为另一个Realm中guardian-server的ip地址或者主机名,端口号为其端口号,默认为8380,并且默认开启TLS协议;
  • 域管理员为另一个域中具有管理员角色的用户;密码为域管理员的密码

file

通过后台命令判断是否添加成功:

> ldapsearch -H ldap://localhost:10389 -x -D uid=admin,ou=system -w 123456 -b ou=System,ou=People,dc=tdh | grep 'uid=krbtg'

Step2: 检查两个集群上的时间是否同步,不同步可以通过ntpdate命令或者网络时间协议同步

Step3: 被信任的一方,也就是TDH集群,每个节点修改/etc/hosts,加入对方集群也就是KTDH的hostname和ip信息

Step4: 被信任的一方,也就是TDH集群,修改/etc/krb5.conf

[realms]
TDH = {
kdc = tdh62001:1088
kdc = tdh62002:1088
}

KTDH = {
kdc = tdh62101:1088
kdc = tdh62102:1088
}

[domain_realm]
tdh62001 = TDH
tdh62002 = TDH
tdh62003 = TDH
tdh62101 = KTDH
tdh62102 = KTDH
tdh62103 = KTDH

Step5: 信任的一方,也就是KTDH集群,允许识别对方的principal,在hdfs界面添加自定义参数然后配置服务重启hdfs

  • 目的是修改nn和snn节点上的core-site.xml

    hadoop.security.auth_to_local
    RULE:[1:$1@$0](^.*@.*$)s/^(.*)@.*$/$1/g RULE:[2:$1@$0](^.*@.*$)s/^(.*)@.*$/$1/g DEFAULT

上述表达式几乎通配,因为这里是单向互信,出于安全性考虑可以更狭义一点,在acceptance filter和substitution 阶段只能够识别域为TDH的principal,配置为


    hadoop.security.auth_to_local
    RULE:[1:$1@$0](^.*@TDH$)s/^(.*)@TDH$/$1/g RULE:[2:$1@$0](^.*@TDH$)s/^(.*)@TDH$/$1/g DEFAULT

测试: 在被信任的一方,也就是TDH集群上测试,看能否访问KTDH集群的服务

[root@tdh62001 ~]# hadoop fs -ls  hdfs://172.22.23.7:8020/
Found 8 items
drwx--x--x   - hbase hbase           0 2020-03-27 21:43 hdfs://172.22.23.7:8020/hyperbase1
drwx--x--x   - hive  hive            0 2020-03-26 14:24 hdfs://172.22.23.7:8020/inceptor1
drwx--x--x   - hive  hive            0 2020-03-26 22:17 hdfs://172.22.23.7:8020/inceptor2
drwx--x--x   - hive  hive            0 2020-03-26 22:36 hdfs://172.22.23.7:8020/slipstream1
drwx--x--x   - hive  hive            0 2020-03-26 22:38 hdfs://172.22.23.7:8020/slipstreamstudio1
drwxrwxrwt   - hdfs  hadoop          0 2020-03-27 19:13 hdfs://172.22.23.7:8020/tmp
drwxrwxrwt   - hdfs  hadoop          0 2020-03-26 22:31 hdfs://172.22.23.7:8020/user
drwxr-xr-x   - hdfs  hbase           0 2020-03-26 14:15 hdfs://172.22.23.7:8020/yarn1

注:配置双向互信的方法只需要在双方集群都做配置文件的修改即可,另外hadoop.security.auth_to_local参数正则匹配2个realm或者选择通配

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。