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

时间:2022-05-06
本文章向大家介绍如何使用Sentry实现Hive/Impala的数据脱敏,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢

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/

提示:代码块部分可以左右滑动查看噢 为天地立心,为生民立命,为往圣继绝学,为万世开太平。 温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。

原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操