Stay hungry Stay foolish

Kerberos与LDAP权限控制预研

Posted on By blue

目录



Kerberos介绍

Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。

在Kerberos系统中至少有三个角色:认证服务器(AS),客户端(Client)和普通服务器(Server)。客户端和服务器将在AS的帮助下完成相互认证。

客户端和服务器都有一个唯一的名字,叫做Principal。同时,客户端和服务器都有自己的密码,并且它们的密码只有自己和认证服务器AS知道。

使用Kerberos时,一个客户端需要经过三个步骤来获取服务:

  • 认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的Ticket-Granting Ticket(TGT)。

  • 授权:客户端使用TGT向Ticket-Granting Server(TGS)请求一个服务Ticket。

  • 服务请求:客户端向服务器出示服务Ticket,以证实自己的合法性。该服务器提供客户端所需服务,在Hadoop应用中,服务器可以是namenode或jobtracker

Kerberos与Hadoop结合

简单来说,没有做kerberos认证的Hadoop,只要有client端就能够连接上。而且,通过一个有root的权限的内网机器,通过创建对应的linux用户,就能够得到Hadoop集群上对应的权限。

而实行Kerberos后,任意机器的任意用户都必须现在Kerberos的KDC中有记录,才允许和集群中其它的模块进行通信。

在Hadoop1.0.0或者CDH3版本后,加入了Kerberos认证机制。使得集群中的节点是信赖的。Kerberos可以将认证的密钥在集群部署时事先放到可靠的节点上。

集群运行时,集群内的节点使用密钥得到认证。只有被认证过节点才能正常使用。

企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。防止了恶意的使用或篡改Hadoop集群的问题,确保了Hadoop集群的可靠安全。

Kerberos能解决的Hadoop安全认证问题

  • 解决服务器到服务器的认证
  • 解决client到服务器的认证
  • 对用户级别上的认证

Kerberos模式下提交Hadoop作业

这里我们从 YARN 上的 MR 任务提交过程简单说明一下:

  1. 用户执行任务前,先通过KDC认证自己,获取TGT(Ticket Granting Ticket)。KDC是 Kerberos 认证的中心服务,存储用户和服务的认证信息。

  2. 用户通过 TGT 向 KDC 请求访问服务的Ticket, KDC 生成 session key 后一并发给客户端。

  3. 客户端通过 service ticket 向服务认证自己,完成身份认证。

  4. 完成身份认证后客户端向服务请求若干token供后续任务执行认证使用(比如 HDFS NameNode Delegation Token, YARN ResourceManager Delegation Token)

  5. 客户端连同获取到的 token 一并提交任务,后续任务执行使用 token 进行来自服务的认证

如,提交一个作业前,先进行认证:

$ kinit test/test@TEST.COM
Password for test/test@TEST.COM:
$ kinit -k -t /../xx.keytab {username}/{instance}@{REALM}.COM
$ hadoop jar xxx //提交作业到yarn

Kerberos与LDAP结合

LDAP 服务器本质上是一个为只读访问而优化的非关系型数据库。它主要用做地址簿查询(如 email 客户端)或对各种服务访问做后台认证以及用户数据权限管控。

用 LDAP 来做账户管理, 用 Kerberos 来认证, 是一种常见的方案。授权一般来说是由应用来决定的,通过在 LDAP 数据库中配置一些属性可以让应用程序来进行授权判断。

Kerberos在线上集群启用存在的风险点

  • 部署过程较长,且比较复杂,需要修改HDFS、Yarn、Hive等相关配置文件,线上服务会停止。
  • 运行、提交作业前都需要加上认证步骤
  • 认证开启后,初期提交作业,会出现一些坑(认证失败,配置存在问题等)
  • 对于长时间运行的作业,需要配置相应认证过期策略
  • Kerberos、LDAP服务宕机,会导致所有需要通过认证的服务都无法使用(需配置主从模式)

参考文章:

Hadoop Kerberos安全机制介绍:http://dongxicheng.org/mapreduce/hadoop-kerberos-introduction/

HDFS使用kerberos http://www.datastart.cn/tech/2016/06/07/kerberos-1.html

Hadoop配置LDAP集成Kerberos https://segmentfault.com/a/1190000002532332