搜索
查看: 3957|回复: 0

12.3 保护使用Hadoop的企业应用的方法

[复制链接]

152

主题

47

回帖

2883

积分

管理员

积分
2883
发表于 2014-2-19 01:40:23 | 显示全部楼层 |阅读模式
12.3 保护使用Hadoop的企业应用的方法

近来,大量的项目,包括Hadoop附属项目,或者是专有的Hadoop发行版都许诺要强化Hadoop的安全。Hortonwork的Knox Gateway项目,Intel的安全加强版Hadoop的发行版,以及一些诸如Rhino等开源项目,Rhino已经发布了并且承诺帮助企业应用开发者来达到他们安全要求。不管怎样,每一个企业应用都不一样,每一个应用部署所需要的安全要求也不一样,认识到这一点非常重要。

在进入到具体细节之前,你必须理解为使用Hadoop的企业应用而提供的一些通用的基本要素和指导方针。对于这些基本要素和指导方针,很多项目在关注某些安全机制的时候出现了偏移,他们并不按照那些适用于任何项目的通用的指导方针。

➤确定你的安全需求 -- 理解你的安全需求非常重要。对于认证、访问控制、审计、加密、完整性、以及保密性的需求都取决于你的组织。相对于Hadoop运行时自身的安全(Hadoop自身的安全提供了针对执行查询或者运行工作的应用以及用户的访问控制),围绕Hadoop MapReduce工作的结果数据集的安全,你可能会提出这样问题。要和合适决策制定者交谈,以理解什么是需要的,这样你才能制定相应的计划。
➤从开始就围绕安全而设计 -- 这些项目的一个共同的重大的问题是最终还是试图改进安全性--这种做法导致了架构变得短期化并且脆弱,而且使得项目最终注定失败。如果你项目中存在类似于本章讨论的安全性需求,而你认为你只关注数据分析而在后来才去担心去保护你的方案的时候,那么你就会面临着非常大的风险。重点开发初期的高级安全架构的,这些架构可以和一些合适的权威专家一起讨论,以获得概念上的赞同。
➤不要保护你不需要保护的东西 -- 如果你为了达到本章讨论的某些目的而不需要安全性需求是,那么就不要采取安全性保护措施。不要让不必要的需求的加重复杂性,或者是负载的性能。
➤使用深度防御方法 -- 不要设想通过一个单独的安全性措施或者机制来阻挠或者阻止一次攻击或者是违反安全策略的行为。深度防御方法涉及到过个层次的防御。
➤记住大局 -- 理解你的数据的生命周期,如图12-1所示的那样。要明白提供安全性保护可能意味着在整个数据生命周期(从原始数据源的数据,到被转载到Hadoop集群中的数据,指导最终的结果数据)当中都要控制访问,以及维护和执行安全策略。

下面的部分就会深入研究满足某些安全性需求以及补充Hadoop自身安全性功能的方法。讨论会关注于三个主要的方法,这些方法配合Hadoop自身的机制构建企业安全的保护墙,在下一个部分当中,将讨论Apache Accumulo。

12.3.1 利用Accumulo的访问控制保护Apache Accumulo是一个稀疏的、分布式的、分类 、多维的键/值存储方案,他具有单元级别的精细访问控制的特性。他是由NSA在2008年根据Google的BigTable的论文开发的,在2011年的时候Accumulo被发布到Apache开源社区里面。目前Accumulo已经成为Apache的顶级项目。Accumulo是一个高度可扩展的NoSQL数据库,他建立在Hadoop和Zookeeper之上。Accumulo被开发的一部分原因是要解决大数据的安全性问题。

Accumulo扩展了BigTable的数据模型,但是添加了一个元素以提供单元级别的强制基于属性的访问控制(Attribute-Based Access Control,简称ABAC)。所有被导入到Accumulo的数据都可以通过可视化的控制来标记,基于访问控制策略当中的可视化控制,数据分析师查询数据的时候,他们只能查看到被允许看到的那部分。Accumulo的API提供了可供你自由实现客户端,自定义的客户端程序可以认证用户、和企业属性服务集成,企业属性服务可以拉取用户授权凭证以提供一定程度的访问控制。Accumulo同样提供了存储用户和授权信息的功能。
如图12-2所示,Accumulo是一个key/value的存储方案,Accumulo的key包含了5个元组。Accumulo中的Key是由RowID、Column Family、Column Qualifier、Column Visibility、Timestamp组合而成,这个5个元素的key关联一个value。
这个5元组的Key提供了原子性、局部性、独特性、访问控制和版本控制。需要注意的是Key当中的Timestamp提供了同一数据包含多个版本的功能,Timestamp根据不同的时间和日期。在很大程度上,Accumulo借鉴了BigTable的大部分数据模型,但是加入了可视化元素以提供面向数据的安全性--这就会只返回那些可视化标签满足于执行查询的用户或者应用的凭证的单元。

Accumulo以及HBase当中数据级安全性差异
HBase和Accumulo相似--都是运行在Hadoop上面的BigTable的实现的Apache项目。HBase和Accumulo都提供了相似的数据级安全性,但是是以不同的方式。正如第十章所讨论的,HBase提供了对每个表或者每个列的数据访问控制。在这点上面,HBase不提供单元安全性,而这正是Accumulo提供的。但是,目前在Intel的发行版本Rhino项目中已经在进行类似的工作,在不久Hbase也会支持基于单元的安全。HBase能够很容易的集成Hadoop安全模型(使用Kerberos),而这种方式和Hadoop生态系统的其他项目保持了一致。另外一方面,Accumulo是Apache新的顶级项目,他包含了一个内置的访问控制数据库,而他没有采用和Hadoop生态系统的其他项目一样的方式。
HBase和Accumulo都很流行。由于Accumulo的单元级的安全性,在一些高级安全环境中,Accumulo更加普遍,Accumulo许诺提供和强制执行访问控制(Mandatory Access  Control
简称MAC)以及其他不同的安全性相关的解决方案。


大多数的开发者都比较熟悉关系型数据库,这些数据库的表结构如表12-1所示,示例的表是一个二维模型。
表12-1:关系型数据库模型示例

在Accumulo结构中,相同的数据如表12-2所示,Accumulo中数据按照比较细的粒度存储,包括可见度(visibility)以及一个timestamp,其中timestamp可以使你跟踪超时的数据的改变。
表12-2:Accumulo数据模型中的数据

需要注意的是,在表12-2中,可见度被用安全标记进行了标记。这些安全标签能够被添加,使用AND/OR的布尔逻辑。例如,你可以提出如表12-3所示的授权策略,表12-3中授权凭证可以被新建以及和用户关联,以限制表中每一个单元的访问。
表12-3:安全策略以及对应的安全标签示例

在Accumulo的安全模型中,需要用户访问信赖的客户端(作为一个开发者,你可以编写这样的客户端)进行认证,客户端要负责认证用户,并且向Accumulo发送合适的授权信息。你可以选择集成你自己的认证和授权系统,或者你可以使用Accumulo内部的认证/授权的组件,该组件当中存储了用户和用户的授权凭证。本节当中会提供每种选择的例子。

一个简单的例子
让我们用一个大学的数据库作为例子,该大学从不同的部分和子机构当中搜集学生的信息。在例子当中,你会看到来自校园医疗中心、财务中心、大学管理、体育设施、大学警备人员的数据。很大范围内的数据都被收集了,并且能够被所有的机构查询,你可能被要求保护这些数据,这些要求包括如下几种:
➤学生的医疗检查记录只能被医疗人员或者是管理人员浏览。
➤大学体育课当中学生的与体育记录相关的记录只能对他们的教练、有时一些医疗人员可见
➤付款记录,成绩,如社会保险号码等敏感信息只能对大学管理人员所见
➤关于学生的校园警备记录只能对校园警察或者大学管理人员可见。
对于这个例子,让我们加载一些示样数据到Accumulo数据库中,如表12-4所示,在这个简单的例子中,有一个名叫Kirk Rest的学生,他有各种各样的信息,这些信息来自该大学的众多数据源。

表12-4 大学数据示例的Key/Value(待续)

表12-4 大学数据示例的Key/Value(续)

假设装载这部分信息的Accumulo存储是建立在一个测试Hadoop实例上面的。为此,你需要使用Accumulo的shell,该shell是Accumulo一个简单的客户端,能够被用来创建和修改表,同样能够被用来创建用户以及给用户指定授权凭证。因为本章将关注与安全性而不是Accumulo的细节,所以不会在本章提及装载数据的细节。

注意:由于不同版本的Accumulo使用了不同版本的Hadoop和Zookeeper,有时设置Accumulo是很大的挑战。一个开始Accumulo的简单的方法就是使用一个已经配置完了的虚拟机(VM)。Sqrrl公司的网站提供了一个亚马逊单机实例(Amazon Machine Instance 简称AMI),借助它可以快速的开始Apache Accumulo,Sqrrl公司也提供了一个Oracle VirtualBox的VM。具体细节,查看他们的网站http://www.sqrrl.com/

Accumulo被优化成能够快速提取key的value的系统。为此,一个你开发的Accumulo客户端(在这里的情况中,客户端可以是Accumulo的shell)可以创建scanner,scanner可以迭代value。如你看到Listing 12-1,scan命令使得你迭代查询一张你新建名叫universitydata的表的value值(root用户被授权可以访问表中所有的内容)

为了证明单元可见性的例子,你创建如下几个用户:
➤一个医生(drhouse),你给他授予了MEDICAL 角色

➤一个管理员(denyseAccountant),你给他授予了ADMIN角色
➤一个教练(coachTark),你给他授予了COACH角色
➤一个警察局长(chiefDoug),你给他授予了POLICE角色
如Listing 12-2所示,你使用Accumulo shell给所有用户指定读取表的权限(授予他们每个人Table.READ权限),然后使用setauths命令为他们指定角色,这一步是为了设定可见度。



最后,为了显示Accumulo将会保护表中的数据,你用Accumulo sheel以每一个用户进行登录。你可以scan(或者迭代)整个universitydata表。Listing 12-3,显示了你可能如何用用户coachTark,drHouse,denyseAccountant和chiefDoug,并进行表迭代,表根据每一个用户的权限进行访问控制。

从Listing 12-3可以看到,Accumulo可以根据每一个用户授权控制来限制访问,这一点可以通过使用Accumulo shell来证明。现在,让我们来使用JAVA建造一个Accumulo Client,来证明本例中同样级别的访问控制,该客户端同时还会和企业内的身份识别和访问管理基础设施集成。

因为Accumulo适合于集成企业的基础设施,Accumulo拥有一个灵活的模型。如前面的提及的那样,Accumulo Client的责任就是认证用户并提取用户的授权凭证,发送凭证给Accumulo以进行处理。只要Accumulo的表中数据的可见性属性被用与你企业属性存储系统中相同的属性和角色标记了,数据的可见度就会工作良好。如果不是,你会需要在Client端中对这些从属性存储系统中拉取的属性进行一下处理,以保证他们具有相同的特征。

为了证明这点,让我们通过一个简单的例子,该例子描述了如何编写一个简单的Client来认证用户,认证可以通过你选择的认证机制来完成,以及从由你选择的属性服务或者LDAP目录拉取授权凭证。

Listing 12-4 显示了一个例子,该例子使用JAVA类来连接Accumulo。为了连接,你必须使用Connector来建立一个Accumulo连接。为此,你需要首先连接到Zookeeper实例上,该Zookeeper实例使用ZookeeperInstance类来跟踪Accumulo,ZookeeperInstance会返回一个connector。

一旦你建立了一个连接,你想要认证一个用户。在这种情况下,对于这个简单的例子来说,你从命令行获取用户,并且将之传递给一个外部类叫做CustomAuthenticator,该类简单的显示了你可以使用另外一个在Accumulo外部的认证机制以及授权机制。在CustomAuthenticator类中,你把从命令行扫描到的用户名和密码传递到authenticate()方法中。如果一个用户成功通过认证,然后你就可以从外部的存储系统中拉取用户的授权凭证,凭证在Accumulo的类org.apache.accumulo.core.security.Authorizations类被返回。最后,如在之前的例子中所示的那样,你创建一个scanner来迭代在同一个表中value值,然后答应结果。
Listing 12-5 显示了命令行的结果。在这个例子中,你设置了一个外部的LDAP目录,该目录中有一个用户名为joeUser,他的角色为ADMIN。

本例中被认证的用户,joeAdmin,并不像之前的那些例子那样被存储在Accumulo当中。如这里表示的那样,你可以编写一个Client来认证一个用户,从企业的存储系统中拉取授权凭证,以及查询Accumulo的数据。

关于Apache Accumulo还有很多东西--很多不能在本章中覆盖到。然而,重要的是为了数据安全性使用Accumulo的组织机构,要认识到Accumulo只是企业安全解决方案中的一个方面。企业安全需要深度防御,必须覆盖到数据的整个生命周期里面,而不仅仅在Hadoop当中的数据。

12.3.2 加密静态数据
加密Hadoop中静态数据已经是很多项目中的热门话题了--这些项目中一些是开源的,一些是商业的。Hadoop自身并不提供这样的加密功能。目前,很多公司正在保护位于不同发行版的Hadoop中的敏感数据,不仅仅是保护敏感信息,也迎合如HIPAA这样的法律或者其他安全法规.很多组织机构想要利用加密静态数据来保护避免恶意用户获取对DataNode的未经授权的访问。


目前已经提出的一些解决方案中,包括Gazzang zNcrypt,该方案为Cloudera的发行版提供了数据安全性保护。于在2013早期发布的Intel的Hadoop发行版,已经经过优化来加密静态数据,这需要在使用该公司的Xeon处理器。好像,每天都有新的解决方案出现--但是到目前为止,所有的解决方案要么就是私有的,要么需要将你绑定在某一Hadoop的发行版中。

如第10章中提到的那样,Rhino项目(又Intel贡献给Apache社区)包含了增强功能,包括分布式Key管理,和静态数据加密功能。Hadoop开发社区目前正在考虑将这功能也放在未来的Hadoop版本中。

不管你用什么机制来为Hadoop加密静态数据,你必须明白静态加密功能的非故意的影响,这点很重要。如果你需要一种加密静态数据的解决方案,记住加密会影响到你的性能。如果你认为你的MapReduce工作可能比目前预想的要慢,想象加密会给性能带来什么样的影响。Intel的Hadoop发行版通过优化来做加密和解密,这种优化是通过使用特定处理器的硬件来完成的。记住只有Intel的Hadoop发行版是结合他自己的硬件加速器。企业架构师需要衡量加密静态数据给应用带来的影响--如果你确实需要这种功能,那么要根据性能来进行规划。
目前,你可能会由于多个原因想避免实施静态数据加密,除非你继续要实现。首先,静态数据加密领域是非常复杂的,因为分布的数据和key管理。另外,Rhino项目给这个领域带来的提高即将到来,但是在此之前,你可能会绑定在某一特定的发行版或者厂商上面。最后,如提到的那样,存在静态数据加密来带来的性能上面的后果。如果你的数据是如此的敏感以至于你正在探索加密静态数据的可能性,下面的部分可能会是一个解决方案。

12.3.3 网络隔离和分离方法
如前面提到的那样,拥有保密和敏感的数据的组织机构可能一直会用网络隔离的方法来隔离他们的Hadoop集群,用这种方法来满足他们的安全需求。这些机构通常会基于用户级的授权来控制对某个单独集群的访问,这种用户级的授权机制通常使用物理安全来作为保护机制。其他一些机构会使用低限制的方法,比如分离网络,但是允许受信任服务器和工作站能够在两个网络里面进行传输。


这些方法仍然是一个可行的选择,原因包括:

➤安全性集成的复杂性 -- 如果你的安全策略非常严格,你的数据非常敏感,以至于你不得不需要集成大量Hadoop自身未提供的安全性控制到Hadoop当中,考虑使用网络隔离,将它懂其他网络中分离出来,并且限制只允许被授权的用户访问。如果你做了,那么你只需要担心Hadoop结果数据集的发布,而不是Hadoop运行时的安全性。这就最小化了你的整体风险,并且能够减少大量的工作。
➤性能 -- “安全是性能的敌人”这句话经常被提及。在一个解决方案中,你加入了越多的安全性机制的时候,解决方案就会变得越慢。在保护Hadoop的时候,这点确实如此,特别是如果你考虑使用第三方的工具来加密和解密位于HDFS上面的数据的时候。许多人都会使用网络隔离的方式来轻易的避免了性能损耗。
➤数据集的差异化安全性 -- 你组织的一些数据可能只能发布给某些特定人群。在这种情况,Hadoop工作的结果集也同样敏感。虽然一些和Hadoop相关的工具(比如HBase、Accumulo)能够提供一种在列级(HBase)和单元级(Accumulo)过滤访问的方式,其他使用Hadoop的工具不会提供这种安全级别。如果你正在运行Java MapReduce工作以建造某些结果集,并且使用了大量的不通的工具,也许考虑根据可访问的人群来分离集群是一个比较聪明的做法。
➤Hadoop安全性蓝图的演进 -- 针对Hadoop的许多新的产品,发布品、发行版本都提供了新的安全特征。如第10章提及的,针对Hadoop的安全性的增强在近几年即将到来。即将而来的改变会影响到使用Hadoop企业的应用,在明白这些改变带来的后果之前,有很多组织机构正在选择网络隔离的模型。
➤在集成之前进行数据安全评审 --  由于网络隔离的方式不能对位于其他网络上面企业应用的数据进行实时访问,在企业应用使用资料之前,网络隔离允许审查和过滤这些资料,这减小了可能的保密性和隐私的侵犯。(对于实时Hadoop来说网络隔离肯定是一把双刃剑,并且为了发布企业应用使用的数据集,还需要一定的处理)。

企业应用安全中,网络隔离能在很多方式实现,图12-3 显示了一种方式。一个组织机构创建了一个“Data Analytics”网络,他与组织的企业网分通过一个物理的“air gap”离开来,以阻止数据在两个网络之间进行传输。在“DataAnalytics”网络中,用户恰当访问控制的数据分析师在Hadoop集群中进行查询和MapReduce操作,对于这个网络的访问控制又物理安全设备或者通过对执行查询的客户端机器进行认证。



图 12-3 “Airgap”网络隔离内的导入导出工作流
为了支持使用这些结果数据集的企业应用,需要开发和利用一些非常重要的工作处理:

  • 首先,任何需要被分析的数据都必须从在企业网中数据库和应用中提取到,写入,并带入到这个隔离的网络。
  • 一旦数据准备好被分析了,并且也被装载到集群中,Hadoop MapReduce工作就能运行,直到结果能被检阅。
  • 基于最终的结果,结果集必须被用授权策略进行标记,该授权策略也能够被外部的企业应用控制,或者结果集必须被过滤,保证敏感、机密或者保密的数据被移除掉。
  • 一旦数据集被过滤或者被用访问控制策略标记过了,数据集就被写入到介质中,导入到企业应用中。

对于许多机构,由于要牵涉到两个网络,这就需要一个笨重的处理,就需要一个从原网络导出数据,并导入到数据分析网络,进行分析,过滤,然后为了企业应用准备结果集。即使这个过程非常笨重,然而,在数据非常敏感的时候,许多组织机构都会采用这种方式。
因为牵涉的复杂性,许多组织都转向一个类似的模型,该模型限制了企业网内的可信赖主机到数据分析网络的流量,如图12-4所示,ETL处理过程可以跨网络进行,移除了之前描述的第一步。


图 12-4 单向传输的网络隔离
有些机构优先选择Apache的Accumulo来对数据进行访问控制,他们把结果集进行数据过滤之后,发布到企业网中--比如,创建一个“企业网用户”,该用户拥有的凭证等于该网络最低级别的授权。根据该用户过滤数据,通常会使结果集能够很容易的传送,而不用担心信息的非故意的泄露。

网络隔离可以通过其他很多种方式来实现--这只是其中的一些。其他涉及到Hadoop集群网络隔离方式需要根据数据的类型,一些低限制的方式需要允许连接到企业网络中机器或者从企业网络中的机器连接出来,这需要使用访问控制列表(ACLs)来对可信赖的主机进行限制。
你的解决方案中对于企业安全性的每一部分都依赖于你的组织机构的安全需求--两个机构很少一样,无论如何,本章中示例和指导意见应该能够帮助你构建你企业的安全解决方案。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
大数据中国(http://www.bigdatas.cn),以数据的力量改变生活!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
 
大数据行业交流
大数据行业交流
大数据求职招聘
大数据求职招聘
站长电话:
15010106923
微信联系:
hb-0310
站长邮箱:
ab12-120@163.com
大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-5-17 12:45 , Processed in 0.061512 second(s), 26 queries .

快速回复 返回顶部 返回列表