ARTICLE DETAIL

资讯详情

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

DataWorks数据安全治理实践:从权限管控到审计追溯的完整路径

DataWorks数据安全治理实践:从权限管控到审计追溯的完整路径 数仓里的一张核心订单表开发小哥要查数据顺手就从项目空间里访问到了没人觉得有问题。直到某天合规审计要求梳理敏感数据访问范围才发现这张表最近一个月被十几个账号轮番查询过其中还有两个已经离职半年的员工账号。这种场景在大数据平台里太常见了——数据越铺越广权限越欠越多安全事件往往不是被“预防”住的而是被“曝光”后才倒查出来的。DataWorks数据安全治理要做的事情就是从根上解决这类问题把分散在数据集成、数据开发、数据地图、数据服务里的安全能力串成一条完整的治理链路让数据从进平台到被使用、被分发、被销毁的每一步都可控、可查、可追溯。本文用我在实际项目里的落地经验把从“裸奔”到“有序”的完整路径讲清楚。内容默认面向数据平台管理员、安全工程师和大数据团队负责人新手也能看懂每一步在做什么、为什么这么做。1. 为什么数据平台用着用着就成了“裸奔”状态1.1 数据开发平台的信任边界正在失效很多团队最初搭建DataWorks环境的时候思路是“先让业务跑起来再说”。于是空间权限直接给到最大、表的访问权限不做细分、生产账号和开发账号混用。这在数据量小、团队人员少的时候没什么感觉但当数据资产膨胀到几百张表、几十个账号日常访问时原来的隐性信任就开始失效了。我给一个客户做安全评估的时候遇到过比较典型的案例他们的DataWorks项目空间里有六十多个RAM子账号生产环境的核心表被授权给“项目空间所有成员”这个级别相当于任何能登录DataWorks的人都可以读取订单明细、用户手机号、身份证等敏感字段。更麻烦的是这些账号里既有在职员工也有外包人员还有几个已经转到其他项目但账号没回收的。这种状态下安全治理不是“做不做”的问题而是“再不控制就要出事”的问题。DataWorks安全治理最佳实践的核心思路是把“数据平台的信任模型”从默认放行改成默认最小化。所有数据访问行为必须有明确的业务理由、有申请人、有审批记录、有到期时间。这个思路听起来简单落地的时候牵扯到的模块和配置链路却非常长后面几节会逐步拆开。1.2 DataWorks安全治理的三件核心资产元数据、权限、审计在动手配置之前我建议所有团队先建立一个大前提数据安全治理的抓手不是某个单一开关而是三件核心资产的联动。第一件是元数据。你得先知道自己有哪些数据、数据在哪儿、哪些数据是敏感的。DataWorks里的数据地图就是干这个的它能自动采集表结构、分区信息、血缘关系。但这些信息采集上来只是原始素材真正要把“敏感数据”识别出来还需要做分级分类打标。这一步不做后面所有权限控制都是盲打。第二件是权限。有了元数据之后才能谈“谁能访问什么”。DataWorks的权限体系分为空间级角色和表级/字段级权限两层实际使用中必须两个层面同时管控只控空间不控表等于没控只控表不审计等于不知道控得有没有用。第三件是审计。所有权限策略最后都要落到日志上。谁在什么时间查过哪张表、下载了多少行数据、有没有异常的高频访问这些记录必须完整且能快速检索。很多团队出事之后连“谁看过这条数据”都答不上来就是因为审计环节从来没认真配置过。这三件资产的关系可以用一个不太精确但很好理解的类比元数据是你家的物品清单权限是每间房的门锁审计是门口的监控录像。三样缺一不可而DataWorks的模块设计恰好把这三样都覆盖了问题只在于你有没有把它们串起来用。2. 数据分级分类治理的第一步是摸清家底2.1 用数据地图建立全域元数据清单数据地图是DataWorks的元数据中心它能自动同步MaxCompute、Hologres、EMR等各类计算引擎中的表结构信息并生成字段级别的元数据视图。不过在实际项目中我很少直接让这份清单裸奔而是会在数据地图的基础上做一轮人工补充。原因是数据地图同步过来的信息偏“技术视角”比如表名、字段名、数据类型、分区信息但它不知道这张表在业务上属于什么级别。同样是包含手机号的字段放在订单表中和放在员工信息表中敏感程度是一样的但表本身的重要程度可以不同。我在项目里通常的做法是先用数据地图把所有表导出一份全量清单标注每个表的所属业务域交易、会员、营销、风控等再针对每张表做敏感度初判最后把判断结果回填到表的信息注释中。这一步看起来费时间但它是后面所有安全策略的基础。表多了之后靠人工一张张去查根本不现实前期花两三天把清单整理清楚后面配置脱敏、批量授权都可以按这个清单来操作。数据地图还支持分类分级打标阿里云访客管控后台或者DataWorks里的“数据保护伞”能直接把标签挂到表或字段上后续的脱敏和权限策略就能自动识别这些标签。2.2 分级打标从L1到L4的落地标准数据分级没有统一的国家标准可以照搬但业内一个比较通用的做法是分成四级每级对应不同的管控强度。我在实际项目中推荐下面的分级方式分级定义典型示例管控要求L1公开数据泄露无影响商品类目、地区编码、公开统计指标无需特殊管控L2内部数据泄露影响有限脱敏后的报表、非敏感经营数据项目空间内可见即可L3敏感数据泄露会造成较大影响手机号、订单明细、采购价格按需申请、动态脱敏、审计留痕L4核心机密数据泄露后果严重身份证号、银行卡号、批量客户明细强审批、静态脱敏、导出管控、定期复核分级标准定下来之后最忌讳的是“只分级不打标”。“分级”如果只在Excel表格里躺着对平台没有任何约束力必须把L1~L4这个标签写到DataWorks的元数据里去让权限策略、脱敏策略、审计规则都能基于标签自动生效这个流程才真正闭环。打标的方式有两种手动打标和规则打标。手动就是人去看适合核心表数量不多的情况规则打标适合大规模表配置一些识别规则比如字段名包含phone、mobile、手机号则自动识别为L3让系统自动扫描批量打标。“数据保护伞”里的识别规则引擎就支持这种配置后面第4节会详细展开。2.3 血缘追踪让每条敏感数据的流向清清楚楚分级打标做完之后还有一层经常被忽略的工作——血缘追踪。数据仓库里表与表之间的加工链路非常复杂一张L4级别的原始订单表经过ETL加工后可能衍生出几十张下游表这些下游表的某个字段也可能继承原始数据的敏感度。DataWorks数据地图提供了表和字段级别的血缘查询能力能看到一张表的上游来源和下游去向。我在做数据安全治理的时候会专门用血缘分析做两件事第一查清楚L3/L4级别的敏感字段都被哪些下游表消费了这些下游表如果不做管控等于原始数据换了个名字继续裸奔第二在做权限回收或者脱敏改造时用血缘了解影响范围避免把还在被下游作业依赖的表一刀切导致生产任务集体失败。血缘的另一个重要用法是评估“谁在用这张表”。通过血缘可以反查到某个下游任务由哪个工作空间、哪个责任人调度再结合账号映射基本上就能定位到人。很多权限审批场景下“这个表能不能授权”靠的就是血缘数据来判断是否在业务必需范围内。这块数据是DataWorks原生就有的不配置白不配置强烈建议团队定期导出血缘关系做一次全量审视。3. 权限管控把“能不能查”变成一套可审批的规则3.1 DataWorks权限模型拆解空间角色与表级权限DataWorks的权限体系有两层第一层是空间级角色第二层是表级/字段级权限。这两层必须一起理解否则很容易出现“空间权限过大表级权限形同虚设”的情况。空间角色解决的是“这个人能在DataWorks里做什么”的问题。常见的空间角色有项目访客只读查看数据地图/任务列表、数据开发能创建和修改任务、数据运维能调度和监控任务、空间管理员能管理成员和资源配置。空间角色和表级权限是正交的即使一个人只是项目访客只要他拿到了某张表的Select权限他依然可以查询数据反过来一个拥有“数据开发”角色的人如果没拿到某张表的查询权限他也读不到这张表的数据。所以实际管控策略里我强烈建议空间角色按最小职责给别上来就给人“空间管理员”表级权限按业务必需给开通表权限必须走申请审批流程而不是由空间管理员直接手动加上。这个思路在DataWorks的“安全中心”模块里已经形成了一套产品化的操作路径下面具体说。3.2 权限申请-审批-授权-回收的完整闭环DataWorks安全中心的权限申请流程是我认为它最值得作为“最佳实践”推荐的能力。你在安全中心里可以发起表级权限申请填写申请原因、使用期限、权限类型Select、Update、Drop等然后提交给表Owner或空间管理员审批。审批通过后权限会自动生效到期后自动回收全程都有记录。这个流程的价值不在于“审批”这个动作本身而在于它把授权行为从“私下沟通”变成了“有据可查”。没有这套流程的团队通常的授权方式是开发找管理员“帮我开一下xx表的权限”管理员顺手就在后台给加上了——没有记录、没有期限、没有回收逻辑加完就忘了。而走申请审批流每个账号的权限清单是可查询、可审计的。项目落地过程中我会额外做两件事来强化这个闭环设置权限自动回收周期对于临时性的数据需求比如一次专项分析权限有效期直接设为7天或30天到期自动回收避免“临时授权”变成“永久权限”。定期做权限复核每个月导出一份账号-表权限清单和当前团队的人员名单做个匹配离职转岗人员的权限第一时间清理。这里有一个细节值得注意DataWorks的权限回收不是实时的某些类型权限的回收在调度任务运行时仍然可能生效。但为了保险起见管理员不要只依赖平台自动回收还是要有周期性的手工复核动作。安全无小事多一道人为检查不丢人。3.3 列级与行级权限精细化控制的最后一公里在很多业务场景下表级权限“一刀切”仍然太粗。比如运营人员需要查询用户订单做分析但他不应该看到用户的手机号和身份证信息。这时候就需要列级权限把非业务必需的敏感字段挡住。DataWorks在这块的能力是通过安全中心配合MaxCompute的列级授权来实现的。管理员可以对某张表设置字段级别的授权策略用户查询时只能看到被授权的列没被授权的字段直接访问不到。与之类似的还有行级权限控制比如不同区域的分公司只能看到本区域的销售数据这对应到具体SQL查询时实际上是追加了一层行级过滤条件。列级和行级权限的配置在DataWorks安全中心里都有对应的操作入口。我的建议是对于L3及以上的敏感表不要开放整表授权能走列级就尽量走列级能在生产链路中加过滤条件就尽量加。做了这一步之后配合下一节的动态脱敏数据泄露的风险就能大大降低。4. 敏感数据识别与脱敏让数据在流动中“可用不可见”4.1 识别规则让敏感数据自动浮出水面前面提到了数据分级打标真正支撑大规模打标的是“数据保护伞”这类识别规则引擎。它能扫描表结构和样例数据根据内置或自定义的敏感数据识别规则自动把包含手机号、身份证、银行卡、地址、IP、密钥等特征的字段标记出来。我在项目中配置识别规则时一般会做两层设计。第一层是字段名规则字段名包含phone、mobile、tel等的直接识别为手机号包含id_card、cert_no的识别为身份证包含bank_no、card_no的识别为银行卡号。这层规则简单高效但靠字段名存在误报和漏报的问题。第二层是内容规则用正则表达式或者样例数据抽样去判断字段里的实际数据形态比如判断一段字符串是否符合手机号的正则“1[3-9]\d{9}”的格式以及这个字段的整体命中率是否超过设定阈值。两层规则叠加之后整体识别准确率在大部分场景下可以做到95%以上。这里有一个实践建议规则配置完成之后不要直接拿生产环境全量跑先在一个较小的项目空间做试运行人工抽查一批识别结果把误报和漏报的字段拉出来调整规则阈值然后再推广到全项目。一上来就跑全量容易被误报信息淹没反而降低了治理效率。4.2 动态脱敏查询入口的隐形守护动态脱敏的意义在于数据是以脱敏后的形态返回给查询者的但底层存储的真实数据没有被改动。这就让数据在查询场景下变成了“可用不可见”。DataWorks数据保护伞支持引擎级的动态脱敏配置可以对指定的表、字段、用户或角色启用脱敏策略。脱敏方式可以选择哈希脱敏、遮盖脱敏、替换脱敏等。以手机号为例“遮盖脱敏”默认会返回135****1234这样的形式用户能通过前三位和后四位判断基本信息但拿不到完整号码。身份证的脱敏则通常是保留前六位和后四位中间做掩码处理。动态脱敏在实际使用中踩过几个坑值得说一下。第一个坑是脱敏会影响下游的数据分析语义比如你要按月统计客户数量但手机号被脱敏后可能影响join的关联结果因为脱敏并不是全局一致的不同用户登录看到的脱敏结果未必相同。第二个坑是动态脱敏和列级权限之间的优先关系。我遇到过的案例是某个字段同时配置了列级权限禁止访问和脱敏脱敏后允许查看结果用户在查询时看到的是列权限报错而不是脱敏后的数据排查了很久才发现是策略冲突。这两个策略同时存在时列级权限的优先级高于脱敏策略这是DataWorks的默认逻辑但很多运维不清楚。正确的落地方式是L2级别的数据用脱敏处理让需要数据的人看到脱敏结果L3/L4级别的核心敏感字段尽量直接用列级权限挡掉不让非必需用户看到任何形态的数据。当然如果业务确实需要看到部分明文也有办法通过保护伞的“敏感数据访问审批”能力申请临时查看明文审批通过后允许在限定时间内查看。但这种操作必须全程审计。4.3 静态脱敏敢于把数据交出去的底气动态脱敏解决的是“查询场景”的问题还有一个常见场景是“数据分发”——导出一张表给算法团队训练模型或者打一个数据快照给异地灾备这个时候数据是脱离DataWorks环境出去的动态脱敏就管不到了需要用到静态脱敏。静态脱敏的流程是从源表抽取数据在抽取过程中对敏感字段做不可逆的变换生成一份脱敏后的新表再把新表提供给下游使用。它和动态脱敏最大的不同在于脱敏过程是一次性的、永久生效的不会因为查询人的身份变化而变化。所以静态脱敏更适合“数据集中交付”的场景。DataWorks数据集成在做数据同步时可以通过配置脱敏组件对字段进行转换比如把身份证号码统一替换成随机字符串把手机号替换成伪号码。配置方法不复杂重点在于选择脱敏算法。对于需要保持格式一致性的场景比如身份证必须保持18位建议用哈希格式保留算法对于不需要保持格式的直接随机替换就可以。这份表一旦脱敏完成一定要做好“派生数据”的管理——明确新表属于L2级别避免因为脱敏后的数据看起来不敏感反而被到处复制传播。5. 审计与追溯安全事件真正发生后要能三分钟定位5.1 全链路审计日志的配置与使用权限控得再好也不能保证100%不出事所以最后一道防线是审计。DataWorks安全中心以及底层计算引擎MaxCompute、Hologres等都会记录详细的操作日志包括登录日志、数据查询日志、任务运行日志、权限变更日志等。我在规划审计能力的时候会优先确保两类日志的完整性第一类是数据访问日志记录谁在什么时间查询了哪张表的哪些字段、读取了多少行数据、通过SQL还是数据服务API访问的第二类是权限变更日志记录谁在什么时间给哪个账号授予或回收了什么权限申请单号是什么。两类日志都能在安全中心里查也可以投递到SLS日志服务做长时间存储和告警分析。这里要特别提醒一个容易被忽略的点DataWorks日志默认的存储周期通常不会太长如果你们公司对审计日志的留存有合规要求比如保留六个月甚至一年一定要配置日志投递把审计日志定期归档到独立的日志项目或OSS存储里。我见过不止一个团队出事之后想查三个月前的操作记录结果发现日志已经被系统清理了那种感觉非常无力。5.2 异常行为识别从被动查日志到主动预警靠人工翻日志做安全审计效率极低正常一个中型企业的日志量每天都有几万到几十万条没有告警规则等于没有审计。DataWorks安全中心提供了安全基线检查、异常登录检测、敏感数据下载行为监控等能力。我把异常行为识别的重点放在三类事件上非工作时间的敏感表查询凌晨两三点批量查询L4级别的核心表通常不是正常业务行为需要触发告警。敏感表的超大结果集导出正常业务人员分析一张订单表返回几百行数据是合理的一次查询导出几百万行甚至直接下载到本地这就很危险。权限变更的异常模式比如空间管理员在短时间内给某个账号批量授予大量表的权限或者每天反复申请同一张表的权限又很快释放这类行为也可能是被外部控制的账号在试探。这些告警规则可以按表的级别设置不同的阈值。L3/L4级别的表规则从严L1/L2级别的表规则从松避免告警噪音太多导致团队“狼来了”。告警消息接入钉钉或企微机器人后安全负责人可以第一时间收到通知。5.3 一次安全事件排查的完整链路复盘分享一个我实际经历过的事件排查过程方便大家理解审计日志怎么用。某天接到业务方反馈说一个第三方合作方手里出现了一批和我们订单数据非常相似的数据样本怀疑是从平台侧泄露出去的。排查的第一步是定位数据范围通过数据地图血缘和数据指纹匹配确定泄露样本对应的是哪张原始表以及哪些字段。第二步是反查访问记录在安全中心的访问日志里筛选这张表的全部查询记录再结合登录日志确认每个访问者的IP、地域、登录时间。第三步是人肉匹配把访问记录和当前在职人员名单做比对最终定位到一名一个月前离职的运营人员账号在离职前三天曾分多次将该表的查询结果导出到本地。这次事件的根源有两个一是该员工的表权限在离职流程中没有被自动回收因为他之前申请权限时勾选了“长期有效”到期时间遥遥无期二是他导出数据时没有触发任何告警因为当时表的级别只是L2没有配置下载数据量阈值。复盘之后的调整也很明确所有权限申请统一设置验收周期默认最长90天L2级以上的表全部启用下载量阈值告警离职流程里增加“权限回收确认”节点由安全管理员确认账号退出所有项目空间后才能办理离职手续。6. 持续运营把安全治理从“项目”变成“肌肉记忆”6.1 组织、制度、工具三层联动很多团队把DataWorks数据安全治理当成一个“配置任务”买完工具、配完权限、做完脱敏就觉得大功告成。但我的经验是安全治理的成败不取决于工具而取决于围绕工具建立的三层体系是否完整。第一层是组织。必须有一个明确的“安全责任人”角色无论是安全部门的人还是数据平台负责人他需要对数据安全的最终状态负责。同时要建立跨团队的协作机制因为数据开发团队负责日常运维安全团队负责制定策略业务团队负责提出需求三方缺一不可。第二层是制度。用制度明确“什么数据谁能碰、碰了要留下什么记录、违反了什么后果”。制度要简单可执行不要写几十页没人看核心就几条申请权限必须填业务理由敏感表查询必须走审批离职人员权限当天回收安全事件两小时内必须上报。第三层才是工具。DataWorks提供了支撑这套制度落地的所有功能模块但是工具本身不会自动运转需要有人去配置、监控、迭代策略。三层体系完整了安全治理才能从一次性项目变成日常运营动作。6.2 以指标驱动治理效果避免形式主义给治理工作设置看得见的量化指标是防止形式主义最好的办法。我常用的几个核心指标包括指标名称计算方式目标参考值敏感表打标覆盖率已打标的L3/L4表数 ÷ 应识别出的敏感表总数 95%权限申请审批时效平均每次权限申请从提交到完成审批的时间 1个工作日长期未回收权限占比超过有效期仍未被回收的权限数 ÷ 总授权数 5%动态脱敏规则执行率已配置脱敏的表数 ÷ 需要脱敏的表总数100%审计日志完整率留存日志天数达标项 / 全部审计项100%这些指标建议每个月汇总一次在数据平台的月度复盘会上过一遍。指标不是拿来看的是用来发现问题的。比如“权限申请审批时效”突然从一个工作日拖到三天可能是审批人离职了但没有移交审批权限而“敏感表打标覆盖率”迟迟上不去则需要检查是不是识别规则漏配了某些字段模式。指标异常是治理流程出现漏洞的信号追踪下去往往能发现更深层的机制问题。6.3 几个容易踩的坑和我的应对方式最后分享几个在多个项目里反复踩过的坑每条都是真金白银换来的经验。第一个坑是“最佳实践模板直接照搬”。网上一搜“DataWorks数据安全治理最佳实践”能找到很多模板我自己也见过一些团队拿着别人家的安全策略文档直接套到自己环境里。实际上每个公司的数据模型、团队角色、业务敏感度都不一样照搬的结果通常是权限控得严到业务跑不动或者识别规则宽到约等于没配。正确的做法是拿模板当检查清单一条条对比自己的实际环境调整模板解决的是“我有没有遗漏”不是“我该怎么做”。第二个坑是“只管控数仓生产表不管数据服务和API”。很多数据是经过DataWorks数据服务模块发布成API给外部应用调用的如果API不配置鉴权和限流等于绕过了所有的表级权限管控。接口侧的参数透传、结果集大小限制、调用方的AppKey权限范围都要纳入安全策略。我在审计时遇到过项目应用通过API把整张用户表拉走的情况而这张表在数仓侧的权限记录里干干净净问题出在API层没有任何数据量限制。第三个坑是“权限回收依赖人”。无论是DataWorks自动回收还是管理员手动清理都要增加系统级兜底。建议在DataWorks之上再做一道账号生命周期管理新员工入职时开通账号和默认权限转岗时重新评估所需权限离职时统一回收。这块如果公司有统一的IAM系统最好能对接起来让DataWorks的权限状态和人员状态自动同步不要靠HR邮件提醒。数据安全治理没有终点它和业务增长是持续博弈的。控制得太紧业务跑不快放得太松风险就藏在角落里。把DataWorks这套体系从“能用”打磨到“好用”需要的不是某一次大动作而是靠周期性的评估、迭代、复盘让安全策略跟着业务一起生长。
返回列表