ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

数据产品安全加固:从身份认证到数据脱敏的完整策略

数据产品安全加固:从身份认证到数据脱敏的完整策略 在大数据平台混久了你会发现一个特别现实的问题数据产品上线前大家问得最多的往往不是这个指标算得对不对而是这个产品安全吗。我最近连续被几个朋友问到大屏和API服务的安全加固方案才意识到很多团队的所谓安全策略其实还停留在服务器设个密码、接口加个鉴权的阶段。数据产品是个挺特殊的节点——它一头连着数仓里的明细数据另一头连着几十上百个业务用户中间还挂着调度任务和BI工具任何一个环节出现漏洞泄露的就不是一条SQL而是一整片数据资产。这篇文章就把我在数据产品安全加固上踩过的坑、验证过的方案、以及最后沉淀下来的一套完整策略一条线给你捋清楚。1. 先搞清楚我们嘴里的数据产品安全策略究竟要给谁做在谈安全策略之前必须先统一一个概念到底什么算数据产品。我发现很多团队把数据产品理解成一个报表平台或者一个数据门户然后安全策略就照着Web应用的模板抄一遍。这是最要命的起点错误。1.1 三类主流数据产品形态安全侧重点完全不同我自己习惯把数据产品分成三类每类的暴露面和安全侧重点差异很大可视化分析型产品典型如数据大屏、自助分析BI、报表系统。这类产品直接面向业务人员和领导层特点是展示逻辑复杂、前端交互多、动不动就全屏投屏到会议室。它的安全风险集中在展示层面的裸奔比如大屏被拍照外传、报表导出到本地再转发、前端接口被绕过直接拉数。API数据服务型产品通过接口对外提供指标查询、数据订阅、模型预测等能力。这类产品的用户可能是内部系统、移动端App、合作伙伴的外部系统。安全风险集中在身份认证、接口鉴权、限流防刷、参数注人这几块一旦鉴权被绕过去黑客拿到的就是完整的数据通道。数据订阅与分发型产品定时或事件驱动地把处理好的数据集推送出去比如离线同步、邮件报表、数仓到业务库的导出任务。很多团队压根不把它当产品看但它同样面向具体用户、输出具体数据。这类产品的安全问题最容易被忽视往往是HDFS目录权限开着、FTP账号是通用账号、数据落地之后没人管。如果你连自己的数据产品属于哪一类都没分清楚后面的安全策略就是无根之萍。1.2 为什么不能直接套平台的整体安全方案很多公司其实有大数仓平台的安全规范比如统一的Kerberos认证、统一的网关鉴权、统一的敏感数据申请流程。但你会发现这些安全规范落到数据产品上经常失效。原因很简单平台安全管的是到库为止数据产品管的是到用户为止。用户在平台上拿数据要申请、要走审批流但是一旦数据进了大屏系统或者API服务很多人默认这是我们自己开发的系统里面应该没问题吧于是完全放养。我见过一个真实案例公司数仓权限管得极严但是某个数据大屏项目的后端接口居然可以传入任意日期参数去查整个平台的用户明细前端只是做了一层展示后端没有任何权限判断。平台安全做得再好产品层这一刀切开数据还是裸奔。所以数据产品的安全策略必须是针对产品自身形态重新设计的而不是平台安全的延伸或简化。2. 一张风险地图数据产品最常见的五种泄漏姿势做安全加固第一步不是上工具是先画威胁模型。我整理了数据产品领域最常出事的五种泄漏姿势按发生频率从高到低排了个序。2.1 身份与访问层面账号共享是最难防的头号问题数据产品的目标用户往往是业务线的人他们习惯于让运营帮我导出一下把管理员账号给我用一下。账号共享一旦存在所有安全策略都会变成笑话——审计日志里看到的是张三的操作实际动手的是李四明明要通过权限申请才能看的数据借个号就绕过去了。这个问题的根源是两条一是数据产品接入统一身份认证太晚很多小产品上线时自己建一套账号体系二是权限申请流程太麻烦业务人员宁可找熟人要账号也不走流程。2.2 数据内容层面最怕的不是黑客而是合法用户越权很多团队做安全只会盯着外部攻击但真实的泄露场景里内部合法用户的越权使用占了大头。常见的有几类横向越权A区域的运营人员把URL里的org_id参数改成B区域直接查到了B区域的数据。纵向越权普通用户调用了管理员的API接口看到全量数据。推理攻击就算每个字段都做了权限控制用户可以通过汇总指标的差值反推出单个人的敏感信息这在明细数据和汇总数据同时开放的产品里特别常见。导出无痕页面明明只能看前1000条但导出接口没做限制用户直接把全量明细Excel拖回自己电脑。2.3 终端与展示层面大屏拍照、导出按钮、浏览器缓存大屏类和报表类产品的问题往往不在后端而在终端。会议室大屏不锁屏陌生人路过直接用。报表页面打开后F12一看接口返回的全部是明文数据浏览器缓存里存了一整天的查询结果。还有更常见的页面做了脱敏但导出功能没有脱敏——页面显示手机号是138****1234导出的Excel是完整手机号。2.4 基础设施与链路层面集群部署留下的暗门数据产品的底层都跑在大数据集群上但集群的安全配置经常是装了样子没装灵魂。最典型的是Kerberos只在NameNode开了认证HiveServer2裸奔YARN队列任何人可提交任务HDFS目录权限是777Spark任务日志里打印了敏感字段名外加部分数据。这些基础层漏洞往往归属于大数据平台团队管理范围数据产品团队以为有人管其实三不管。2.5 运维与发布层面上线和变更时的窗口期事故数据产品是迭代最快的系统之一几乎每周都有发布。发布窗口期是安全事件的高发时段测试环境数据没脱敏就同步到预发布、临时排查问题把数据库账号密码写死在代码里、回滚时把安全策略一并回滚了。很多事故复盘到最后不是技术不行是发布流程里压根没有安全评审这一步。我把上面的风险汇总了一张表后面每个章节的解决方案都对着这张表来泄漏姿势典型场景危害等级核心对策账号共享与弱认证业务借管理员账号导出数据极高统一SSO、MFA、操作审计合法用户越权改参数查他人数据、绕过导出限制极高行列权限、接口鉴权、导出管控终端展示裸奔大屏拍照、浏览器缓存明文高水印溯源、防截屏、展示层脱敏基础设施暗门HiveServer2无认证、HDFS权限过大高Kerberos全覆盖、网络隔离、目录收敛发布窗口期事故测试数据进生产、密钥写进代码高发布安全评审、密钥托管、自动巡检3. 身份认证与行列权限把谁能看什么真正落实到代码风险地图画完首先要堵的是最大那个窟窿身份与权限。这部分听起来基础实际落地坑最多。3.1 认证层统一账号体系与登录态管理数据产品绝对不要自建账号密码体系这是我在实战里的第一个大原则。自建账号会带来三连问题密码管理不规范、无法复用企业已有的人员离职流程、审计体系割裂。如果你所在的公司已经有统一身份认证平台数据产品必须无条件对接通过OAuth2/OIDC或CAS协议接入单点登录。前端登录流程就是跳到统一认证页认证成功后拿一个授权码后端拿授权码去换用户信息和会话Token。我强烈建议所有数据产品使用短时Token配合刷新机制不要自己做传统的SessionCookie。JWT这类无状态Token有个好处后端服务可以水平扩容Token验签不依赖会话存储。但JWT也有个容易踩的坑Token一旦签发在过期之前无法主动作废。所以人员离职、权限变更的数据产品Token有效期要短最好15分钟到30分钟配合刷新Token机制来控制生命周期。还有一点要强调管理端和普通用户端必须分库分权限。管理端的登录必须强制MFA不能只输入一个密码就进入用户管理、权限分配、数据配置这些高危页面。3.2 授权模型从菜单级授权走向数据级授权授权模型我推荐按数据域来抽象而不是按页面来授权。传统做法是按菜单授权用户能进某个页面就完事了但进去之后看到什么数据完全没控制。数据域授权是把数据按业务线、区域、组织、时间维度划分成域每个用户或角色只能访问被授权的域。举个例子网约车项目里的数据分析平台如果只做菜单授权所有运营人员都能打开司机明细查询页面但是A区的运营人员不应该看到B区的司机数据。正确的做法是把司机明细这个数据域按区域打标权限系统管控到谁可以在这个页面上看哪些区域的数据这样不管是哪个团队开发了新页面只要数据域模型不被绕过权限逻辑就是一致的。在模型选型上我对大部分团队的建议是以角色为核心用角色绑定数据域不要让权限直接挂在个人身上。个人直接授权短期内好用但半年后你就会发现权限列表膨胀到无法维护。角色模型可以顺便解决岗位调整的场景人员换岗后换个角色组权限自动变化。3.3 行级与列级权限的实现思路SQL改写与结果集重写这是数据产品安全里被问得最多、也最核心的技术点。在线分析产品要真正做到每个人只能看到该看的行和列主流的实现路径有两条。第一种SQL改写Query Rewrite。在服务端拦截用户的查询SQL解析语法树然后自动注入行级过滤条件和列级脱敏规则。比如用户是一个区域运营查询dw_order_detail订单明细表中间层自动把他的区域编码加进WHERE条件把手机号列替换成脱敏函数。这种方式的优点是对上层透明业务代码不需要知道权限的存在缺点是SQL语法解析本身有兼容性成本业务部门写SQL五花八门解析不到就放行就变成了漏洞。第二种结果集后置过滤。先查到结果再在内存里做行列裁剪。优点是实现简单逻辑清晰但缺点也很明显数据已经查出来了内存开销大而且只适合查询结果量可控的场景。假如一个用户查了100万行你要在内存里逐行判断权限性能直接崩。实操中成熟团队一般是在网关层做一套权限解析组件同时支持规则注入和结果集重写两种模式。规则上如果列权限的要求是隐藏/脱敏那就优先走SQL改写如果是聚合后再放行往往需要结果集重写配合聚合计算。开源社区这几年也出了不少行列权限的实现组件比如基于Apache Calcite做SQL解析的方案已经比较成熟可以引入到自己的数据服务中间层不用从零造轮子。但别迷信开源组件部署即用它通常需要你提供完整的元数据映射和数据域模型前期的数据整理工作量才是大头。3.4 权限管理的工程化细节同步、缓存与审计权限系统最怕的不是设计不好而是权限数据和真实的数据对不上。我见过太多产品权限表是手工维护的Excel导入的人员和数据域早就调整了权限却没跟着变。这里有四条工程化经验权限数据必须从权威上游同步通常来自HR系统或组织架构系统每天定时同步到数据产品的权限库。手工增删只能作为临时通道并且要留审批记录。权限变更要实时推送敏感服务。人的权限被回收后如果服务端缓存了30分钟那这30分钟就是泄漏窗口。发布一个权限变更的消息队列对核心服务实时失效相关缓存。每次查询请求都要带有权限上下文。后端接口不要信任前端传入的用户ID要从前端携带的登录态中解析用户标识再绑定到权限上下文后续的行列裁剪都基于这个上下文。审计日志要记到行。谁在什么时间、通过哪个产品、访问了哪个数据域、执行了什么查询、导出了多少行数据这些都要记录。出了事后审计日志就是你唯一的破案线索。4. 数据内容保护分级识别、动态脱敏与溯源水印权限解决的是谁能看内容保护解决的是看到的东西泄露出去会不会出事。这两个层面缺一不可。4.1 数据分级是安全策略的地基没有对数据本身的分级谈脱敏和防泄露都是空话。我建议数据产品团队不要自己拍脑袋定级而是复用数仓已有的数据分级机制把底层表字段按四级来管级别定义典型字段处理要求L1公开数据商品名称、城市名展示不受限L2内部数据订单量、销售额对内可见需要登录L3敏感数据手机号、身份证号、精确地址展示脱敏导出需申请L4高危数据银行卡号、密码、生物信息禁止明文展示禁止导出这里有个实操技巧不要对整张表定级要按字段级别定级。同一张用户表中用户ID可能是L2手机号是L3常驻地是L3消费偏好是L2。把这个关系维护成数据字典后面所有脱敏组件、权限组件都引用这份字典。这张数据字典是整个数据产品内容安全的核心配置文件。4.2 动态脱敏的三种落地方式脱敏分为静态脱敏存储层的假数据替换和动态脱敏查询时实时变换。数据产品用的是动态脱敏因为要保证原始数据进、脱敏数据出源表不能轻易动。三种落地方式各有场景视图层脱敏在数据仓库层创建脱敏视图视图里用concat、substr这样的函数把手机号、身份证号做部分隐藏数据产品直接读取脱敏视图。优点是最简单缺点是灵活性差不同用户对同一字段的可见级别不同就没法用——你不能给每个人建一个不同的视图。中间件拦截改写在数据访问中间件层拦截SQL解析出敏感列自动把查询改写为脱敏版本。适合统一管控、多产品复用的场景但依赖SQL解析能力。结果集重写服务端拿到明细结果后根据当前用户的权限级别在内存里把敏感字段的某些位置替换成星号。适合展示逻辑可控、结果集不大的系统。在实际项目里我对大屏和报表系统的建议是无论底层用哪种脱敏方案前端拿到结果之后还要做一层兜底脱敏。后端万一配置漏了前端的格式化函数也能挡住明文泄漏。脱敏要特别注意保留数据可用性比如手机号脱敏成138****1234虽然中间四位没了但在同一天内同一个人的脱敏值要保持一致否则报表里对账都对不上。所以脱敏函数不能是每次查询随机变化的要基于哈希或确定性加密来实现。4.3 水印溯源让截图和导出能追到人数据产品里水印几乎是最低成本、最高效率的溯源手段。我强烈建议每个可视化页面都强制叠加水印至少在敏感数据页面不能提供关闭选项。水印分两种明水印页面背景里半透明的工号或姓名横竖交错铺满屏幕。会议室有人拿手机拍照事后一放大就能看到是哪个工号泄的密。之前有客户测试过把明水印嵌入到图表背后的灰色纹理里既不挡数据拍照后依然清晰可辨。暗水印肉眼看不见但可以通过程序从图片或数据中还原。在数据下载场景下做暗水印很有价值给下载的Excel文件里通过修改某些列的小数位精度或文本末尾的隐藏字符把用户ID编码进去。文件一旦外传拿回原始数据做校验就能定位到下载人。暗水印简单实现可以这么做把用户ID和导出时间做一个哈希转成一段数字编码然后把编码拆成若干位逐一埋进Excel数值型字段的最后一个十进制位上。比如原值是12.34编码位是7导出值就变成12.347。对业务分析来说一位的小数偏差几乎无感但对溯源来说这就是铁证。4.4 大屏场景的特殊处理大屏是目前数据产品里安全最容易被忽略的形态。因为大屏天生是摆出来给别人看的大家默认它不是个内部系统反而忘了它的数据有多敏感。我总结的大屏安全四板斧独立数据接口层大屏不要直接连底层库或Hive后端单独封装一层只读接口且接口只返回大屏展示需要的聚合数据不返回明细。这是从源头上减小暴露面。会话与投屏管控大屏的登录态要有独立过期时间比如凌晨无人时自动强制退出投屏用的终端要做固定IP白名单避免任何人在任意电脑上都能访问大屏地址。防截屏与防录屏检测页面监听窗口失焦、复制事件检测到DevTools打开或截图操作时可以触发告警。前端方案防不了专业工具但不设防等于敞开大门。屏幕水印强制叠加明水印在大屏上一律不能关并且水印内容要包含操作人和当前时间这样会议室拍回去的照片才具备溯源价值。5. 链路与基础设施安全集群部署阶段就要留下的底子数据产品跑在集群上如果链路本身不安全上层产品做得再好也是白搭。这部分其实属于大数据集群部署策略的范畴但我一定要从数据产品视角再说一遍因为太多数据产品团队以为这是平台团队的事结果两头落空。5.1 认证与准入Kerberos必须覆盖到接入端Kerberos在Hadoop生态里是标配但这几年我看到最常见的部署问题是只开了NameNode的认证HiveServer2裸奔。数据产品通过JDBC直连HiveServer2查询数据时只要知道连接地址和端口任意用户都能连上去执行SQL。这等于你给银行金库装了高级指纹锁却把后门消防通道常年开着。所以数据产品上线之前一定要和技术平台共同确认一件事所有数据访问入口包括HiveServer2、JDBC/ODBC、Spark ThriftServer、HBase/Redis认证是否全部纳入了Kerberos或LDAP认证域。不只是HDFS上的文件要认证计算引擎和元数据服务也要认证。5.2 网络隔离与数据加密数据产品服务器应该放在独立的网络区域通过安全组或防火墙只开放80/443端口对外数据库、HDFS、Kafka这些后端组件的端口一律不对数据产品服务器之外的主机开放。数据产品访问集群的链路也要走专用的内网网段不要图省事把集群的公共访问开关打开。传输层和数据落地的加密原则是能开全开数据产品对外访问全部走HTTPS禁用HTTP明文端口。别省证书的钱也别信内网不需要加密这种话。数据产品到Hive/HDFS之间的连接开启TLS或至少走安全RPC。集群内部各节点之间如果规模不大也建议开启RPC加密。底层的敏感字段在入库前就做加密存储。注意加密要支持可检索或可脱敏匹配比如手机号加密后仍然要能支持精确匹配和前缀匹配否则业务就废了。这块可以通过在Hive表中增加一个加密的确定性哈希列来解决。5.3 审计日志集中化与异常检测安全策略里最容易做的部分是日志最容易拖垮效率的也是日志。我的原则是日志要集中、要带上链路ID、要能被查询分析。数据产品的审计日志至少包括四类访问日志谁、从哪个IP、在哪个时间、访问了哪个接口和页面。数据查询日志通过这个产品执行了哪些SQL涉及哪些表和字段这个数据量很大建议只记表和敏感字段级别的摘要不要记全量SQL否则成本太高。导出日志哪些用户导出了什么文件、导出行数、文件hash值。权限变更日志谁在什么时候给谁加了什么权限、走了什么审批流。日志集中到统一平台后可以顺带做异常行为检测。几条简单实用的规则就能抓住大多数风险场景同一账号在短时间内从多个不同城市IP登录。深夜时段出现高频率、大批量的数据导出或明细查询。单账号在短时间内请求了大量未授权的数据域。导出文件的hash值在外网被分享可以做企业DLP的联动检测。这里其实可以做一点大数据侦察思路把这些日志当数据源用离线分析任务跑一套异常特征再把嫌疑人和嫌疑操作推送给人审。不用追求全自动判定能把风险收敛到人工可处理的量级就是胜利。6. 发布、监控与应急上线不等于万事大吉处理完前面五层你的数据产品不能说绝对安全但至少主路径上没有大窟窿了。接下来是最后一公里让安全策略在迭代过程中持续生效。很多产品安全做得好是静态的一上线一迭代就漏回去了。6.1 安全评审清单上线前逐项打勾我把数据产品的安全评审浓缩成一张清单每次上线前对照着勾一遍。不要在代码写完后才走评审应该在需求评审阶段就让安全评审介入。评审项检查点认证是否接入统一SSO是否强制MFA管理端测试账号是否清理授权新页面是否接入数据域权限接口是否校验权限上下文数据分级新用到的字段是否已维护进数据字典敏感字段是否配置脱敏SQL注入所有查询接口是否参数化是否限制返回行数导出管控导出功能是否脱敏、有水印、有审批、有审计基础设施访问链路是否加密后端组件端口是否隔离密钥管理数据库密码、Token密钥是否托管代码里是否有硬编码依赖安全前后端依赖是否有已知高危CVE是否升级到安全版本如果团队里没有独立安全岗我建议由数据产品负责人和技术负责人共同勾这张表每次上线发版时把勾选结果附在发布单里。6.2 生产环境的持续监控与告警上线之后的安全监控不要追求大而全的SIEM平台先把核心指标盘活。数据产品主要盯四类指标接口访问监控5xx错误率、平均响应时间、单IP/QPS突增。数据量监控单用户日查询行数、导出行数是否超基线。权限异常权限变更频率突然增加尤其夜间批量授权。敏感接口监控返回敏感L3/L4字段的接口调用频率如果出现阶梯式上升立刻告警。告警阈值要按产品历史基线来定不要套统一模板。比如导出量运营团队周一大促后导出量是平时的5倍如果阈值设得死可能天天误报最后狼来了没人看。6.3 应急响应数据安全事件应该怎么处置再好的防御也会有漏网的时候把应急响应流程理顺比发誓绝不出事靠谱。我的处置链路大概是确认与冻结接到疑似泄露告警先确认是否真实存在。确认后第一时间冻结嫌疑账号、撤回相关API的临时Token把暴露面停下来。定位暴露面从审计日志倒查这个账号访问了哪些数据域、导出了哪些文件、时间段是多久。通过水印和导出文件hash锁定最终泄露样本。评估影响范围涉及字段级别是否L3/L4、用户数、数据时间跨度同步给数据和合规同事确定是否要通知业务方或用户做进一步处置。根因修复不要只补眼前这个洞。账号共享导致的就上MFA和最小权限接口越权导致的就补数据域过滤脱敏缺失导致的就补数据字典和脱敏组件。复盘沉淀把事件过程、处置时间线、根因、改进动作写成一页纸的复盘发到团队内部。复盘的重点是下次怎么提前发现不是追责。另外我强烈建议每年给数据产品做两次安全演练模拟账号失陷和大批量数据泄露两种场景让值班的人动手跑一遍处置链路。很多团队应急文档写得很完善但真出了事连告警群在哪都找不到演练就是用最小的成本暴露这些问题。做数据产品安全这几年我最大的一个体会是安全策略不是一劳永逸的工程而是一套不断跟着产品和数据形态演进的机制。别追求第一步就把所有安全组件都堆上去先画清楚三张地图——用户访问地图、数据流向地图、链路依赖地图然后按风险从高到低逐个堵洞比一次性铺一堆安全产品可靠得多。很多团队一上来就买脱敏平台、加密系统结果账号体系还是共用的等于给保险箱上了三重锁却让大门敞开着。优先顺序一定不能搞反。至于行列权限这类核心技术点现在开源社区的方案已经不少了但记住一句话技术永远不是最难的部分最难的是把数据域模型梳理清楚。模型理清了安全策略就是往模型上挂规则的活儿。
返回列表