Hadoop的安全机制
Hadoop安全机制现状
Hadoop 一直缺乏安全机制,主要表现在以下几个方面:
(1) User to Service
[1] Namenode或者jobtracker缺乏安全认证机制 Client的用户名和用户组名由自己指定。
[2] DataNode缺乏安全授权机制
用户只要知道某个block的blockID,便可以绕过namenode直接从datanode上读取该block;用户可以向任意datanode上写block。
[3] JobTracker缺乏安全授权机制
用户可以修改或者杀掉任意其他用户的作业;用户可以修改JobTracker的持久化状态。
(2) Service to service安全认证
Datanode与TaskTracker缺乏安全授权机制,这使得用户可以随意启动假的datanode和tasktracker,如:你可以直接到已经启动的某个TaskTracker上启动另外一个tasktracker:
./hadoop-daemon.sh start datanode
(3)磁盘或者通信连接没有经过加密
一般而言,系统安全机制由认证(authentication)和授权(authorization)两大部分构成。认证就是简单地对一个实体的身份进行判断;而授权则是向实体授予对数据资源和信息访问权限的决策过程。同Hadoop 1.0一样,Hadoop 2.0中的认证机制采用Kerbero和Token两种方案,而授权则是通过引入访问控制列表(Access Control List,ACL)实现的。
Hadoop 2.0授权机制
- 队列访问控制列表,例如提交程序和管理程序
- 应用程序访问控制列表
- 服务访问控制列表,例如查看和修改app
Hadoop的安全管理
Hadoop生态安全管理框架Apache Ranger
Ranger是一个框架,用于Hadoop平台上的监控和全面的数据安全管理。
Apache Ranger有以下目标:
- 集中安全管理,在中央UI中或使用REST API来管理所有与安全相关的任务。
- 使用Hadoop组件/工具执行特定行为(或操作)并通过中央管理工具来进行细粒度的授权管理。
- 标准化所有Hadoop组件的授权方法。
- 增强对不同授权方法的支持 如:基于角色的访问控制,基于属性的访问控制等。
- 在Hadoop的所有组件中集中审核用户访问和(与安全相关的)管理操作。
Ranger的功能还包括动态策略(Dynamic Policies),当访问依赖于时间等动态因素时。它可以基于每天的不同时刻、IP地址或是地理位置对访问资源进行限制。
对于受支持的Hadoop组件,Ranger通过访问控制策略提供了一种标准的授权方法。作为标准,Ranger提供了一种集中式的组件,用于审计用户的访问行为和管理组件间的安全交互行为。
Ranger使用了一种基于属性的方法定义和强制实施安全策略。当与Apache Hadoop的数据治理解决方案和元数据仓储组件Apache Atlas一起使用时,它可以定义一种基于标签的安全服务,通过使用标签对文件和数据资产进行分类,并控制用户和用户组对一系列标签的访问。Ranger的功能还包括动态策略(Dynamic Policies),当访问依赖于时间等动态因素时。它可以基于每天的不同时刻、IP地址或是地理位置对访问资源进行限制。
WebUI保护
Apache Knox Gateway是一个用于hadoop安全的RESTful API Gateway,为Spark/Hadoop集群提供唯一的REST入口。Knox以类似防火墙的形式挡在Spark集群之前,接管所有用户请求(如WEB UI访问、HDFS内容查看、Hive/HBase数据操作等)。从拓扑上来说这种做法更清爽(相对Kerberos),但对内部集群的保护要求很高,因为一旦攻破了Knox层,不管资源还是数据都是光着屁股的。
Spark、HDFS等等都提供了Story Web UI,用户可以从Web上查看当前JOB的执行情况,也可以kill掉JOB。那么这个Web UI不应该所有人都可以访问,而应该只开放给管理员使用。默认Spark没有认证,能连接到这个集群上就可以访问Web UI,但通过Knox,可以在打开Web UI的时候先做认证,限制只有某些用户可以访问。 类似的,Knox还可以保护HDFS NN UI、Yarn UI等