DataWorks基于数据安全治理的常见思路,针对资产梳理、技术体系建设和运营体系建设,提供了一系列数据安全产品能力,您可通过“基础防护建设、数据安全防护措施及策略增强建设、数据安全持续运营”三个阶段在DataWorks上落地数据安全治理项目。
参考本文启动数据安全治理项目前,建议您先了解DataWorks数据安全产品相关能力
了解DataWorks数据安全产品能力后,您可参考如下三个阶段在DataWorks上落地数据安全治理项目。
阶段一:基础防护建设
在该阶段,DataWorks为您提供了数据分类分级、规范数据开发流程、企业级身份认证、开源身份隔离等多个场景的最佳实践,帮助企业做好数据安全治理的相关基础防护工作。
场景一:数据分级分类
无论在任何行业,数据分级分类都是监管首要检查的对象,也是企业应审的首要任务。因此,如何对本企业敏感数据识别、分级分类打标将成为一切安全治理工作的开始。
敏感数据一般包含如下三类。
敏感数据类别 | 描述 |
个人身份信息(Personally Identifiable Information,PII) | 任何可以识别个人的信息,如姓名、社会保险账号、社会安全号码、出生日期、出生地点、母亲的娘家姓或生物识别记录,也包括关联信息,如医疗、教育、金融和就业信息等。 |
受保护的健康信息(Protected Health Information,PHI) | 与个人有关的任何健康信息,如身体健康状况、病例信息、医疗费用等。从另一方面来说,PHI也属于PII。 |
专有数据(Proprietary Data) | 影响组织核心竞争力、一旦泄露会对组织造成损害的数据,典型例子有设计图纸、药物配方、客户信息等。 |
管理员可以根据上述敏感数据类型及本企业的数据属性,定义本企业/组织的数据敏感级别,一般情况下可以参考如下分级方式。
数据属性 | 分级 |
政府机构 |
|
非政府组织 |
|
如仍然无法确认分级标准,则可参考所在行业国家标准。例如:
-
《金融数据安全分级指南 JR/T 0197-2020》
-
《网络安全标准实践指南——网络数据分类分级指引》
-
《信息安全技术个人信息安全规范 GB/T 35273—2020》
-
《信息技术大数据数据分类指南 GB/T 38667-2020》
-
《基础电信企业数据分类分级方法 YD/T 3813—2020》
-
《政务数据安全分类分级指南 DB2201/T 17—2020》
-
《证券期货业数据分类分级指引 JR/T 0158—2018》
-
《信息安全技术健康医疗数据安全指南 GB/T 39725-2020》
分级、分类标准确认完毕后,即可前往DataWorks数据保护伞模块配置分级分类、数据识别规则,步骤如下图。
详情请参见数据保护伞 | 步骤一:事前梳理。
场景二:规范数据开发流程
数据仓库不仅是企业的核心数据资产,也是业务决策神经中枢。因此,对于生产环境的机密性、稳定性需通过DevOps的方式来保障。DataWorks提供了多个预设角色,并配合标准模式工作空间,支持团队内分权管理、各司其职,规范化开展数据生产开发流程。
标准模式下,可以给数据开发人员授权“开发”角色、给运维人员授权“运维”或“部署”角色、给数据团队主管授权“空间管理员”角色、给分析师授权“数据分析师”角色。这样,便可形成规范化的数据开发与生产流程。
-
数据建模链路:先由数据团队主管定义好建模过程中可能使用到的数据标准,再由数据建模人员设计并提交模型,最后经由数据团队主管、运维或部署人员审核无误后发布至生产环境。
-
数据开发与生产链路:开发人员在开发环境先开发代码、配置调度依赖、调试任务,待冒烟测试无误后可申请提交发布,此时应由一个运维/部署/管理员角色来进行代码Review,确认无误后即可发布到生产环境,让规范、安全的代码在生产环境定期运行并产出数据。
通过该方式,每个人各司其职,职责分离,有效避免了“自己开发、自己发布”的情况,同时,多人协作把控风险,可降低故障率。
说明
不同人员建议只分配一个对应的角色。例如,不可以给数据开发人员空间管理员的角色;或给某开发人员既分配开发角色又分配运维角色,这样会导致过度授权、提升故障风险。
详情请参见权限管理与规范化数据开发。
场景三:企业级身份认证
企业期望直接通过本地AD或LDAP来统一管理身份,而不是在云上维护一套账号,该操作可能导致管理难、离职账号回收遗漏等问题。阿里云支持基于SAML 2.0和OIDC的SSO(Single Sign On,即单点登录),也称为身份联合登录。通过管理者身份,可以实现系统与阿里云的单点登录集成。例如:
-
管理者可以在云上维护几个RAM角色,既可支持大量开发人员从本地SSO扮演角色进行开发工作,也可从操作审计日志中追踪到扮演者。
-
调度访问身份权限较大,管理者可以将RAM角色配置为调度访问身份,有效避免人员意外登录。
详情请参见DataWorks角色登录。
场景四:开源身份隔离
企业通常会使用DataWorks联合各类大数据引擎(例如,MaxCompute、E-MapReduce)进行数据开发。
-
使用DataWorks及MaxCompute进行数据开发时,在标准模式工作空间下默认支持身份权限隔离。
-
使用DataWorks及E-MapReduce时,支持管理者将DataWorks空间成员与EMR集群的Linux系统账号(已通过Ranger或Sentry分配好权限)、OPEN LDAP账号、Kerberos账号进行一一映射,实现人员权限隔离。
阶段二:数据安全防护措施及策略增强建设
在该阶段,DataWorks为您提供了新人入职自动化授权、按需申请数据权限&多级审批、数据可用而不可见、数据完整性与可用性专项治理等多个场景的最佳实践,帮助企业做好数据安全防护措施并建设更加完善的安全治理策略。
场景一:新人入职自动化授权
当企业规模变大,使用数仓的人员就会变多,同时,企业入职、离职、转岗的人员也会越来越多。当数据分析师或数据开发人员新人入职时,如果仅通过人工授权,则工作量巨大,且可能出现错漏。此时,管理员可通过定义“DataWorks自定角色 + MaxCompute Role”及DataWorks OpenAPI来进行自动化授权,实现人员入职成功后即可拥有最基本的数据权限。
操作步骤如下:
-
步骤一:为各部门对应的MaxCompute项目创建自定义Role,并通过Policy定义数据权限。
-
步骤二:在DataWorks中创建自定义角色并映射关联至MaxCompute的Role。
-
步骤三:将DataWorks添加成员的OpenAPI接口,嵌入至本企业HR系统中,按需触发或在人员入职成功后自动将对应的RAM身份添加至DataWorks自定义角色。
-
步骤四:最终,入职的新人便会默认拥有DataWorks空间角色及MaxCompute数据权限。
详情请参见DataWorks自定义角色、DataWorks添加成员OpenAPI、MaxCompute Role Policy配置。
场景二:按需申请数据权限&多级审批
在日常工作中,开发人员、数据分析师常需要读取他人产出的结果表,他们可在DataWorks数据地图检索表的元数据,并对表或表的某列进行权限申请。默认情况下,空间管理员或表Owner审批后便会自动授权,详情请参见DataWorks表权限申请及审批。
对数据安全要求较严格的企业,其内部制定了相关授权规范,例如:
-
敏感级别较低的数据由主管审批,较高密级的数据则由更高职位的人员审批。
-
由于不是所有审批人都会登录至DataWorks进行审批,因此,要求审批流程能延伸至用户外部审批系统(例如,钉钉、飞书、企业微信)。
面对这类场景,我们支持基于数据分级自定义审批流程,同时,支持通过OpenAPI与审批消息实现与外部系统对接,满足企业对平台开放性的诉求。
详情请参见通过分级分类配置审批策略、安全审批单相关OpenAPI中心、审批消息。
场景三:数据可用而不可见
在数据分析场景下,若非特殊情况,数据分析师通常不需要查询明细数据;在数据开发、测试场景下,开发人员在生产环境中导出数据进行开发或测试时,不展示明细数据时也不会影响开发工作。
为避免数据分析师、开发人员滥用数据,出于非工作目的查看明细数据,则可采用数据脱敏能力(支持保留格式加密、掩盖、HASH加密、字符替换、区间变换、取整、置空等多种方式),即很多法律法规中都重点强调的“去标识化”,实现在即席查询场景的界面化脱敏及通过数据集成任务将数据从生产同步至开发环境时的脱敏。
说明
必须要先完成数据分级分类,才能针对已识别到的敏感数据进行脱敏。
效果如下:
详情请参见数据脱敏能力概述。
场景四:数据完整性与可用性专项治理
在整体数据链路的处理过程中,为保证数据能准时产出,以及最终产出数据的质量,数仓团队需要对数据仓库ODS、CDM和ADS层的数据分别进行监控,如产出脏数据(例如,缺失值、空值、异常值),则需及时告警或阻断脏数据向下游蔓延。数据质量和智能监控均关乎数据信息的完整性(Integrity)与可用性(Availability)。
在DataWorks中,数据质量的管理流程包括业务的数据资产定级、加工卡点、风险点监控和及时性监控。同时,智能监控为您提供如下功能:
-
支持用户定义任务优先级与任务承诺完成时间。
-
及时捕捉重要任务(例如,高优先级任务、部分基线上的任务)无法按时完成的异常情况并提前预警。
-
保障复杂依赖场景下重要数据能在预期时间内顺利产出,帮助您降低配置成本、避免无效报警、自动监控所有重要任务。
阶段三:数据安全持续运营
在该阶段,DataWorks为您提供了数据违规下载实时阻断及审批、数据违规流转准实时告警等场景的最佳实践,帮助企业做好数据安全的持续运营。
DataWorks可基于用户行为实时事件、实时审计日志进行分析,帮助您实时发现风险行为并及时响应。具体应用场景请参见下文。
场景一:数据违规下载实时阻断及审批
数据下载是企业风险治理的重中之重。通常,企业数据开发人员、分析人员只允许在数据平台上浏览及使用数据,不允许将明细数据下载至本地进行分析。数据导出到本地后将无法审计其使用行为,若使用不当或遇到别有用心者,将导致数据被滥用、泄露,严重则可能产生数安事件及风险舆情。
不同企业对下载行为风控规则的定义存在差异,本文将以“实时阻断或审批超过1000条数据的下载行为”为例进行展示。
实现原理
操作步骤
结果验证
场景二:数据违规流转准实时告警
开发者在开发环境中使用数仓数据构建应用时,可能存在将ODS层数据同步至分析层项目空间、将分析层数据同步至数据仓库之外的存储介质(业务数据库或对象存储)等情况,此类行为极易造成数仓分析层数据可用性、完整性受损,或明细数据泄露。管理员可通过监控DataWorks操作审计日志及时发现此类行为,步骤如下:
-
登录至操作行为审计ActionTrail控制台。
-
查看运行数据集成任务ExecuteFile事件的审计报文。
审计报文详情。
-
配置告警规则。
-
方式一:通过日志服务进行告警。
通过特定语法配置告警规则“当Reader为odps且Write不为odps时则告警”,实现事后告警。配置详情请参见创建自定义告警规则。
语法示例参考如下。
event.eventName: ExecuteFile and event.serviceName: DataWorks | select * from (select json_extract_scalar(json_parse("event.requestParameterJson"), '$.codeContent.steps.0.stepType') as src, json_extract_scalar(json_parse("event.requestParameterJson"), '$.codeContent.steps.1.stepType') as dst from log) where src='odps' and dst != 'odps'
-
方式二:通过自建告警系统进行告警。
通过ActionTrail OpenAPI(LookupEvents)将审计事件明细内容拉取至本地解析,若审计报文内容符合“当Reader为odps且Write不为odps时则告警”规则,则可通过自建告警系统发出告警。
-
其他典型风险运营场景示例
DataWorks上可能出现的其他风险操作、风险场景、建议响应方式请参见下表。
说明
相关操作如需实现审批、事中拦截,请提交工单、反馈客户经理或通过钉钉群联系产品侧进行评估。
模块 | 操作名称 | 风险场景示例 | 响应方式 | 实现方式 |
数据集成 | 保存数据集成任务 | 禁止将高安全级别区域的数据源置为源端,将低安全级别的数据源置为目的端。 禁止将贴源层数据源置为源端,将非贴源层数据源置为目的端。 禁止将境内数据源置为源端,将境外数据源置为目的端。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件DIUpdateDataxJob、DISaveSolution来识别风险。 |
提交数据集成任务 | 禁止将高安全级别区域的数据源置为源端,将低安全级别的数据源置为目的端。 禁止将贴源层数据源置为源端,将非贴源层数据源置为目的端。 禁止将境内数据源置为源端,将境外数据源置为目的端。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件SubmitFile,并结合OPEN API"GetFile"获取节点信息来识别风险。 (2)事中拦截:构建“文件提交”扩展程序,并结合对应开放事件及OPEN API"GetFile"获取节点信息来识别风险、拦截操作。 | |
运行数据集成任务 | 不允许将高安全级别区域的数据源置为源端,将低安全级别的数据源置为目的端。 不允许将贴源层数据源置为源端,将费源层数据源置为目的端。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件ExecuteFile来识别风险。 (2)事中拦截:构建“节点运行”扩展程序,并结合对应开放事件及OPEN API"GetFile"获取节点信息来识别风险、拦截操作。 | |
数据开发 | 提交文件 | 不允许提交包含Select * 语句的任务。 不允许提交无Insert关键字的Select语句任务 。 禁止提交DROP、TRUNCATE、PURGE相关的DDL语句。 禁止提交直接输出(敏感)字段的语句。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件SubmitFile,并结合OPEN API"GetFile"获取节点信息来识别风险。 (2)事中拦截:构建“文件提交”扩展程序,并结合对应开放事件及"GetFile"OPEN API获取节点信息来识别风险、拦截操作。 |
发布文件 | 不允许发布包含Select * 语句的任务。 不允发布交无Insert关键字的Select语句任务 。 不允许同时拥有开发、运维角色人员将自己开发的任务直接发布到生产环境。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件DeployFile,并结合OPEN API"GetFile"获取节点信息来识别风险。 (2)事中拦截:构建“文件发布”扩展程序,并结合对应开放事件及OPEN API"GetFile/ListProjectMembers"获取节点与成员信息来识别风险、拦截操作。 | |
运行代码 | 不允许直接输出查询敏感级别大于X级别的明细数据。 禁止对生成环境执行DROP、TRUNCATE、PURGE相关的DDL语句。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件ExecuteFile来识别风险。 (2)事中拦截:构建“节点运行”扩展程序,并结合对应开放事件及OPEN API"GetFile"获取节点信息来识别风险、拦截操作。 | |
删除文件 | 不允许删除以“X”字符串开通的任务。 不允许删除核心业务流程中的节点。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件DeleteFile,并结合OPEN API"GetFile"获取节点信息来识别风险。 (2)事中拦截:构建“文件删除”扩展程序,并结合对应开放事件及OPEN API"GetFile"获取节点信息来识别风险、拦截操作。 | |
表提交 | 不允许执行“提交表”操作来修改表结构。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过开启并消费“表提交”开放事件来识别风险。 (2)事中拦截:构建“表提交”扩展程序,并结合对应开放事件来识别风险、拦截操作。 | |
表发布 | 不允许直接将表发布至数仓ADS层。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过开启并消费“表发布”开放事件来识别风险。 (2)事中拦截:构建“表发布”扩展程序,并结合对应开放事件来识别风险、拦截操作。 | |
偷锁 | 不允许开发人员偷锁他人任务的锁,恶意修改他人代码。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件LockFile来识别风险。 | |
查看数据(查询结果) | 不允许查看明细敏感数据。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件ReadExecutionResults来识别风险。 | |
复制数据(查询结果) | 不允许复制明细敏感数据。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件CopyTaskResult来识别风险。 | |
下载数据(查询结果) | 不允许一次性下载超过1000条数据。 按人员所属部门(工作空间)判断其是否允许下载数据。 当查询SQL中包含敏感字段时阻断下载。 分段风控,当下载条数超过2W条时需要审批,超过5W时条则阻断。 针对空间角色定义下载条数。例如,开发角色允许下载N条,超过则阻断;分析师角色允许下载M条,超过则阻断。 需针对数据开发、数据分析场景分别设置不同的下载条数策略。 | (1)事后告警 (2)事中拦截或审批 | (1)事后告警:通过解析操作审计事件DownloadExecutionResult来识别风险。 (2)事中拦截或审批:构建“数据下载”扩展程序,并结合对应开放事件及OPEN API"ListProjectMembers"获取节点信息来识别风险、拦截&审批操作。 | |
运维中心 | 暂停&冻结&下线任务 | 不允许暂停&冻结&下线某条核心业务线的任务。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件OfflineNode、StopInstance、SuspendInstance来识别风险。 (2)事中拦截:构建“节点冻结、节点下线”扩展程序,并结合对应开放事件来识别风险、拦截操作。 |
补数据 | 不允许一次性补数据超过N个节点。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件RunCycleDagNodes来识别风险。 (2)事中拦截:构建“补数据”扩展程序,并结合对应开放事件来识别风险、拦截操作。 | |
触发式任务运行 | 所运行的任务不允许包含Select * 语句的任务; 所运行的任务不允许包含Insert关键字的Select语句任务 。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件RunTriggerNode,并结合OPEN API"GetFile"获取节点信息来识别风险。 | |
基线增删改 | 不允许直接增删改基线优先级,避免高优先级任务无法准时产出。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件UpdateBaseline、DeleteBaseline,并结合OPEN API"GetBaseline"获取基线信息来识别风险。 | |
数据质量 | 设为弱规则 | 不允许直接将与某些核心任务挂钩的数据质量规则设置为弱规则,避免脏数据蔓延而无法直接阻止。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件UpdateQualityRule,并结合OPEN API"GetQualityRule"获取质量规则信息来识别风险。 |
删除规则 | 不允许直接删除与某些核心任务挂钩的数据质量规则,避免脏数据蔓延而无法直接阻止。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件DeleteQualityRule,并结合OPEN API"GetQualityRule"获取质量规则信息来识别风险。 | |
停止规则 | 不允许直接停止与某些核心任务挂钩的数据质量规则,避免脏数据蔓延而无法直接阻止。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件UpdateQualityRule,并结合OPEN API"GetQualityRule"获取质量规则信息来识别风险。 | |
数据分析 | SQL查询 | 不允许直接输出查询敏感级别大于X级别的明细数据。 禁止对生成环境执行DROP、TRUNCATE、PURGE相关的DDL语句。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件RunTask来识别风险。 |
查看数据(查询结果) | 不允许查看明细敏感数据。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件ReadExecutionResults来识别风险。 | |
复制数据(查询结果/电子表格) | 不允许复制明细敏感数据。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件CopyTaskResult/CopySheetContent来识别风险。 | |
下载数据(查询结果/电子表格) | 不允许一次性下载超过1000条数据。 按人员所属部门(工作空间)判断其是否允许下载数据。 当查询SQL中包含敏感字段时阻断下载。 分段风控,当下载条数超过2W条时需要审批,超过5W时条则阻断。 针对空间角色定义下载条数。例如,开发角色允许下载N条,超过则阻断;分析师角色允许下载M条,超过则阻断。 需针对数据开发、数据分析场景分别设置不同的下载条数策略。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件DownloadSqlResult/DownloadSheet来识别风险。 (2)事中拦截:构建“数据下载”扩展程序,并结合对应开放事件及OPEN API"ListProjectMembers"获取节点信息来识别风险、拦截&审批操作。 | |
管控台 | 删除项目空间 | 不允许直接删除DataWorks项目空间。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过解析操作审计事件DeleteProject,并结合OPEN API"GetProject"获取工作空间详情信息来识别风险。 (2)事中拦截:构建“删除项目空间”扩展程序,并结合对应开放事件及OPEN API"GetProject"获取工作空间详情信息来识别风险、拦截操作。 |
数据源 | 删除数据源 | 不允许直接删除与核心调度任务关联的数据源。 | (1)事后告警 (2)事中拦截 | (1)事后告警:通过开启并消费“删除数据源”开放事件来识别风险。 (2)事中拦截:构建“删除数据源”扩展程序,并结合对应开放事件来识别风险、拦截操作。 |
数据地图 | 修改MC字段Label值 | 不允许直接修改MaxCompute表字段的Label值。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件updateTableColumnSecurityLabels来识别风险。 |
数据服务 | 发布数据服务API | 不允许直接发布回参包含敏感字段为N级的数服务API。 | (1)事后告警 | (1)事后告警:通过解析操作审计事件PublishApi来识别风险。 |