首页 > 大数据 > Hadoop > 利用Accumulo的访问控制保护
Apache Accumulo是一个稀疏的、分布式的、有序的以及多维度的键/值存储,提供单元格级别的细粒度访问控制属性。它于2008年由NSA开发,基于Google BigTable的设计,于2011年发布到Apache开源社区,并且现在是顶级Apache项目。它是构建在Hadoop和Zookeeper之上的、高度可扩展的NoSQL数据库。开发它的部分原因是为了解决大数据安全问题。
Accumulo扩展了BigTable的数据模型,但添加了一个元素,以提供单元格级别的、强制的基于属性的访问控制(ABAC)。可以使用可见性控制来标记所有导入到Accumulo中的数据,当数据分析师查询数据时,基于访问控制策略中的可见性控制,他们将仅能看到你期望他们看到的内容。Accumulo的API为你提供的能力包括编写认证用户的客户端,以及与企业级属性服务相集成,并拉取用户的授权凭证以提供某个级别的访问控制。Accumulo还提供将用户和授权信息保存在其自身中的能力。
如图12-2中所示,Accumulo是一个键/值存储,它的键是一个5元组。Accumulo中的键由行ID、列族、列限定符、列可见性和时间戳构成。此5个元素的键与一个值相关联。
图12-2 Accumulo数据模型
该5元组键提供原子性、本地性、唯一性、访问控制和版本化。重要的是要注意键中的时间戳维度包含了基于不同的时间和日期,提供相同数据多个版本的能力。大体来说,Accumulo的数据模型多数借用了BigTable数据模型,但添加了可见性元素来提供面向数据的安全——它将仅返回那些运行查询的用户/应用程序的凭据满足可见性标签的单元格。
Accumulo和HBase中数据级安全性的差异
HBase和Accumulo是类似的——它们都是在Hadoop之上运行BigTable实现的Apache项目。HBase和Accumulo中的安全性提供类似的数据级安全,但方式不同。如第10章中的讨论,HBase可以对数据提供以逐个表或逐个列为基础的访问控制。当前,它还不支持Accumulo可以做到的单元格安全性,但Rhino项目的Intel发行版正在实施这方面的工作,使得HBase不久后可能会支持基于单元格的安全。
HBase可以与Hadoop的安全模型轻易地集成(使用Kerberos),而且此方案与Hadoop生态系统的其余部分一致。而另一方面,Accumulo是一个较新的顶层Apache项目,包含一个内部访问控制数据库,而且它实现安全性的方式与Hadoop生态系统中其他工具不同。
HBase和Accumulo都很流行。基于其单元格级别的访问控制安全特性,Accumulo在高安全环境中是最流行的,并承诺提供与强制访问控制(MAC)和差异性安全相关的解决方案。
大多数较熟悉关系型数据库的开发者通常习惯于看到类似于表12-1的表,它是一个二维的模型。
表12-1 关系数据模型中的示例数据
|
名 字 |
大 学 |
出生所在州 |
签 名 短 语 |
|
Billy |
UCLA |
West Virginia |
“Brutal” |
|
Jeff |
UVA |
New Jersey |
“C’Mon Man” |
在Accumulo的结构中,相同的数据看上去会类似于表12-2,其中使用了较细的粒度来保存数据,包括可见性和能够跟踪数据随时间变化的时间戳。
表12-2 Accumulo数据模型中的数据
|
行ID |
族 |
限 定 符 |
可 见 性 |
时 间 戳 |
值 |
|
Billy |
School |
University |
Public |
20130503 |
UCLA |
|
Billy |
BirthRecord |
State of Birth |
Admin |
20120503 |
West Virginia |
|
Billy |
Greeting |
Signature Phrase |
Public |
20120503 |
“Brutal” |
|
Jeff |
School |
University |
Public |
20120503 |
UVA |
|
Jeff |
BirthRecord |
State of Birth |
Admin |
20120503 |
New Jersey |
|
Jeff |
Greeting |
Signature Phrase |
Public |
20120503 |
“C’Mon Man” |
注意在表12-2中,可见性被标记了安全标签。可以使用与/或布尔逻辑将这些标签添加到记录中。例如,可以给出类似于表12-3的授权策略,其中可以创建授权凭据并与用户关联,将访问限定为表中的每个单元格。
表12-3 安全策略示例及其安全标签语法
|
访问某条记录的策略示例 |
安全标签语法 |
|
必须是共和党人而且是美国公民 |
Republican & USCitizen |
|
必须是警察,或者必须是美国公民且在武装部队中 |
Police Officer | (USCitizen & ArmedForces) |
|
必须是项目管理者而且必须在FGM或White Oak组织中 |
ProjectManager & (FGM | White Oak) |
|
超过17岁或者父母同意 |
Over17 | parentalConsent |
在Accumulo的安全模型中,用户向可信的客户端(作为开发人员,可以编写这样的客户端)进行认证,而客户端要负责认证用户并向Accumulo传递适当的授权凭据。你的可选方案为与自己的认证和授权系统相集成,或者使用Accumulo的内部认证/授权组件——可以在其中保存用户和他们的授权凭据。本小节为每种方案都提供了一个示例。
让我们考虑一个大学数据库的示例,其中某大学从各个部门和下属组织收集了关于其学生的数据。在此示例中,有来自校园医疗中心、财政中心、大学管理处、体育设施和校园警察的数据。你收集了各种各样的信息,而且整个组织可以查询这些信息。你的需求是保护某些信息,例如如下所述:
● 学生医疗检查记录应该只对医护人员和大学管理处可见。
● 田径学院学生体育相关的记录应该只对他们的教练可见,有时也可对医护人员可见。
● 购买记录、评分以及诸如社会安全号码等敏感信息应该只对大学管理处可见。
● 学生在校园警察处的记录应该只对校园警察或者大学管理处可见。
对于本例,让我们将一些样例数据加载到Accumulo数据库中,如表12-4所示。在这个简单的例子中,有一位名叫Kirk Rest的学生,你有关于他的各种信息,这些信息均是从大学中的大量数据源收集而来的。
表12-4 大学数据示例中的键/值
|
行ID |
族 |
限 定 符 |
可 见 性 |
时 间 戳 |
值 |
|
Kirk Rest |
SSN |
999999999 |
ADMIN |
20050612 |
|
|
Kirk Rest |
Phone |
804-555-0005 |
ADMIN |
20050612 |
|
(续表)
|
行ID |
族 |
限 定 符 |
可 见 性 |
时 间 戳 |
值 |
|
Kirk Rest |
Address |
111 Carson Ave, Richmond VA |
ADMIN |
20050612 |
|
|
Kirk Rest |
Weight |
170 |
MEDICAL | COACH |
20110711 |
|
|
Kirk Rest |
Running Test |
10K |
COACH |
20110812 |
56 |
|
Kirk Rest |
Running Test |
10K |
COACH |
20110517 |
58 |
|
Kirk Rest |
Running Test |
5K |
COACH |
20110716 |
24 |
|
Kirk Rest |
Running Test |
5K |
COACH |
20110612 |
27 |
|
Kirk Rest |
Payment |
Semester Payment |
ADMIN |
20111223 |
1000 |
|
Kirk Rest |
Medical Test Report |
Cholesterol |
MEDICAL |
20111222 |
200 |
|
Kirk Rest |
Medical Test Report |
Biopsy |
MEDICAL |
20111012 |
Negative |
|
Kirk Rest |
Grade |
Organic Chem |
ADMIN |
20111201 |
A |
|
Kirk Rest |
Grade |
Calculus 1 |
ADMIN |
20111201 |
B |
|
Kirk Rest |
Grade |
Radical Presbyterianism |
ADMIN |
20100612 |
D |
|
Kirk Rest |
Police Charge |
Curfew Violation |
ADMIN | POLICE |
20071103 |
Pending Hearing |
|
Kirk Rest |
Police Charge |
DUI Arrest |
ADMIN | POLICE |
20091104 |
Guilty |
假定将此信息加载到已经安装在测试Hadoop实例上的Accumulo存储中。为此,应该使用Accumulo shell,它是一个简单的客户端,可以用于创建和修改表,以及创建用户并为这些用户分配授权凭据。由于本章关注的是安全,而非Accumulo的更多细节,因此这里不讨论加载数据的详情。
注意:
由于不同版本的Accumulo需要与不同版本的Hadoop和Zookeeper一起工作,因此这有时是对安装的一个挑战!上手Accumulo的一种简单方法是使用已经配置好的虚拟机(VM)。Sqrrl公司的网站上提供一个独立的亚马逊机器实例(AMI),用于Apache Accumulo的快速入门,并且该公司还提供一个在Oracle VirtualBox上预先配置好的VM。更多详情请参见位于http://www.sqrrl.com/的网站,以及位于http://blog.sqrrl.com/post/40578606670/ quick-accumulo-install/的VM。
Accumulo针对快速获取键对应的值做了优化。为此,开发的Accumulo客户端(在这种情况下,客户端就是Accumulo shell)要创建一个对值进行迭代的扫描器。正如在代码清单12-1中所看到的那样,scan命令允许你在创建的新表——universitydata——中对值进行迭代(以root身份运行,而root对表中的所有内容均有访问权限)。
代码清单12-1:查看数据
为演示单元格可见性的示例,需要创建下列用户:
● 医生(drhouse),为其分配MEDICAL角色
● 管理员(denyseAccountant),为其分配ADMIN角色
● 教练(coachTark),为其分配COACH角色
● 警察局长(chiefDoug),为其分配POLICE角色
如代码清单12-2所示,使用shell来为所有这些能够读取表的用户分配访问权限(授予他们每个人Table.READ权限),并使用setauths命令为他们分配用于可见性的适当角色。
代码清单12-2:分配访问权限和用户视图
最后,为展示Accumulo现在将保护对表的访问,以每个用户的身份登录并使用Accumulo shell。对universitydata表进行扫描(或迭代)。代码清单12-3展示了如何以用户coachTark、drHouse、denyseAccountant和chiefDoug的身份登录,并对表进行迭代,而且表基于每个用户的权限提供了访问控制。
代码清单12-3:演示用户的角色和可见性
正如从代码清单12-3中看到的那样,Accumulo能够基于每个用户的授权控制来限制访问,你已经通过使用Accumuloshell演示了这一点。现在,让我们用Java构建一个Accumulo客户端,该客户端将为本例演示相同级别的访问控制,并与企业中的身份和访问管理基础设施相集成。
当涉及与企业基础设施集成时,Accumulo有一个灵活的模型。如前面提到的,Accumulo客户端的职责是认证用户和获取用户的授权凭据,并将其展示给Accumulo以供处理之用。只要使用企业属性存储中的相同属性或角色标记了Accumulo表中的数据可见性,它就可以优雅地工作。如果没有标记的话,那么很可能需要对从客户端属性存储中获取的属性进行一些处理,以确保它们是完全相同的角色。
为了演示这一点,让我们浏览一个如何编写简单客户端的示例,该客户端通过自选的认证机制来认证用户,并从自选的属性服务或LDAP目录拉取授权凭据。
代码清单12-4展示了一个编写连接到Accumulo的Java类的示例。为了连接,必须使用Connector类建立一个Accumulo连接。为此,必须首先通过初始化ZookeeperInstance类,连接到跟踪Accumulo的Zookeeper实例,而ZookeeperInstance类将会返回一个连接器。
代码清单12-4:Accumulo客户端代码示例
一旦建立了连接,就要认证用户。在这种情况下,对于这样一个简单的示例,从命令行抓取用户信息,并将其传递给一个叫做CustomAuthenticator的外部类,编写此类仅是为了展示可以使用Accumulo之外的另一种认证和授权机制。在该类中,将从命令行中扫描到的用户名和密码传入该类的authenticate()方法。如果用户认证成功,那么接着从外部存储拉取用户的授权凭据,并返回Accumulo期望的org.apache.accumulo.core.security. Authorizations类中的值。最后,如之前示例中所示,创建一个扫描器对相同表中的值进行迭代,并简单地打印结果。
代码清单12-5展示了命令行中的结果。在此示例中,设置了一个外部的LDAP目录,其中包含一个叫做joeUser的用户,其角色为ADMIN。
代码清单12-5:Accumulo客户端的结果
在此示例中进行认证的用户——joeAdmin,与之前示例中的用户不同,该用户并没有保存在Accumulo中。如这里所示,可以编写一个Java客户端来认证用户,从企业存储拉取授权凭据,并查询Accumulo。
还有更多关于Apache Accumulo的内容,比此小节中所涵盖的要多得多。然而,重要的是要意识到对于为了数据安全而使用Accumulo的组织来说,Accumulo仅是企业安全解决方案的一个方面。企业级安全需要防御纵深,并且必须覆盖整个数据生命周期的安全——而不是仅当数据在Hadoop中保存时。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29754888/viewspace-1258743/ ,如需转载,请注明出处,否则将追究法律责任。