Hadoop使用kerberos进行用户与服务认证。kerberos是第三方认证机制,需要借助kerberos server完成认证。
Keberos Server又称为Key Distribution Center,或者是KDC,它主要包括3个部分:
存储用户与服务的数据库
AS(Authentication Server):执行初始认证,签发TGT(Ticket Granting Ticket)
TGS(Ticket Granting Server):签发基于TGT的service tickets
当用户(Principal)请求AS认证后,AS会返回TGT(通过用户kerberos密码加密),用户可以在本地使用kerberos密码解密TGT。
在TGT失效之前,用户可以使用TGT从TGS获取service tickets,从而让用户访问服务。
但是cluster resource(hosts或者services)不能提供密码,因此需要使用keytab,其中包含resource(Principal)的认证凭证。
而由Kerberos server控制的hosts,users,services集合称为realm。
概念 | 说明 |
---|---|
Key Distribution Center(KDC) | 在kerberos环境中,认证信赖源 |
Kerberos KDC Server | 主机或服务器,充当KDC服务 |
Kerberos Client | 与KDC认证的集群中的任何机器 |
Principal | 与KDC认证的user或service的名字 |
Keytab | 包含一个或多个principal及key的文件 |
Realm | 包含KDC及Clients的kerberos network |
KDC Admin Account | Ambari使用的管理员账号,用来在KDC创建principal,生成keytab |
Principal
Hadoop中的每个服务或子服务都必须有自己的principal。域中的principal的名称包括:主名与实例名,而实例名通常是运行服务的主机的FQDN。服务需要借助keytab获取ticket,而keytab通常是从Kerberos database获取,并保存在本地的安全目录。
Principal及Keytab的命名惯例
Asset | 惯例 | 示例 |
---|---|---|
Principals | $service_component_name/[email protected] | nn/[email protected] |
Keytabs | $service_component_abbreviation.service.keytab | /etc/security/keytabs/nn.service.keytab |
除了Hadoop Service Principals,Ambari自身也需要Ambari Principals,从而对服务进行smoke check,或者是alert health check,或者是返回cluster组件的metrics。
Ambari Principals | 说明 |
---|---|
Smoke及Headless Service用户 | Ambari用来执行smoke check及alter health check |
Ambari Server user | 当集群启动kerberos,组件的REST端点需要SPNEGO认证 |
【参考】
1。ambari:kerberos:https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.4/bk_security/content/_kerberos_overview.html