在安全性方面从未有(恕我直言)已经足够了开源解决方案和布鲁斯已经撰写了有关这几个 时间在过去 ,而且也没有必要再次改写参数。
现在,随着市场上“ NoSQL”和“大数据”开源趋势的发展,安全终于有了交集……如果我愿意的话,可以找到解决困扰我们社会的新解决方案的联合会终于开始兴起(并且已经在许多领域情况)。 由于大数据和开源,现在可以使用新的安全解决方案来解决欺诈,恶意软件,网络钓鱼,垃圾邮件等所有问题。
最重要的是Apache Accumulo ,它是一个运行在Apache Hadoop之上的大数据,开源和安全NoSQL数据库。 它最初是由美国国家安全局开发的,并于2011年作为开放源代码提交给Apache基金会,已经进行了3年的开发和生产运营。
Accumulo扩展了BigTable数据模型,以实现称为单元级安全性的安全性机制。 每个键值对都有自己的安全标签,存储在键的列可见性元素下,该标签用于确定给定用户是否满足读取该值的安全要求。 这使各种安全级别的数据可以存储在同一行中,并且具有不同访问权限的用户可以查询同一张表,同时保留数据的机密性。
安全标签表达
应用突变后,用户可以为每个值指定一个安全标签。 这是通过将ColumnVisibility对象传递给put()方法来创建Mutation时完成的:
Text rowID = new Text("row1");
Text colFam = new Text("myColFam");
Text colQual = new Text("myColQual");
ColumnVisibility colVis = new ColumnVisibility("public");
long timestamp = System.currentTimeMillis();Value value = new Value("myValue");Mutation mutation = new Mutation(rowID);
mutation.put(colFam, colQual, colVis, timestamp, value);
安全标签表达语法
安全标签由一组用户定义的令牌组成,这些标签是读取与标签关联的值所必需的。 可以使用支持标记的逻辑AND和OR组合以及将标记组嵌套在一起的语法来指定所需的标记集。
例如,假设在我们的组织内,我们希望使用根据用户角色定义的安全性标签来标记我们的数据值。 我们可能有以下令牌:
admin
audit
system
These can be specified alone or combined using logical operators:// Users must have admin privileges:
admin// Users must have admin and audit privileges
admin&audit// Users with either admin or audit privileges
admin|audit// Users must have audit and one or both of admin or system
(admin|system)&audit
当两者 使用&和运算符时,必须使用括号指定运算符的优先级。
授权
当客户端尝试从Accumulo读取数据时,在创建Scanner或BatchScanner时,将根据客户端代码传递的一组授权检查存在的所有安全标签。 如果确定授权不足以满足安全标签,那么将从发送回客户端的结果集中抑制该值。
授权被指定为用户拥有的令牌的逗号分隔列表:
// user possess both admin and system level access
Authorization auths = new Authorization("admin","system");Scanner s = connector.createScanner("table", auths);
用户授权
每个累积用户都有一组关联的安全标签。 要在shell中操作这些命令,请使用setuaths和getauths命令。 这些也可以使用java安全操作API进行修改。
用户创建扫描仪时,会传递一组授权。 如果传递给扫描仪的授权不是用户授权的子集,则将引发异常。
为了防止用户写入他们无法读取的数据,请将可见性约束添加到表中。 在createtable shell命令中使用-evc选项可以启用此约束。 对于现有表,请使用以下shell命令启用可见性约束。 确保约束编号不与任何现有约束冲突。
config -t table -s
table.constraint.1=org.apache.accumulo.core.security.VisibilityConstraint
具有alter table权限的任何用户都可以添加或删除此约束。 如果存在此问题,则此约束不适用于批量导入的数据,然后禁用批量导入权限。
安全授权处理
对于为许多用户提供服务的应用程序,预计不会为每个应用程序用户创建一个累积用户。 在这种情况下,必须创建具有任何应用程序用户所需的所有授权的累积用户。 为了提供查询服务,应用程序应创建具有应用程序用户授权的扫描程序。 这些授权可以从受信任的第三方获得。
通常,生产系统将与公钥基础结构(PKI)集成在一起,并在查询层中指定客户端代码,以与PKI服务器进行协商,以便对用户进行身份验证并检索其授权令牌(凭证)。 这要求用户仅指定对系统进行身份验证所需的信息。 一旦建立了用户身份,客户端代码即可访问其凭据,并将其传递到用户无法访问的Accumulo中。
查询服务层
由于与Accumulo进行交互的主要方法是通过Java API,因此生产环境通常要求实现查询层。 可以使用Web服务在诸如Apache Tomcat之类的容器中完成此操作,但这不是必需的。 查询服务层提供了一种机制,该机制提供了一个平台,可以在该平台上构建面向用户的应用程序。 这使应用程序设计人员可以隔离潜在的复杂查询逻辑,并可以方便地执行基本的安全功能。
几种生产环境选择在此层实施身份验证,其中用户标识符用于检索其访问凭据,然后将其缓存在查询层中,并通过授权机制提供给Accumulo。
通常,查询服务层位于Accumulo和用户工作站之间。
Apache Accumulo 1.5版刚刚随文档一起发布下载
新的软件即服务解决方案将与新兴的开源解决方案一起涌入市场。 无论我们是试图防止医疗保健欺诈,还是保护个人免遭盗窃,还是公司不受入侵的侵害,都不会损害(C)机密性,(I)完整性和(A)数据可用性以及分发系统的安全性。
翻译自: https://www.javacodegeeks.com/2013/07/big-data-open-source-security.html