Hadoop生态圈-开启Ambari的Kerberos安全选项
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
在完成IPA-Server服务的安装之后,我们已经了解了他提供的基础功能和服务,领略了其Web控制台和CLI接口的便利性,但是这写特性好像并没有提示平台的安全性啊。别着急,因为IPA-Server只是提供了诸如LDAP和Kerberos等重要的基础设施,只有将IPA于Ambari进行集成才能完全显示处它的神威。关于部署IPA-Server的部署可参考我之前的笔记:“使用FreeIPA安装Kerberos和LDAP”。
一.集成前的准备
为了让Hadoop相关的服务切换到Kerberos认证模式,需要将Ambari与FreeIPA集成。在正式集成之前需要做一些准备工作,大致思路如下:首先需要在IPA中新增一个ambari组,专门用于管理ambari的相关操作,接着需要在所有的集群服务器上安装IPA-Client程序,最后需要在Ambari-Server所在的服务安装IPA-Admin管理端工具。接下来我们开始介绍具体如何实施。
1>.新建Ambari组
首先,在Ambar-Server所在的服务器上使用Kerberos命令登录amdin账户。通过远程登录IPA-Server的方式新建一个名为“ambari-managed-principals”的组,具体操作如下所示:
[root@node101 ~]# kinit admin
Password for admin@YINZHENGJIE.COM:
[root@node101 ~]#
[root@node101 ~]# klist
Ticket cache: KEYRING:persistent::
Default principal: admin@YINZHENGJIE.COM Valid starting Expires Service principal
// :: // :: krbtgt/YINZHENGJIE.COM@YINZHENGJIE.COM
[root@node101 ~]#
[root@node101 ~]# ipa group-add ambari-managed-principals
---------------------------------------
Added group "ambari-managed-principals"
---------------------------------------
Group name: ambari-managed-principals
GID:
[root@node101 ~]#
创建成功后,我们可以在IPA-Server的Web UI中查看,如下图所示:
2>.安装IPA-Client
[root@node103 ~]# yum -y install ipa-client
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.huaweicloud.com
* updates: mirrors.huaweicloud.com
Package ipa-client-4.6.-.el7.centos.x86_64 already installed and latest version
Nothing to do #原因是我已经安装完毕啦!
[root@node103 ~]#
[root@node103 ~]# yum -y install ipa-client #安装客户端工具
[root@node102 ~]# ipa-client-install --domain=YINZHENGJIE.COM --server=node100.yinzhengjie.com --realm=YINZHENGJIE.COM --principal=admin@YINZHENGJIE.COM --enable-dns-updates #开始安装客户端程序,参数意思下面会详细解释!
WARNING: ntpd time&date synchronization service will not be configured as
conflicting service (chronyd) is enabled
Use --force-ntpd option to disable it and force configuration of ntpd Autodiscovery of servers for failover cannot work with this configuration.
If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure.
Proceed with fixed values and no DNS discovery? [no]: yes #注意,这里需要输入的是yes哟!
Client hostname: node102.yinzhengjie.org.cn
Realm: YINZHENGJIE.COM
DNS Domain: yinzhengjie.com
IPA Server: node100.yinzhengjie.com
BaseDN: dc=yinzhengjie,dc=com Continue to configure the system with these values? [no]: yes #注意,这里需要输入的是yes哟!
Skipping synchronizing time with NTP server.
Password for admin@YINZHENGJIE.COM: #对面的小哥哥小姐姐往这里看,这里是需要你输入管理员的用户名密码,也就是你在安装IPA-Server时配置的密码!现在知道为什么我当时如此强调要记住他的原因了吧!
Successfully retrieved CA cert
Subject: CN=Certificate Authority,O=YINZHENGJIE.COM
Issuer: CN=Certificate Authority,O=YINZHENGJIE.COM
Valid From: -- ::
Valid Until: -- :: Enrolled in IPA realm YINZHENGJIE.COM
Created /etc/ipa/default.conf
New SSSD config will be created
Configured sudoers in /etc/nsswitch.conf
Configured /etc/sssd/sssd.conf
Configured /etc/krb5.conf for IPA realm YINZHENGJIE.COM
trying https://node100.yinzhengjie.com/ipa/json
[try ]: Forwarding 'schema' to json server 'https://node100.yinzhengjie.com/ipa/json'
trying https://node100.yinzhengjie.com/ipa/session/json
[try ]: Forwarding 'ping' to json server 'https://node100.yinzhengjie.com/ipa/session/json'
[try ]: Forwarding 'ca_is_enabled' to json server 'https://node100.yinzhengjie.com/ipa/session/json'
Systemwide CA database updated.
Hostname (node102.yinzhengjie.org.cn) does not have A/AAAA record.
Failed to update DNS records.
Missing A/AAAA record(s) for host node102.yinzhengjie.org.cn: 172.30.1.102.
Missing reverse record(s) for address(es): 172.30.1.102.
Adding SSH public key from /etc/ssh/ssh_host_ed25519_key.pub
Adding SSH public key from /etc/ssh/ssh_host_rsa_key.pub
Adding SSH public key from /etc/ssh/ssh_host_ecdsa_key.pub
[try ]: Forwarding 'host_mod' to json server 'https://node100.yinzhengjie.com/ipa/session/json'
Could not update DNS SSHFP records.
SSSD enabled
Configured /etc/openldap/ldap.conf
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Configuring yinzhengjie.com as NIS domain.
Client configuration complete.
The ipa-client-install command was successful
You have new mail in /var/spool/mail/root
[root@node102 ~]#
安装客户端工具之后就可以执行上面的“ipa-client-install”命令安装客户端程序。在安装的过程中会将其所在的服务器向IPA-Server的主机服务注册并加入到IPA域,同时也会向DNS服务注册。接下来我们对上述配置的几个中待你参数进行必要的说明:
domain:
IPA-Server安装时设置的域名 server:
IPA-Server服务器的FQDN realm:
IPA-Server安装时设置的认证管理域 principal:
IPA-Server安装时设置的管理员账号 温馨提示:IPA-Clinet服务需要在所有集群服务器进行安装,重复上述的安装动作,只带所有的集群服务器节点都安装完成。
3>.安装IPA-Admin管理工具
如果一个Ambari系统与IPA完成集成,那么通过Ambari管理的服务器都会被自动注册成IPA的主机。不仅如此,Ambari内建的集群用户同样也会在IPA中创建相应的Kerberos用户,Ambari内所有已安装的Hadoop组件也都会在IPA中生成相应组件的服务。Ambari这种高度自动化的集成能力便是依靠IPA提供的IPA-Admin工具在背后默默完成的。所以还需要为Ambari安装这套管理工具,安装的方式非常简单,执行yum -y install ipa-admintools命令即可。
[root@node103 ~]# yum -y install ipa-admintools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.huaweicloud.com
* updates: mirrors.huaweicloud.com
Package ipa-client-4.6.-.el7.centos.x86_64 already installed and latest version
Nothing to do #这是由于我已经安装过啦!
[root@node103 ~]#
[root@node103 ~]# yum -y install ipa-admintools #咱们直接安装即可!
4>.开启IPA集成选项
Ambari在默认情况下,IPA集成选项是隐藏配置,需要先将其开启才能使用。开启IPA集成选项非常简单,我们只需要在ambari地址末尾加上exprimental即可,如下图所示,在浏览器输入:“http://node101.yinzhengjie.org.cn:8080/#/experimental”之后会来到一个扩展设置页面,找到名为“enableIpa”的选项,勾选然后保存。
二.集成IPA
1>.在Ambari界面只能启用“Kerberos”
前置准备动作全部完成之后,如下图所示,打开浏览器进入Ambari的Admin菜单,可以发现目前Kerberos认证功能是处于关闭状态的,单击绿色的“Enable Kerberos”按钮进入开启Kerberos的设置导航页面。
如下图所示,可能会出现“YARN日志和本地dir将被删除,ResourceManager状态将被格式化为启用/禁用Kerberos的一部分。”的相关提示,点击“Proceed Anyway”。
2>.确认检查项
如下图所示,选择Exiting IPA之后,会出现4个确认检查项。如下:(这里主要观察第一个和第四个检查项,其实你如果按照我的博客来操作的话,就直接勾选吧~因为我已经帮你检查过啦!)
2.1>.集群主机加入IPA域,主机注册在DNS中
2.2>.为创建的主体或krbPasswordExpiry属性设置没有到期的密码策略是可写的
2.3>.ipa管理的krb5.conf设置default_ccache_name=/tmp/krb5cc_%{uid}
2.4>.Java加密扩展(JCE)已经安装在AMBARI服务器主机和集群中的所有主机上。
3>.设置Kerberos信息
现在开始设置Kerberos的配置信息,如下图所示,按照安装IPA-Server时设置的信息填写KDC地址,管理员账号和Realm等信息。填写完毕之后可以使用“Test KDC Connection”按钮验证配置是否正确,正确无误之后单击“Next”按钮继续。
4>.安装和测试Kerberos客户端
在设置完Kerberos信息之后,如下图所示,Ambari便会开始给所有被它管控的服务器节点安装Kerberos客户端程序并进行一些环境测试工作,安装并测试通过之后单击“Next”按钮继续。
在这个安装步骤的同学,如果遇到错误的话,我们可以按照对应的方法查看日志,详情请参考:Ambari集成Kerberos报错汇总。
5>.配置识别
接着会跳转到配置确认页面,如下图所示。这里会让我们确认Kerberos服务的一些配置信息,例如KDC服务的地址,KDC类型和Realm名称等等。
温馨提示:下面我标示的这个信息,大家应该注意和你的域名加起来字符是否超过32个,如果超过了32个长度的话请修改,否则可能会报错!
6>.确认配置
如下图所示,有意向非常重要的资料需要我们存档。单击蓝色的“Doownload CSV”按钮可以下载一份名为“Kerberos.csv”的配置文件。
下载“Kerberos.csv”的配置文件之后,请妥善保存这个CSV文件。如下图所示,它记录了Ambari与IPA集成后Ambari与其Hadoop相关服务生成的有所Kerberos账号信息,包括用户名,类型和keytab文件路径等重要信息。
7>.完成Stop Services配置
8>.完成Kerberos Cluster配置
9>.完成Start and Test Services步骤(这个过程可能有点长,因为他需要启动服务嘛!)
10>.Kerberos启动成功
三.测试Kerberos认证
我们还以HDFS为例,首先通过ssh登录到安装了HDFS客户端的任意服务器。
1>.查看hdfs的数据信息
[root@node101 ~]# hdfs dfs -ls /
// :: WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "node101.yinzhengjie.org.cn/172.30.1.101"; destination host is: "node101.yinzhengjie.org.cn":;
[root@node101 ~]#
报错分析:
大家是不是很好奇?结果没有返回任何查询数据,而是发生了异常错误,这是怎么回事呢?别着急,我们一起分析一下:从上面的异常信息可以看到“ GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]”这样一条错误信息,表明当前操作系统请求找不到任何Kerberos的tgt凭证。这么一来报错信息就很明显了,这是由于HDFS服务现在已经开始使用Kerberos协议进行权限验证,所以使用Linux本地用户已经不能操作Hadoop集群中的任何服务了。换句话说,现在必须使用Kerberos用户登录之后才能使用相关服务,这能证明Hadoop相关服务的Kerberos认证已经生效了。恭喜你,Kerberos是真的启用成功啦!
2>.登录KDC服务器验证信息。
现在转为使用Kerberos用户登录,打开在集成IPA步骤中心下的Kerberos.cvs文件并找到HDFS服务对应的Kerberos用户和它的keytab保存路径等相关信息,如下图所示:
如上图所示,我们找到了keytab的路径(“/etc/security/keytabs/hdfs.headless.keytab”)和用户信息(“hdfs-yinzhengjie_cluster@YINZHENGJIE.COM”)。注意对应的主机(“node101.yinzhengjie.org.cn”)哈。我们登录KDC服务器,具体操作如下:
[root@node101 ~]# kinit -kt /etc/security/keytabs/hdfs.headless.keytab hdfs-yinzhengjie_cluster@YINZHENGJIE.COM
[root@node101 ~]#
[root@node101 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs-yinzhengjie_cluster@YINZHENGJIE.COM Valid starting Expires Service principal
// :: // :: krbtgt/YINZHENGJIE.COM@YINZHENGJIE.COM
renew until // ::
[root@node101 ~]#
3>.登录KDC服务器成功后,继续查看hdfs的数据,发现成功啦!
[root@node101 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs-yinzhengjie_cluster@YINZHENGJIE.COM Valid starting Expires Service principal
// :: // :: krbtgt/YINZHENGJIE.COM@YINZHENGJIE.COM
renew until // ::
[root@node101 ~]#
[root@node101 ~]# hdfs dfs -ls /
Found items
drwxrwxrwx - yarn hadoop -- : /app-logs
drwxr-xr-x - yarn hadoop -- : /ats
drwxr-xr-x - hdfs hdfs -- : /hdp
drwxr-xr-x - mapred hdfs -- : /mapred
drwxrwxrwx - mapred hadoop -- : /mr-history
drwxr-xr-x - hdfs hdfs -- : /ranger
drwxr-xr-x - ranger hdfs -- : /test
drwxrwxrwx - hdfs hdfs -- : /tmp
drwxr-xr-x - hdfs hdfs -- : /user
drwxrwxrwx - hdfs hdfs -- : /yinzhengjie
[root@node101 ~]#
这一次终于可以正常返回数据了,一切也都符合设定的预期。将Ambari与IPA集成之后,大数据平台中所有的Hadoop相关服务都已经切换到使用Kerberos认证了。由此,Hadoop相关服务的安全隐患问题终于被彻底消除。