在该阶段,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来识别风险。 |