Cloudera Hadoop开源组件Sentry:为金融、政府、医疗保健使用hadoop打下基础

每一天都有更多的数据、用户和应用在加入Apache Hadoop这个日益壮大的集群中来。虽然对于整个数据驱动的组织来讲这是一个好消息,但对于安全管理员和监察人员来讲,如何让终端用户在现存的Hadoop架构下,不在安全方面进行妥协始终是个挥之不去的问题。

尽管Hadoop在文件系统层有很强的安全性,但对于保证用户数据访问和BI应用程序的充分安全,它缺少颗粒级的支持。所以,许多对安全系数要求较高的业内组织被迫作出选择:要么将数据置于非保护状态,要么将全部的用户拒之门外。大多数企业选择后者,严格限制对Hadoop数据的访问。

Cloudera发起的开源项目Sentry将用来解决这个问题。Sentry是一个Hadoop的受权模块,为了对正确的用户和应用程序提供精确的访问级别,Sentry提供了细粒度级、基于角色的受权以及多租户的管理模式,为Hadoop使用者提供了如下便利:

  • 可以在Hadoop中存储更敏感的数据
  • 使更多的终端用户拥有Hadoop数据访问权
  • 建立更多的Hadoop使用案例
  • 构建多用户应用程序
  • 符合规范(例如SOX,PCI,HIPAA,EAL3)

Sentry做为CDH4.3的补丁包,做为CDH4.4和Impala1.1的核心组件被推出。此外,将Sentry推荐为Apache孵化器项目,使其能在Hadoop生态圈中物尽其用。

下文将详细介绍开发Sentry的缘由,以及其功能和架构的技术概述。

Hadoop安全观往知来
对于金融、政府、医疗保健和其它对敏感数据的访问有严格监管的行业,如若使用Hadoop必需要达到如下几个要求:

  • 周边安全:经过网络安全、防火墙和最终的认证来确认用户身份,确保集群访问的安全。
  • 数据安全:经过屏蔽和加密技术,保护集群中的数据不会被非法访问,包括已存储的数据和传输中的数据。
  • 访问安全:经过文件系统ACL和细粒度受权,定义受权用户和应用程序对集群数据的权限。
  • 可见性:经过中央审计报告数据源和数据用法。

得益于近来在Hadoop社区的工做(例如Cloudera对Hive的贡献HiveServer2)以及与方案提供商的合做,要求1和2已经经过Kerberos认证、加密和屏蔽技术获得了实现。Cloudera Navigator经过对文件、记录和元数据的中央审计支持要求4。但对于要求3,访问安全,直到Sentry的推出才获得了解决。

没有Sentry的访问和受权

在Sentry诞生以前,对于受权有两种备选解决方案——粗粒度级的HDFS受权和咨询受权,但它们并不符合典型的规范和数据安全需求,缘由以下:

  • 粗粒度级的HDFS受权:安全访问和受权的基本机制被HDFS文件模型的粒度所限制。五级受权是粗粒度的,由于没有对文件内数据的访问控制:用户要么能够访问整个文件,要么什么都看不到。另外,HDFS权限模式不容许多个组对同一数据集有不一样级别的访问权限。
  • 咨询受权:咨询受权在Hive中是一个不多使用的机制,旨在使用户可以自我监管,以防止意外删除或重写数据。这是一种“自服务”模式,由于用户能够为本身授予任何权限。所以,一旦恶意用户经过认证,它不能阻止其对敏感数据的访问。

Sentry下的数据访问和受权

经过引进Sentry,Hadoop目前可在如下方面知足企业和政府用户的RBAC(role-based acess control)需求:

  • 安全受权:Sentry能够控制数据访问,并对已经过验证的用户提供数据访问特权。
  • 细粒度访问控制:Sentry支持细粒度的Hadoop数据和元数据访问控制。在Hive和Impala中Sentry的最初发行版本中,Sentry在服务器、数据库、表和视图范围提供了不一样特权级别的访问控制,包括查找、插入等——容许管理员使用视图限制对行或列的访问。管理员也能够经过Sentry和带选择语句的视图或UDF,根据须要在文件内屏蔽数据。
  • 基于角色的管理:Sentry经过基于角色的受权简化了管理,你能够轻易将访问同一数据集的不一样特权级别授予多个组。例如,对于某特定数据集,你能够分配给反欺诈小组查看全部列的特权,给分析师查看非敏感或非PII(personally identifiable information)列的权限,给数据接收流插入新数据到HDFS的权限。
  • 多租户管理:Sentry容许为委派给不一样管理员的不一样数据集设置权限。在Hive/Impala的状况下,Sentry能够在数据库/schema级别进行权限管理。
  • 统一平台:Sentry为确保数据安全,提供了一个统一平台,使用现有的Hadoop Kerberos实现安全认证。同时,经过Hive或Impala访问数据时能够使用一样的Sentry协议。将来,Sentry协议会被扩展到其它组件。

接下来,将经过Sentry的架构介绍这些功能是如何实现的。

Sentry架构
Sentry是一个高度模块化和可扩展的机制。最初,它容许Impala和Hive执行细粒度的安全策略,但同时它也能够扩展到其它框架。



Sentry架构:初始绑定在Hive和Impala上,内置可扩展到其它框架
Sentry包括一个核心受权提供者和一个结合层。核心受权提供者包括:一个协议引擎,能够评估和验证安全协议;一个协议提供者,负责解析协议。结合层提供一个可插拔的接口,乐意实现与协议引擎的对话。(协议提供者和结合层都提供了可插拔的接口)。
目前咱们已经实现了基于文件的提供者,能够理解具体协议文件格式。协议文件可被存储在本地文件系统或HDFS中,以便复制和审计。尽管Cloudera只是初步实现了对Hive和Impala的支持,可是请记住Sentry架构是可扩展的:任何开发者均可以将其绑定到其它组件(例如Pig或Cloudera搜索)或构件一个能够理解协议的数据库提供者。

在Sentry中组件特有的绑定为特定的组件实现了特权模式,并且理解内部数据结构。例如,Hive绑定实现了针对Hive的特权模式,容许对表中行/列数据的细粒度访问,以及元数据操做,例如显示表。

结论
咱们相信Sentry是通往Hadoop安全的关键一步,将推进大数据技术在更多行业、组织和终端用户的使用,同时为管理员提供灵活、多租户的管理,以及统一的平台。Cloudera不只将Sentry贡献给了Hadoop生态圈,同时在大数据平台Cloudera Enterprise中也支持Sentry。