HBase:可见性标签

2018-04-27 15:04 更新

HBase:可见性标签

可见性标签控件可用于仅允许与给定标签关联的用户或主体读取或访问具有该标签的单元格。例如,您可以标记一个单元格top-secret,并且只将该标签的访问权授予该managers组。可见性标签是使用标签实现的,标签是HFile v3的一个功能,并允许您以每个单元为基础存储元数据。标签是一个字符串,可以使用逻辑运算符(&,|或!)将标签组合为表达式,并使用圆括号进行分组。HBase不能对表达式进行任何形式的验证,除了基本的良好格式。可见性标签本身没有意义,可以用来表示敏感度级别、特权级别或任何其他任意的语义含义。

如果用户的标签与单元格的标签或表达式不匹配,则拒绝用户访问该单元格。

在HBase 0.98.6及更高版本中,可见性标签和表达式支持UTF-8编码。当使用org.apache.hadoop.hbase.security.visibility.VisibilityClient类提供的addLabels(conf, labels)方法创建标签并通过扫描或获取在授权中传递标签时,标签可以包含UTF-8字符,以及可见标签中通常使用的逻辑运算符以及常规Java符号,而不需要任何转义方法。但是,当通过Mutation传递CellVisibility表达式时,如果使用UTF-8字符或逻辑运算符,则必须将该表达式与该CellVisibility.quote()方法一起放入。请参阅TestExpressionParser和源文件hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestScan.java。

用户在Put操作期间向单元添加可见性表达式。在默认配置中,用户不需要访问标签就可以用它来标记单元格。此行为由配置选项hbase.security.visibility.mutations.checkauths控制。如果您设置此选项为true,则用户正在修改的标签必须与用户关联,否则修改将失败。在获取或扫描期间确定用户是否有权读取标记的单元格,并且不允许用户读取的结果被过滤掉。这会导致相同的I/O处罚,如同返回结果一样,但会减少网络负载。

可见性标签也可以在删除操作中指定。有关可见性标签和删除的详细信息,请参阅HBASE-10885

当RegionServer首次收到请求时,将在RPC上下文中生成用户的有效标签集。用户与标签关联的方式是可插入的。默认插件通过添加到获取或扫描的授权中指定的标签,并检查针对主叫用户的已认证标签列表的标签。当客户端传递用户未通过身份验证的标签时,默认插件会删除它们。您可以通过Get#setAuthorizations(Authorizations(String,…​))和Scan#setAuthorizations(Authorizations(String,…​));方法传递用户经过身份验证的标签的子集。

可以按照与用户相同的方式向组授予可见性标签。组前缀为符号@。当检查用户的可见性标签时,服务器将包括用户所属的组的可见性标签以及用户自己的标签。当使用API VisibilityClient#getAuths或Shell命令get_auths为用户检索可见性标签时,我们将返回专门为该用户添加的标签,而不是组级标签。

可见性标签访问检查由VisibilityController协处理器执行。您可以使用VisibilityLabelService接口来提供自定义实现或控制可见性标签与单元格一起存储的方式。请参阅源文件hbase-server/src/test/java/org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithCustomVisLabService.java。

可见性标签可以与ACL一起使用,需要注意以下几点:

  • 标签必须在可见标签中使用之前明确定义。请参阅下面的示例来了解如何完成此操作。
  • 目前没有办法确定哪些标签已应用于单元格。有关详细信息,请参阅HBASE-12470
  • 可见性标签目前不适用于超级用户(superusers)。

可见性表达式的示例

表达式 解释
fulltime

允许访问与fulltime标签关联的用户。

!public

允许访问不与public标签关联的用户。

( secret | topsecret ) & !probationary

允许访问与secret标签或topsecret标签相关联的用户,而不与probationary  标签关联。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号