如何使用Sentry实现Hive/Impala的数据脱敏

1.文档编写目的


本文主要描述如何使用Sentry实现数据的脱敏(masking of sensitive data elements),高大上的叫法也就是Data Masking。数据脱敏主要是指将原始数据的全部或者部分敏感值进行替换。这样避免了用户未经授权而直接访问原始的值,并保留了底层数据的schema。

灵活的数据脱敏方案应该是底层数据真实的值没有被脱敏,当有用户查询数据时则判断是否屏蔽,取决于用户的具体权限。我们可以使用Sentry控制视图的权限来实现数据脱敏。

本文Fayson会以一个简单的实操例子来介绍如何使用Sentry实现Hive/Impala的数据脱敏。

内容概述

1.环境准备及描述

2.创建脱敏视图

3.权限分配及测试

4.总结

测试环境

1.CM和CDH版本为5.13.1

前置条件

1.集群已启用Kerberos

2.集群已启用Sentry

2.环境准备


准备数据节点使用Hive的超级管理用户来创建employees表及employees_mask视图。

1.准备测试数据

[root@ip-172-31-16-68 datamasking]# vim employees.csv
1,John Smith,123-55-4567,25000.0
2,Jim Bloggs,999-88-7777,35000.0
3,Jane Doe,808-88-0880,45000.0

2.创建一个Hive外部表

CREATE EXTERNAL TABLE employees
(key INT, fullname STRING, ssn STRING, salary FLOAT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/extwarehouse/data/employees/';

在命令行是用beeline连接HiveServer2

[root@ip-172-31-16-68 datamasking]# beeline 
beeline> !connect jdbc:hive2://ip-172-31-24-169.ap-southeast-1.compute.internal:10099/;principal=hive/ip-172-31-24-169.ap-southeast-1.compute.internal@FAYSON.COM

3.将数据加载到外部表employees的HDFS目录

[root@ip-172-31-16-68 ~]# cd datamasking/
[root@ip-172-31-16-68 datamasking]# ll
total 8
-rw-r--r-- 1 root root  97 Mar 15 23:12 employees.csv
-rw-r--r-- 1 root root 173 Mar 15 23:22 employees.sql
[root@ip-172-31-16-68 datamasking]# hadoop fs -put employees.csv /extwarehouse/data/employees/
[root@ip-172-31-16-68 datamasking]# hadoop fs -ls /extwarehouse/data/employees/
Found 1 items
-rwxrwx--x+  3 hive hive         97 2018-03-15 23:28 /extwarehouse/data/employees/employees.csv
[root@ip-172-31-16-68 datamasking]# 

4.验证employees表数据是否正常

3.创建脱敏视图


1.通过视图的方式将employees表中的ssn数据进行脱敏处理,SQL如下:

CREATE VIEW employees_masked AS
SELECT key,
       fullname,
       CONCAT('***-**-', SUBSTR(ssn, 8, 4)) AS ssn,
       "PRIVATE" AS salary
FROM employees;

2.在命令行通过Beeline使用Hive管理员用户登录HiveServer2,进行创建视图操作

3.执行SQL查看视图数据

4.创建未脱敏视图

CREATE VIEW employees_unmasked AS
       SELECT key, fullname, ssn, salary
FROM employees;

查看未脱敏视图数据

4.权限分配及测试


如上图所示,我们现在访问数据一共有4个入口包括HDFS文件,表以及2个视图。最终用户不能访问文件或者表,仅仅被赋权访问视图,然后视图对应到相应的数据遮蔽逻辑。我们通过Sentry来控制Hive/Impala的表或视图的访问,通过Sentry的HDFS ACL同步功能防止用户绕过Hive/Impala去直接访问底层文件。

通过上图可以看出Group A可以访问视图employees_unmasked里未经遮蔽的数据,但是不能直接访问表employees,当然也不能访问底层文件。当然Group A也被授权可以访问视图employees_masked,比如他想将数据下发时做敏感数据脱敏,则也可以从这个视图里取出数据。

而Group B只能访问employees_masked视图里的数据,这个是有敏感数据被屏蔽了的,因为Sentry的控制,他没权限直接访问employees表或者通过HDFS文件去获取真实的被屏蔽的值。

1.创建faysona和faysonb用户对应上图的Group A和Group B

2.使用Hue管理员账号登录创建faysona和faysonb用户

3.使用hive用户登录Hue给faysona和faysonb用户分别授权

4.使用faysona用户登录Hue查看employees_unmasked和employees_masked视图数据

Hive引擎查询employees_masked脱敏视图数据

Hive引擎查询employees_unmasked未脱敏视图

Impala引擎查询employees_masked脱敏视图数据

Impala引擎查询employees_unmasked未脱敏视图数据

在命令行使用faysona用户访问employees表的数据文件

[root@ip-172-31-16-68 ~]# kinit faysona
[root@ip-172-31-16-68 ~]# hadoop fs -cat /extwarehouse/data/employees/employees.csv

5.使用faysonb用户登录Hue

Impala引擎查询employees_masked脱敏视图数据

Hive引擎查询employees_masked脱敏视图数据

在命令行使用faysonb用户访问employees表的数据文件

[root@ip-172-31-16-68 ~]# kinit faysonb
[root@ip-172-31-16-68 ~]# hadoop fs -cat /extwarehouse/data/employees/employees.csv

5.总结


  • 为Hive数据进行脱敏处理可以使用regexp_replace()函数通过正则表达式的方式敏感数据屏蔽,也可以通过自定义的UDF函数来等方式来实现敏感数据脱敏。
  • 通过脱敏SQL创建视图,使用Sentry权限控制将脱敏数据的视图提供给不同的用户访问
  • 授权访问视图(即使授权ALL)的用户也无权限访问相应表的底层数据文件。

参考:

http://blog.cloudera.com/blog/2013/07/with-sentry-cloudera-fills-hadoops-enterprise-security-gap/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值