近些年来大数据所用到的的安全方案主要有如下三种
- Kerberos(业界常用的服务认证)
- Sentry(Cloudera选用的方案,cdh版本集成)
- Ranger(Hortonworks选用的方案,hdp发行版集成)
Kerberos
Kerberos只能控制你是否能访问服务,不能控制到很细的粒度
比如说,它可以控制你访问hive与否,但是对于hive的表没有用户级别的权限控制没有实现(需要集成LDAP一起使用才行)
kerberos的主要构成部分为Client,KDC,Service
构成 | 作用 |
---|---|
KDC | Kerberos的服务端程序,用来验证各个模块 |
Client | 需要访问服务的用户,KDC与Service会对用户的身份进行验证 |
Service | 集成了Kerberos的服务,如Hbase,Hdfs,Hive等 |
Kerberos协议过程
- Client向KDC申请TGT
- Client通过获得的TGT向KDC申请用于访问的Service的Ticket
- Client用KDC返回的Ticket访问Service
可以用游乐园的思想来类比:
将KDC比作游乐园,Client比作游客,Service比作游乐园的各种活动项目
首先游客(Client)进入游乐园(KDC)需要游乐园的门票(TGT),玩耍各类项目需要对应项目的票据(ticket),比如玩耍摩天轮(Hbase)需要摩天轮的专属票据(ticket)
优点:
- 服务认证,防止broker datanode regionserver等组件冒充加入集群
- 解决了服务端到服务端的认证,也解决了客户端到服务端的认证
缺点
- kerberos为了安全性使用临时ticket,认证信息会失效,用户多的情况下重新认证繁琐
- kerberos只能控制你访问或者拒绝访问一个服务,不能控制到很细的粒度,比如hdfs的某一个路径,hive的某一个表,对用户级别上的认证并没有实现(需要配合LDAP)
Apache Sentry
Apache Sentry是Cloudera公司发布的一个Hadoop安全开源组件,它提供了细粒度级、基于角色的授权.
优点:
- Sentry支持细粒度的hdfs元数据访问控制,对hive支持列级别的访问控制
- Sentry通过基于角色的授权简化了管理,将访问同一数据集的不同特权级别授予多个角色
- Sentry提供了一个统一平台方便管理
- Sentry支持集成Kerberos
缺点:
- 组件只支持hive,hdfs,impala 不支持hbase,yarn,kafka,storm等
Apache Ranger
Apache Ranger是Hortonworks公司发布的一个Hadoop安全开源组件
优点:
- 提供了细粒度级(hive列级别)
- 基于访问策略的权限模型
- 权限控制插件式,统一方便的策略管理
- 支持审计日志,可以记录各种操作的审计日志,提供统一的查询接口和界面
- 丰富的组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM)
- 支持和kerberos的集成
- 提供了Rest接口供二次开发
选择Ranger的原因
多组件支持(HDFS,HBASE,HIVE,YARN,KAFKA,STORM),基本覆盖我们现有技术栈的组件
支持审计日志,可以很好的查找到哪个用户在哪台机器上提交的任务明细,方便问题排查反馈
拥有自己的用户体系,可以去除kerberos用户体系,方便和其他系统集成,同时提供各类接口可以调用