华少的博客

谁的头顶上没有灰尘,谁的肩上没有过齿痕

0%

企业私有云大数据平台权限管理分享(二)

前言

上文介绍了大数据平台资源权限管理框架Ranger 的原理和企业权限管理实践,然而企业大数据平台的权限管理应该包含这个数据开发、运维链路,尤其是在平台多租户使用的场景下,需要格外注意是否有权限管控不当问题。本文将结合CDP(Cloudera Private Platform) 平台组件,介绍平台大数据开发、运维链路上的权限管控实践。

多租户场景需求

在CDP 大数据平台上,有多个团队使用不同的组件,如IT 运维使用Cloudera Manager 管理大数据集群、使用Ranger 管理资源权限,多个团队使用Hue 进行ETL 任务开发和数据分析,使用Atlas 管理数据资产等。上篇中提到企业使用集中式的员工账号管理(Microsoft Active Directory),其内建Kerberos 支持,而Kerberos 也是Hadoop 生态系统中应用最广泛的用户认证管理框架。

简单来说,Kerberos 是一种身份验证协议,使用加密机制来处理客户端和服务器之间的请求交互,大大降低了假冒的风险。用户登录到其系统时输入的密码用于解锁本地机制,然后在与受信任的第三方的后续交互中使用该机制向用户授予用于对请求的服务进行身份验证的票据(具有有限的生命周期,默认10小时)。客户端进程和服务端进程相互证明身份后,通信进行加密,以保证隐私性和数据完整性。

而这个受信任的第三方是Kerberos Key Distribution Center(KDC),它是Kerberos操作的焦点,还为系统提供身份验证服务和票据授予服务(TGS)。简单地说,TGS向请求的用户或服务发出一个票据,然后将该票据提供给被请求的服务,该服务在票据生命周期内证明用户(或服务)的身份。

CDP 集群中的服务和用户主体都需要支持与Active Directory KDC 进行身份认证,才能保障多租户场景下,管理用户使用相应权限的资源和服务。

CDP 集成AD 身份认证

CDP 中的服务可以分为三种,基础服务网关服务公共服务,CDP 本身是不提供Kerberos 实现的,可以集成本地MIT KDC 服务或者远程集中式的AD服务,这里推荐使用企业级AD 服务做集成。
CDP 集群与AD KDC 服务交付流程如下图:
cdp-ad-interact

由此可见,CM 用于连接AD KDC, 创建和管理集群中各服务的Principals,因此CM 需要使用一个有权限在给定OU 内创建其他账户权限的账号,所有支持kerberos 的服务和用户 Principals都在AD KDC 中创建和进行身份验证。

CDP 中大部分组件服务都是支持Kerberos 认证的,服务身份认证请求涉及到几个不同的子系统,包括密钥分发中心(KDC)、身份验证服务(AS)和票证授予服务(TGS)。集群中的节点越多,提供的服务越多,这些服务与集群上运行的服务之间的流量就越大。这时身份认证容易形成瓶颈,推荐在生产环境集群使用LB AD服务。默认情况下,Kerberos使用TCP进行客户端/服务器通信,但在传递数据包方面不如UDP 快,因此**建议开启优先使用UDP 的配置udp_preference_limit = 1**。

虽然Kerberos 认证相对复杂,但在CDP 上这些过程大都是透明的,集群的业务用户只需在登录页面输入用户名和密码,Ticket 处理、加密和其他详细信息都会在后台自动完成,不仅可以对单个服务目标进行身份验证,还可以对整个网络进行身份验证。

CDP 中关键组件集成AD 权限表:

组件名称 说明 权限
Cloudera Manager 集中化的管理CDP 集群,接入各个服务的管理配置、监控以及日志等 支持本地用户和同步AD user和group,并设置不同的role,如Cluster Administrator/Configurator/Limited Operator/Operator/Read-Only
Hue Hadoop User Experience - 可视化数据分析工作台 支持本地用户和LDAP user和group,并自定义用户使用基础服务的权限,如oozie,hive sql,filebrowser,impala等
Ranger 权限管理服务 可配置登录Ranger Admin Web UI的AD user filter
Atlas 元数据管理服务 支持本地用户和同步AD user和group,管理的元数据权限由Ranger策略控制

总结来讲,在CDP 中,开发、运维和业务分析的相关组件可以便捷的集成AD 账号管理体系,结合集群资源管理服务Ranger 可以做到全链路上多租户的使用场景权限管理支撑。

Hue 中使用集群基础服务

CDP 中,作为网关服务的Hue 组件是数据开发运维和分析中常用的服务,它能提供可视化的webui界面,支持大部分的大数据框架,如HDFS 文件浏览器、Hive、外部RDBMS、Oozie任务调度管理等,简化了用户和Hadoop 集群的交互。Hue是基于Django 开发的B/S应用,
使用django-auth-ldap 库来集成LDAP 同步和认证django_auth_ldap.LDAPBackend;认证有了之后,对于其他资源的访问操作,需要构建不同的connector。

Hue 作为web 服务器,在访问底层大数据服务如HDFS、Hive时,以预定义的特定用户进行认证,同时将业务用户(如bob)的个人信息附加在请求信息中,传递到底层的hive服务器,hive 服务器会以特定账号认证,然后又以业务用户的身份进行权限判断。如下图:
hue-doas

关键代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def open_session(self, user):
self.user = user
kwargs = {
'client_protocol': beeswax_conf.THRIFT_VERSION.get() - 1,
'username': user.username, # If SASL or LDAP, it gets the username from the authentication mechanism since it dependents on it.
'configuration': {},
}
connector_type = 'hive' if self.query_server['server_name'] == 'beeswax' else self.query_server['server_name']
interpreter = get_interpreter(connector_type=connector_type, user=self.user)

if self.impersonation_enabled:
// 开启impersonation(doas)机制情况下
kwargs.update({'username': DEFAULT_USER})

if self.query_server.get('dialect') == 'impala': # Only when Impala accepts it
kwargs['configuration'].update({'impala.doas.user': user.username})

if self.query_server['server_name'] == 'beeswax': # All the time
// LDAP 上的业务用户
kwargs['configuration'].update({'hive.server2.proxy.user': user.username})
...

一些补充

以上介绍了CDP集群组件与Kerberos 认证和hadoop 的doAs 机制,同时不得不提到Knox 代理,Knox 通过对Hadoop 生态系统组件提供Gateway 的形式来加强安全管控,类似于一个Rest/HTTP 的服务代理/防火墙。使用Knox需要注意的是只针对Rest/HTTP服务,可以通过简单的auth 身份认证代理kerberos 认证,同时也有很大的局限性,如单点,性能和流程等。对于自身不支持权限认证或者不合适接入Kerberos 认证的服务,可以考虑使用Knox 叠加一层权限管控,例如CDP 中的kafka Connector对集成kerberos 认证的schema registry服务支持不完善,可以考虑加入一层Knox代理访问。

另外,部分服务间通信不完善的场景下,可以尝试将service account的keytab(这里不推荐个人account的keytab,因为企业一般要求个人账户定期修改密码)放入HDFS 目录,通过Ranger 控制用户对相应目录的权限进行权限管理,有权限的用户可以使用该keytab进行服务交互。

总结

本文介绍了CDP 中集群与Kerberos 认证流程、服务账号创建和分发使用,CDP 通过对集群开发运维和分析使用到的用户组件进行相应的用户权限管理,使得集群中的服务能支持多租户使用的全链路场景。然而大数据平台中除了权限控制链路,还有关联的安全措施,只有做到这些才能保护企业数据不被窃取和破坏。下篇将介绍大数据平台中的一些安全实施策略和原理,感谢阅读。

参考

Kerberos

详解kerberos认证原理

Authentication Overview

Configure Atlas authentication for AD

Hadoop Proxy user

Hiveserver2的代理执行之路

Django Authentication Using LDAP