大数据集群安全组件解析(含代码)

感谢阅读「美图数据技术团队」的第 5 篇文章,关注我们持续获取美图最新数据技术动态。

大数据集群的基本是数据以及用于计算的资源,企业将相应的数据和资源开放给对应的用户使用,防止被窃取、破坏等,这些都涉及到大数据安全。基于以上关键点,考虑到美图公司原有的系统较为庞大复杂,在第一阶段内我们采取轻量级的改造方案进行了大数据集群安全的初探索,接下来通过本文与大家交流相关经验。

由于美图的大数据集群安全迫在眉睫,主要需求有以下几个方面:

  • 支持多组件,最好能支持当前公司技术栈的主要组件,HDFS、HBASE、HIVE、YARN、STORM、KAFKA 等;
  • 支持细粒度的权限控制,可以达到 HIVE 列,HDFS 目录,HBASE 列,YARN 队列,STORM 拓扑,KAKFA 的 TOPIC;
  • 开源,社区活跃,按照现有的集群改情况造改动尽可能的小,而且要符合业界的趋势。

#选择大数据安全组件

有了集群安全的需求的下一步就是选择合适的大数据安全组件,目前比较常见的安全方案主要有三种:Kerberos(业界比较常用的方案)、Apache Sentry(Cloudera 选用的方案,cdh 版本中集成)和Apache Ranger(Hortonworks 选用的方案,hdp 发行版中集成)。

Kerberos

Kerberos 是一种基于对称密钥的身份认证协议,作为一个独立的第三方的身份认证服务,可以为其它服务提供身份认证功能,且支持 SSO。

*SSO,即 Single Sign On单点登录。客户端身份认证后,可以访问多个服务,如 HBase/HDFS 等。

图 1:Kerberos 原理图

如图 1 所示,Kerberos 的协议主要分为 3 个阶段:Client 向 KDC 申请 TGT;Client 通过获得的 TGT 向 KDC 申请用于访问 Service 的 Ticket;Client 用返回的 Ticket 访问 Service。

而这些过程使得它的优点显而易见:服务认证过程有效地防止 broker datanode regionserver 等组件冒充加入集群;解决了服务端到服务端的认证的同时也解决了客户端到服务端的认证。

不可避免, Kerberos 也有短板:

  • 为了安全性使用临时 ticket,认证信息会失效,用户多的情况下重新认证比较繁琐;
  • Kerberos 只能控制你访问或者拒绝访问一个服务,不能控制到很细的粒度,比如 hdfs 的某一个路径,hive 的某一个表,对用户级别上的认证也没有实现(需要配合 LDAP 服务集成)。

Apache Sentry

Apache Sentry 是 Cloudera 公司发布的一款 Hadoop 安全开源组件,它提供了细粒度级、基于角色的授权。

图 2:Apache Sentry 架构图,via Apache Sentry 官网

如图 2 所示,Apache Sentry 目前支持 Hive、Impala、HDFS 等主流组件,它的优点如下:

  • 支持细粒度的 HDFS 元数据访问控制,对 Hive 支持列级别的访问控制;
  • 通过基于角色的授权简化了管理,将访问同一数据集的不同权限级别授予多个角色;
  • 提供统一平台,方便管理;
  • 支持集成 Kerberos。

但 Apache Sentry 支持的组件种类较少,无法支持 Hbase、Yarn、Kafka、Storm等常见组件。

Apache Ranger

Apache Ranger 是 Hortonworks 公司发布的 Hadoop 安全组件开源组件,经过调研我们发现它的优点非常多:

  • 提供细粒度级的权限控制;
  • 权限模型基于访问策略;
  • 权限控制插件式,策略管理统一、方便;
  • 支持各式操作的审计日志,提供统一的查询接口和界面;
  • 支持组件丰富,如 HDFS、HBase、Hive、Yarn、Kafka、Storm 等;
  • 支持和 Kerberos 的集成;
  • 提供 Rest 接口,可供二次开发。

#Apache Ranger 系统架构及实践

图 3 :Apache Ranger 架构图

如图 3 Apache Ranger 架构图所示,Ranger Admin 可以支持多种组件,如 HDFS、HBase、Hive、Yarn、Kafka、Storm 等,这些组件可以进行符合标准的自定义拓展再加入到系统中,每个组件通过不同的安装节点实现(如 Hdfs 安装在 NameNode 上)。Ranger Admin 也可以通过独立设置的 SDK 与开放平台进行连接,实现对用户、组以及策略的管理。

权限模型

访问权限定义了「用户-资源-权限」这三者间的关系,Apache Ranger 基于策略来抽象它们之间的关系,进而延伸出它的权限模型。

用户

由 User 或 Group 表示,User 代表访问资源的用户,Group 代表用户所属的用户组。

资源

不同的组件对应的业务资源是不一样的,比如

  • HDFS 的 FilePath
  • HBase 的 Table、Column-family、Column
  • Hive 的 Database、Table、Column
  • Yarn 的 Queue

权限

由(AllowACL, DenyACL)来表达,类似白名单和黑名单机制,AllowACL 描述允许访问的情况,DenyACL 描述拒绝访问的情况。它的权限控制十分细粒度,不同的组件对应的权限是不一样的:HDFS 支持 Read、Write、Execute;HBase 支持 Read、Write、Create、Admin;Hive 支持 Select、Create、Update、Drop、Alter、Index 、Lock、Read、Write;Yarn 支持 submit-app、admin-queue。

权限实现

Apache Ranger 的权限二元组是由允许和拒绝组成,相当于白名单与黑名单。我们会在 Ranger Admin 的项目里配置一些策略,具体到某一个组件会定期通过 REST 接口把所拥有的策略拉取到相应的服务上,根据策略执行访问决策树,并且记录访问审计。

具体的策略执行过程如图 4 所示,假设我们发起一个请求,以 Hive JDBC 的操作进行模拟,到了 HiveServer 2 里的策略,先将拒绝的策略进行匹配(即先访问黑名单),匹配到黑名单之后再匹配黑名单里的黑名单,这是一个负负得正的过程,相当于允许访问。到了允许访问的阶段再去匹配它的白名单,若白名单匹配到拒绝策略也是直接进行「策略下放」的操作。所有都匹配成功之后,就享有「允许访问」的权限。

*如果没有policy能决策访问,一般情况是认为没有权限拒绝访问,然而Ranger还可以选择将决策下放给系统自身的访问控制层

图 4

总结以上策略优先级的处理逻辑可得:

  • 黑名单优先级高于白名单
  • 黑名单排除优先级高于黑名单
  • 白名单排除优先级高于白名单

每个权限控制组件会有自身的权限接口,Ranger 将它们实现之后重写一遍之后,经过权限控制进行权限验证,接下来逐个组件介绍它们的实现原理。

HDFS

hdfs-site.xml 会修改如下配置:

<property>
        <name>dfs.permissions.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.permissions</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.namenode.inode.attributes.provider.class</name>
        <value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
    </property>

所有的 permission 开启之后将 HDFS 的实现类替换成 Ranger 的实现类,这个实现类会在 HDFS 启动的时候加载一些钩子函数,加载后所有权限都会通过实现类进行访问,同时它会拉取一些访问策略的线程,该线程通过 REST 请求拉取 Ranger Admin 上配置的策略,同时在内存和本地目录中备份,这个配置更新过程约 30S。

加载过程如图 5 所示:

图 5

HBase

hbase-site.xml 会修改如下配置:

<property>
    <name>hbase.security.authorization</name>
    <value>true</value>
</property>
<property>
    <name>hbase.coprocessor.master.classes</name>
   <value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>
<property>
    <name>hbase.coprocessor.region.classes</name>
    <value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>

加载过程如图 6 所示:

图 6

Hive

hiveserver2-site.xml 会修改如下配置:

<property>
    <name>hive.security.authorization.enabled</name>
    <value>true</value>
</property>
<property>
    <name>hive.security.authorization.manager</name>
    <value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>

加载过程如图 7 所示:

图 7

Yarn

yarn-site.xml 会修改如下配置:

<property>
    <name>yarn.acl.enable</name>
    <value>true</value>
</property>
<property>
    <name>yarn.authorization-provider</name>
    <value>org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer</value>
</property>

加载过程如图 8 所示:

图 8

其他组件(如 Kafka、Storm 等)的原理也如同以上几个例子,通过实现接口类实现。

#美图 Ranger 相关实践

基于美图数据技术团队的现状,综合以下几点考虑进行分析比对,我们选择了 Apache Ranger :

  • 多组件支持,基本覆盖美图现有技术栈的组件;
  • 支持审计日志,方便查找某个用户在某台机器上提交的任务明细,问题排查反馈通过溯源可以快速完成;
  • 拥有独立用户体系,可以去除 Kerberos 用户体系,方便和其他系统集成,同时提供各类接口调用。

考虑到美图数据平台系统较为庞大复杂,不宜进行太大规模的变动迁徙,我们在第一阶段根据自身情况打造了轻量级的改造方案对大数据集群安全进行了初探索,主要分为以下几个部分:

1.由于美图在调用各服务过程中使用 hdfs shell、hbase-shell、hive-jdbc 只能获取到用户信息,在只有组策略时无法生效。因此我们必须要加入 ldap 组件同步用户组信息,这就增加了系统的复杂性,通过改写 Ranger-Admin 代码,在客户端 plugin 获取策略时将组权限赋予用户,实现了组策略功能。

2.同时我们针对 Ranger 的 api 封装了一个自己的 SDK,方便美图数据开放平台集成 Hive、HDFS、HBase 等相关组件的Ranger 服务调用。

3.由于开源社区的 Ranger 工程标准不统一,我们针对性按照美图大数据研发标准进行自己的版本定制和优化,方便线上运维及日常维护。

以上就是我们第一阶段的实践,在接下来的文章中将会与各位交流美图数据技术团队在 Ranger 上进行第二、三阶段的实践技术经验,欢迎持续关注。

原文发布于微信公众号 - 美图数据技术团队(gh_feb1d206d92b)

原文发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hadoop学习

深度解析大快DKM大数据运维管理平台功能

之前几周的时间一直是在围绕DKhadoop的运行环境搭建写分享,有一些朋友留言索要了dkhadoop安装包,不知道有没有去下载安装一探究竟。关于DKHadoop...

26150
来自专栏CSDN技术头条

进阶指南|三个月大数据工程师学习计划

本文来自作者在GitChat(ID:GitChat_Club)上的精彩分享,CSDN独家合作发布。 申明:本文旨在为普通程序员(Java程序员最佳)提供一个入门...

413100
来自专栏我的安全视界观

[一起玩蛇】Python代码审计中的器II

31470
来自专栏Spark学习技巧

kafka入门介绍

21660
来自专栏IT大咖说

你只知大数据的便利,却不知漏洞——hadoop安全完整解析

内容来源:2017 年 07 月 29 日,威客安全技术合伙人安琪在“CDAS 2017 中国数据分析师行业峰会”进行《大数据平台基础架构hadoop安全分析》...

27340
来自专栏张善友的专栏

MongoDB核心贡献者:不是MongoDB不行,而是你不懂!

近期MongoDB在Hack News上是频繁中枪。许多人更是声称恨上了MongoDB,David mytton就在他的博客中揭露了MongoDB许多现存问题。...

250100
来自专栏静晴轩

Npm vs Yarn 之备忘详单

有则笑话,如此讲到:“老丈人爱吃核桃,昨天买了二斤陪妻子送去,老丈人年轻时练过武,用手一拍核桃就碎了,笑着对我说:你还用锤子,你看我用手就成。我嘴一抽,来了句:...

35530
来自专栏包子铺里聊IT

5分钟深入浅出 HDFS

通过前面几篇文章的介绍,我们深入讨论了 Hadoop MapReduce 处理数据的过程,以及优化 MapReduce 性能的方方面面。 期间被反复提及的 HD...

32260
来自专栏大数据和云计算技术

资源管理框架(mesos/YARN/coraca/Torca/Omega)分析

1 资源调度的目标和价值 1.1 子系统高效调度 任务之间资源隔离,减少争抢。 任务分配调度时结合资源分配,各个任务分配合理的资源,充分利用系统资源,减少资源利...

46580
来自专栏安全领域

5 分钟内造个物联网 Kafka 管道

原文地址:https://dzone.com/articles/creating-an-iot-kafka-pipeline-in-under-five-min...

484100

扫码关注云+社区

领取腾讯云代金券