有赞大数据平台安全建设实践

一、概述

在大数据平台建设初期,安全也许并不是被重点关注的一环。大数据平台的定位主要是服务数据开发人员,提高数据开发效率,提供便捷的开发流程,有效支持数仓建设。大数据平台的用户都是公司内部人员。数据本身的安全性已经由公司层面的网络及物理机房的隔离来得到保证。那么数据平台建设过程中,需要考虑哪些安全性方面的问题?

环境隔离,数据开发人员应当只需关注自己相关业务域的数据,也应该只能访问这一部分数据。从数据的角度,减小了被接触面,降低了被误操作的可能。从数据开发人员的角度,只能访问自己业务域的数据,在数据开发的过程中,可以减少干扰项,提高效率。

数据脱敏,有些敏感数据即使是公司内部的数据开发人员,也需要限制其直接访问的权限。

明晰权责,各业务域数据都有相应的负责人,对自己的数据负责。同时,所有数据访问与操作都有审计信息记录,对数据的转化与流动有据可查。

最后,大数据平台的目标是赋能数据开发人员,提高数据开发效率,而安全管理必然会降低数据平台的便利性。如何平衡安全和便利性的关系,尤为重要。

有赞大数据平台安全建设是在大数据平台本身的发展以及数仓元数据建设的过程中不断演进的。概括起来可以分为三个阶段。

二、基于 ranger +组件 plugin 的权限控制

在大数据平台刚开始构建的时候,我们重点关注的是基础服务、任务调度、监控预警等方面。数据安全这一块,只有有限的几个数仓同学有数据读写权限,而各业务组的同学都只有读权限。随着公司的发展,业务量的提升,按业务进行数据隔离的需求开始变的强烈。

当时,我们对各方需求进行了梳理,主要为以下几点。将数据按业务域划分,数据开发人员只能访问相关业务域的数据,粒度为表或字段级别。业务域可以和公司组织架构相对应,相关部门默认有相应权限。可以方便的进行权限申请与审批。调研对比各种实现方案之后,我们选择了 ranger +组件 plugin 的权限管理方案。其中 ranger+ hiveServer2 plugin 的架构图如下( ranger + spark thrift server plugin 类似):

\"image\"

所有数据访问在 Hive Server 中进行鉴权,通过公司的 LDAP 服务进行用户认证。当时的入口有 hue、数据平台和 beeline,只有 beeline 的用户需要进行 LDAP 认证,而 hue 和数据平台的用户已经认证过了,只要传 proxy user 过来进行鉴权即可。为了支持业务域与公司组织架构相对应,需要从公司的 OA 系统将部门组织信息分别导入 ranger 以及 hadoop 进行用户组的映射。另外,扩展 hue 增加了一个权限申请与审批的模块。

这样的方案基本满足了业务数据隔离的需求。但是在用户使用过程中,还是收到了很多不满的反馈,主要原因就是阻碍了用户使用的便利性。数据开发人员可能在数据平台进行数据查询,发现没有数据访问权限之后,需要到 hue 上申请权限。权限审批人员收到申请通知之后,需要登录 ranger web UI,进行权限配置。数据管理人员需要直接在 ranger 中配置初始权限。这些都是很不方便的点。另外,ranger 支持的查询引擎有限,想要增加查询引擎(如 presto)就需要定制化开发。因此,这种 ranger + plugin 的做法,执行引擎的可扩展性并不好。由此,我们进入了安全建设的第二阶段。

三、基于 ranger 的权限管理服务

为了提高用户使用的便利性,我们需要收敛数据平台的入口,下线 hue,所有的数据访问及权限申请与审批都直接可在数据平台上完成。并且,当用户访问到某个无权限的数据时,可以直接一键申请。为了提升执行引擎可扩展的能力,我们需要将 ranger 与执行引擎解耦,执行引擎可以不用鉴权。因此,我们在元数据系统中增加了权限管理服务模块,通过 Restful 接口与 ranger 交互。架构图如下:

\"image\"

所有数据访问直接在数据平台这个入口,通过权限管理服务进行鉴权。支持权限一键申请及一键审批。还可以支持临时权限等特殊请求。数据管理人员也不用在 ranger 中配置策略,而是通过权限管理页面直接进行数据业务域配置,然后自动映射为 ranger 中的策略。另外,我们还在这一阶段建立了完整的审计体系,做到了所有数据访问与操作有据可查。

四、基于 column masking 的数据脱敏

随着公司业务的进一步增长,对敏感数据的脱敏需求变的更加强烈。我们需要将各种手机号、邮箱地址之类的敏感字段进行脱敏处理,例如手机号只显示后四位。ranger 虽然支持 column masking,但是我们在第二阶段已经将 ranger 与执行引擎进行解耦。因此,我们需要在数据平台层面,对数据进行脱敏。我们采用的方案是 SQL 重写。架构图如下:

\"image\"

SQL Engine Proposer 是我们开发的一个智能执行引擎选择服务,可以根据查询的特征以及当前集群中的队列状态为 SQL 查询选择合适的执行引擎。数据平台向某个执行引擎提交查询之前,会先访问智能执行引擎选择服务。在选定合适的执行引擎之后,通过敏感字段重写模块改写 SQL 查询,将其中的敏感字段根据隐藏策略(如只显示后四位)进行替换。而敏感字段的隐藏策略存储在 ranger 中,数据管理人员可以在权限管理服务页面设置各种字段的敏感等级,敏感等级会自动映射为 ranger 中的隐藏策略。例如表 ods.xxx 中的列 acct_no 的敏感等级为 2,那么映射为 ranger 中的策略如下:

\"image\"

当某个查询语句为

select acct_no from ods.xxx where par='20181128' limit 10;

经过脱敏重写,最终执行的查询语句为

FROM (SELECT `par`, `id`, CAST(mask_show_last_n(acct_no, 4, 'x', 'x', 'x', -1, '1') AS bigint) AS `acct_no`, `kdt_id`, `water_no`       , `target_id`, `remark`, `create_time`, `sub_target_id`   FROM `ods`.`xxx`   ) `xxx`WHERE par = '20181128'LIMIT 10;

我们使用 antlr4 来处理执行引擎的语法文件,实现 SQL 重写。其中,spark 和 presto 都是使用的 antlr4,所以他们的语法文件直接拿过来用即可。由于 hive 目前使用的是 antlr3 的版本,我们将 hive 的语法文件使用 antlr4 的语法重写了一遍。之所以要全部用 antlr4,是为了最大程度的重用 visitor 的逻辑。基于同样的方法,我们实现了字段血缘的追溯,从而可以进行字段的敏感等级传递。

五、未来展望

大数据平台的安全建设并不是一项孤立的工作,而是随着大数据平台支持的业务量和业务种类越来越多,与大数据平台本身的进化而一起发展的。随着有赞实时数仓的建设、机器学习平台的构建等等新业务的发展,安全建设仍有很长的路要走。

最后打个小广告,有赞大数据团队基础设施团队,主要负责有赞的数据平台 (DP), 实时计算 (Storm, Spark Streaming, Flink),离线计算 (HDFS,YARN,HIVE, SPARK SQL),在线存储(HBase),实时 OLAP(Druid) 等数个技术产品,欢迎感兴趣的小伙伴联系 qunyan@youzan.com

作者简介:大数据平台是有赞共享技术的核心团队之一,该团队主要由数据技术、数据产品、算法挖掘、广告平台四个小团队组成,目前共有 34 位优秀的工程师组成。

转载来自公众号“有赞Coder”:https://mp.weixin.qq.com/s/4G_OvlD_5uYr0o2m-qPW-Q

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请先设置tkk_理光MP2014扫描至文件夹的设置方法

理光旗下的2014系列入门级A3黑白复印机市场保有量较大,该系列机型加装M16网卡后可以方便的实现扫描至文件夹功能,经常有客户咨询该机型的扫描设置方法,下面我就以MP2014D为例来演示一下该机型的SMB扫描设置方法:首先是在电脑上建立…

听说现在都考这些React面试题

大家好,我是若川。最近刷脉脉看见圈里都在聊面试,吐槽最多的还是万年考点 React 和 Vue。不过关于两者的比较似乎有点针尖对麦芒的赶脚。确实,面试的偏重点往往映射公司对该框架的重视程度,但也不能一概而论,去学习或放…

荒岛余生为什么没有打开包裹_您会带到荒岛什么办公桌设置?

荒岛余生为什么没有打开包裹Throughout life, you experience a lot of desks and a lot of desk setups. Real or virtual, at the office or at home, temporal or permanent — just a way to call it, nothing is permanent— a big one with a great office view or a sma…

第五课 路由之初识路由

1.路由快速入门 1.1 概念 是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器。它的英文名称为Router,是一种连接多个网络或者网段的网络设备,它能将不同网络或者网段之间的数据信息进行“翻…

如何使用 React 和 React Hooks 创建一个天气应用

大家好,我是若川(点这里加我微信 ruochuan12,长期交流学习)。今天推荐一个练手的React项目,创建天气应用,相信很快能看完。昨天发送书掉粉18人,是我没想到的,送书一般是出版社按阅读…

拟态防御_纯素食汉堡的拟态

拟态防御If people are so against the idea of pigs and chickens being chopped up why would they want to buy fake bacon with realistic visual streaks of pork fat, or soy meat that tries to replicate the streaky texture of cooked chicken flesh? Surely these …

delphi 算术溢出解决方法_性能优化系列:JVM 内存划分总结与内存溢出异常详解分析...

前言那些使用过 C 或者 C 的读者一定会发现这两门语言的内存管理机制与 Java 的不同。在使用 C 或者 C 编程时,程序员需要手动的去管理和维护内存,就是说需要手动的清除那些不需要的对象,否则就会出现内存泄漏与内存溢出的问题。如果你使用 J…

微信小程序如何发送 http 请求

2019独角兽企业重金招聘Python工程师标准>>> 为什么要使用云函数发送 http 请求小程序云函数5 个可信域名不受限制需要备案无需备案在一些特殊情境, 比如域名没有备案或域名 5 个以上就需要使用云函数发送 HTTP 请求了. 如何使用云函数发送 HTTP 请求? 在云函数中能…

H5 页面列表缓存方案

大家好,我是若川(点这里加我微信 ruochuan12,长期交流学习)。今天给大家介绍一下关于h5页面的列表缓存方案。感谢屏幕前的你一直关注着我。点击下方卡片关注我、加个星标,或者查看源码等系列文章。学习源码整体架构系列…

不只是coding_不只是外表

不只是coding“We just need it to look more professional…”“我们只需要看起来更专业...” “We don’t have the graphic expertise you do…”“我们没有您所需要的图形专业知识……” “I just don’t know how to make it look good…”“我只是不知道如何使它看起来…

读取 wps_软件前世今生篇之WPS(求伯君1988年先于OFFICE研发出WPS)

软件前世今生篇之WPS今天给大家普及一下WPS这款办公软件,相信你会问wps有什么可普及的?我们都知道啊,不就是一款办公软件,而且还是抄袭office的,安装还挺简单的,而且还有一大堆广告,不过使用免费…

吴恩达机器学习笔记11-梯度下降法实践2-学习率

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。 也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如0.001&#…

制作五彩纸屑转场动效_何时以及如何将五彩纸屑添加到产品UI

制作五彩纸屑转场动效As I am sure all designers have picked up on, confetti has become a popular method of (positive) feedback inside mobile and desktop apps. I will discuss the viable scenarios where you can implement confetti and will even provide some co…

【无套路送书】架构师是怎样炼成的?

大家好,我是若川。不知道这是今年第几次送书了,前三次分别是:第一次,第二次,第三次。本次《架构师的自我修炼》,非常珍贵,我争取到了2本送给大家,送书规则见文末。可以参与下&#x…

WinForm中使用Excel控件

最近项目中要在WinForm中使用Excel控件,经过几天的研究,现在总结一下成果。 在WinForm中使用Excel控件主要有三种方法:WebBrowser、DSOFramer、OWC。下面分别描述一下如何使用。 一、WebBrowser /// -1、如何使用 WebBrowser 控件…

NASA公布“门户计划”,在月球轨道建立空间站进一步探索月球

门户是NASA研发一种小型的宇宙飞船的名字,该宇宙飞船将围绕月球轨道运行 成为宇航员临时住所和办公室。 日前,美国宇航局(以下简称“NASA”)公布了“门户计划”,该计划具体是指在月球轨道上建立空间站,以帮…

浅析Page.LoadTemplate(模板)方法动态获取绑定模板后,通过FindControl获取服务端控件的方法。...

平常使用DataList数据控件绑定数据时&#xff0c;都是在ItemTemplate项里面放入 <asp:DataList ID"list2"runat"server"><ItemTemplate><asp:HyperLink ID"hl"runat"server"></asp:HyperLink></ItemTempl…

苹果5s变砖_苹果砖的故事以及可以改进的地方

苹果5s变砖Even since I can remember I’ve always been curious about trying out all kinds of software, checking out different operating systems, and improving my own user experience through customizing them. Over the years I’ve had the opportunity to test …

学习 launch-editor 源码整体架构,探究 vue-devtools「在编辑器中打开组件」功能实现原理...

1. 前言你好&#xff0c;我是若川[1]&#xff0c;微信搜索「若川视野」关注我&#xff0c;专注前端技术分享&#xff0c;一个愿景是帮助5年内前端开阔视野走向前列的公众号。欢迎加我微信ruochuan12&#xff0c;长期交流学习。这是学习源码整体架构系列 之 launch-editor 源码&…

:传递给 left 或 substring 函数的长度参数无效。_Java函数式编码结构-好程序员

好程序员Java培训分享Java函数式编码结构&#xff0c;本文将探讨三种下一代JVM语言&#xff1a;Groovy、Scala和Clojure&#xff0c;比较并对比新的功能和范例&#xff0c;让Java开发人员对自己近期的未来发展有大体的认识&#xff0c;下面我们一起来看一下吧。当垃圾回收成为主…