大数据处理也要安全--关于MaxCompute的安全科普
[TOC]
1.企业大数据处理现状
当今社会数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百GB、TB乃至PB)级别。基于此,阿里云推出有了一套快速、完全托管的GB/TB/PB级数据仓库解决方案——阿里云大数据计算服务(MaxCompute,原名ODPS),MaxCompute服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务。
企业从未像今天这样可以轻易地存储和使用大数据,大数据计算已经成为越来越多企业不可获取的工作环节。然而,当您在使用大数据产品时,是否考虑过其中的安全问题呢?
庆幸的是,阿里云产品专家和安全专家早就想你所想急你所急,先行一步将安全特性带入了大数据计算产品 MaxCompute。该产品在面世之初就具备强大的安全特性,让企业可以放心地在云上使用。让我们一起来了解 MaxCompute的安全特性,以及如何安全地使用它吧。
2.MaxCompute优势
2.1 示例应用场景
常见的MaxCompute使用方法是,通过 DataWorks 或 特定客户端连接MaxCompute然后开展数据工作。
下图是笔者所在安全团队通过 DataWorks 使用 MaxCompute 功能,对态势感知日志进行深度安全分析的示例。因为 MaxCompute 支持批量操作和作业定义,因此安全团队可以将日志批量导入系统并执行安全分析,最终输出安全分析结果。整个流程设计完全图形化实现,界面简洁,操作方便。
2.2 MaxCompute基础特性
MaxCompute为用户提供完善的数据导入方案以及多种经典的分布式计算模型,助用户快速解决海量数据的计算问题,有效降低企业成本并保障数据安全。用户可以不必关心分布式计算和维护细节,便可轻松完成大数据分析。
概括地说(从官方抄来了),MaxCompute有如下特性优势:
- 大规模计算存储
MaxCompute适用于100GB以上规模的存储及计算需求,最大可达EB级别。
- 多种计算模型
MaxCompute支持SQL、MapReduce、Graph等计算类型及MPI迭代类算法。
- 低成本
与企业自建专有云相比,MaxCompute的计算存储更高效,可以降低20%-30%的采购成本。
- 安全性
MaxCompute具备强数据安全特性:MaxCompute已稳定支撑阿里全部离线分析业务7年以上,提供多层沙箱防护及监控。
2.3 MaxCompute安全特性
MaxCompute拥有完备的措施来保证用户的数据安全,产品在最开始设计阶段就已经考虑到多租户环境下的安全问题。除了项目的创建者外的其他人(包括阿里云的员工),未经授权无法看到用户的数据。
MaxCompute 有健全的安全体系,支持多种权限设置方法,包括基于 ACL 和角色管理实现的对 Project 级别、表级别的授权,保证只有经过授权的用户才能访问到数据。
MaxCompute 安全沙箱系统,可以防止其他的客户恶意操作。
使用 Access Id/Key 作为角色验证的方法,和阿里云账号区分开,如果出现泄露可以很快禁用,不会影响其他 Access Id/Key 的使用。
在 DataWorks 控制台甚至可以直接设置 MaxCompute 项目高级参数,包括多个安全特性。
重点安全配置项如下:
- 使用ACL授权
- 允许对象创建者访问对象
- 允许对象创建者授权对象
- 项目空间数据保护
- 子账号服务
- 使用Policy授权
- 启动列级别访问控制
3.MaxCompute 综合安全防护机制
3.1 租户隔离与访问控制
项目空间(Project)是MaxCompute的基本组织单元,它类似于传统数据库的Database或Schema的概念,是进行多用户隔离和访问控制的主要边界。
一个用户可以同时拥有多个项目空间的权限,通过安全授权,可以在一个项目空间中访问另一个项目空间中的对象,例如表(Table)、资源(Resource)、函数(Function)和实例(Instance)。
MaxCompute 通过身份鉴别、访问控制、项目内权限管理和项目间访问控制实现整体架构安全,在具体实现方面可以通过 ACL、Role、Policy 等机制实现即时控制,为大数据使用解除所有安全顾虑。
一个完整的 MacCompute 资源使用权限校验过程如下图所示:
只有完成上述访问控制策略链路上每个节点的安全检查,用户才能访问MaxCompute项目权限内的资源。
身份鉴别通过 AK/AS完成,这在创建项目时需要配置,网络访问控制通过 IP 地址白名单控制(需要手工启用)、项目之间或项目内的访问控制通过 MaxComputer 的鉴权机制来实现。
3.2 基于角色的权限控制矩阵
MaxCompute 项目空间有不同的用户角色,如:项目拥有者、管理员、开发者等。
虽然可以使用Console 和开发工具对接 Maxcompute,但是图形界面的 DataWorks 仍然是大数据计算场景使用频发的交互接口,DataWorks为MaxCompute提供一站式的数据同步、业务流程设计、数据开发、管理和运维功能。
官方视频里也有一段针对DataWorks用户权限和MaxCompute项目的角色关系映射表,供参考。
在 DataWorks 控制台上,用户在项目空间内有不同角色,分别是:项目拥有者、项目管理员、开发、运维、部署、访客和安全管理员。阿里云 MaxCompute 项目对权限组和权限列表做了精细化的权限控制,通过Web 控制台项目管理界面可以查看到详细的DataWorks角色与权限矩列表。相关权限组如下:
- 数据管理
- 发布管理
- 按钮控制
- 代码开发
- 函数开发
- 节点类型控制
- 资源管理
- 工作流开发
- 数据集成
每一个不同给的角色有哪些权限,在权限列表中一目了然。
3.3 项目内保护机制-授权
当有新用户加入项目组时,项目管理员可以通过 Web 控制台或 MaxCompute Console 将新用户加入项目组,并授权其访问项目资源。
被授权的账号既可以是在www.aliyun.com上注册过的有效邮箱地址,也可以是执行此命令的云账号的某个RAM 子账号。如果是通过支付宝、淘宝等账号联登的账户,需要从用户中心获取账号名,如下图所示:
MaxCompute只允许主账号将自身的RAM子账号加入到项目空间中,不允许加入其它云账号名下的RAM子账号。
简单地说:MaxCompute项目所有者可以为自己的 RAM 账号授权,可以为外部阿里云主账号授权,但不能为外部账号的子账号授权。
举例来说:项目 A 中有新成员张三加入,此时需要给张三项目操作权限。
基本操作步骤如下:项目 Owner 执行如下命令,完成用户添加,并执行 GRANT 命令实现 ACL 权限设定。
USE ProjectName;
ADD USER ALIYUN$zhangsan@aliyun.com;
GRANT List,CreateInstance on project ProjectA to USER ALIYUN$zhangsan@aliyun.com;
3.4 项目内保护机制-防数据下载
对于一些数据敏感类项目,项目所有者通过 MaxCompute控制台可以为项目设置数据保护功能,如:防止下载查询结果。
具体操作可以在项目配置界面,开启【在本项目中能下载select结果:】的开关。
经设置后,数据工程师将不能直接下载大数据平台的 select 查询结果。
3.5 项目内保护机制-沙箱出栈访问白名单
大数据计算平台不仅仅支持简单的查询操作,还支持部署 Python、Jar 等工具包。此类用户自定义工具组件,具备网络访问能力。为防止脚本程序内置后门或被攻击者利用,项目管理者可以设置计算环境可以访问的外部 IP 地址白名单,增强数据安全防护。
通过Web 控制台项目管理界面,可以在【沙箱白名单】菜单,配置shell任务可以访问的IP地址或域名。
添加成功后效果如下:
但设置 IP 白名单后,沙箱环境只能请求首选服务器,其它所有行为都将被拦截,效果如图:
3.6 项目间保护机制-项目保护开关
一个典型的应用场景是:Project B 项目的用户李四要加入 Project A项目,A 的项目所有者为李四开通了访问权限。
这个引用场景的风险是:李四有多种方法将 Project A数据导出,其中最简单的是通过下面语句转出数据。
CREATE TABLE ProjectB.Result AS SELECT * FROM ProjectA.SensitiveData
如果Project A的数据敏感度很高,不希望外流;那么管理员可以为该项目设置 ProjectProtection 开关(`SET ProjectProtection=true;
`),阻止数据外流。一旦开启 ProjectProtection开关,该项目的数据只能流入不能流出,任何直接或间接的数据导出方式都将失效。用户李四只能在项目内进行资源访问,不能在项目间流转数据。
3.7 项目间保护机制-例外与互信
企业用户的需求总是由特定场景决定的。虽然 MacCompute 支持项目保护功能,但不排除在运营过程中出现仍然需要与其它项目互访,或受信外部项目访问的情况。为此,阿里云MacCompute为系统增加了ProjectProtection模式下的例外机制和项目互信机制。
3.7.1 例外策略机制
通过编写策略文件 PolicyFile并将其加入到项目Protection 的里外中,可以实现项目空间例外访问控制策略,命令如下:
USE ProjectA;
SET ProjectProtection=true with exception policy.json;
3.7.2 项目互信与互信组
若因项目需求关系,经过严格审查,确定 Project A 和 Project B 项目之间可以完全互信,互相访问,则通过设置信任项目的方式,可以设置 A、B 项目互信,实现数据互访。具体操作指令如下:
USE ProjectA;
ADD trustedproject ProjectB
经上述设置后,A 和 B 在同一个受信域内,允许各自授权用户的互相访问。如果出现 A 信任 B、B 信任的情况,则表明 A、B、C 三者是完全互信的,可以直接设置一个项目互信组 TrustedGroup,同样能满足项目互信要求。
3.8 Policy 授权机制
如此前章节介绍,项目访问控制除了标准的 ACL 控制策略外,还有基于 Policy 的授权机制。Policy 主要解决 ACL 无法实现的一些复杂场景授权,通常可以实现:一次操作对一组受访问课题资源的授权,带限制条件的授权等。该授权机制可以更加方便灵活地定义用户对数据的访问权限控制。以下是一个简单的实例:
以下是参考Policy的JSON样例,该策略允许user_b@aliyun.com使用odps:Select权限访问项目ProjectA的 datas 表。
{
"version": "1",
"statement": [
{
"Effect": "Allow",
"Principal": "ALIYUN$user_b@aliyun.com",
"Action": [
"odps: Select"
],
"Resource": "acs: odps: *: projects/ProjectA/tables/datas",
"Condition": {
"StringEqual": {
"odps: TaskType": [
"DT",
"SQL"
]
}
}
}
]
}
典型的 Policy 使用方法如下图:
GET POLICY;
PUT POLICY policy.json;
PUT POLICY policy.json on role <role name>;
3.9 LabelSecurity实现列级别访问控制
基于标签的安全(LabelSecurity)是项目空间级别的一种强制访问控制策略(Mandatory Access Control, MAC),它的引入是为了让项目空间管理员能更加灵活地控制用户对列级别敏感数据的访问。
LabelSecurity需要将数据和访问数据的人进行安全等级划分。在政府和金融机构,一般将数据的敏感度标记分为四类:0级 (不保密, Unclassified), 1级 (秘密, Confidential), 2级 (机密, Sensitive), 3级 (高度机密, Highly Sensitive)。MaxCompute也遵循这一分类方法。ProjectOwner需要定义明确的数据敏感等级和访问许可等级划分标准,默认时所有用户的访问许可等级为0级,数据安全级别默认为0级。
一个典型的应用场景:某数据表格中存放了大量用户基本信息,字段安全标记为0,1,,也存放了一些用户手机号等隐私信息,字段安全标记为3。此时,如果用户 A 的访问许可等级为1,则该用户只能查询等级为0和1的数据,而不能查询等级为2和3的数据。
LabelSecurity对敏感数据的粒度可以支持列级别,管理员可以对表的任何列设置敏感度标记(Label),一张表可以由不同敏感等级的数据列构成。
对于view,也支持和表同样的设置,即管理员可以对view设置label等级,view的等级和它对应的基表的label等级是独立的,在view创建时,默认的等级也是0。
LabelSecurity默认安全策略
在对数据和user分别设置安全等级标记之后,LabelSecurity的默认安全策略如下:
(No-ReadUp) 不允许user读取敏感等级高于用户等级的数据,除非有显式授权。
(Trusted-User) 允许user写任意等级的数据,新创建的数据默认为0级(不保密)
4.企业敏感数据处理实践
某企业底层数据系统中存放有各类敏感信息,包括:用户名、手机号、身份证号码等。数据分析团队需要对数据进行挖掘,那么下面的问题将不得不面对:
- 哪些数据需要加密?
- 敏感数据如何存储和使用?
- 如果兼顾业务需要和数据安全保护?
根据上文对MaxCompute安全特性的介绍,我们可以按照如下策略开展。
- 对于永远都不能明文显示的信息,应该在业务数据写入 RDS、MongoDB 等系统时就直接加密,不要等到写入MaxCompute 才加密。数据安全保护要在全生命周期内开展,不仅仅是大数据计算环节。此类信息通常包括:身份证全字符、银行卡全字符、企业核心业务敏感字段等。
- 对于业务分析要用到的一般敏感数据,建议遵循最小权限原则,在落入 MaxCompute 时进行加密,如登录名、Email、手机号等。只有在真正需要的时候才做解密动作。比如:抽取1000名活跃用户进行奖品发放和短信通知。这个场景只适合通过大数据平台算出 UID,然后通过特定的业务系统完成数据提取。
- 对安全性要求高的表,应启用标记安全功能实现列表及访问控制;
- 对于不需要使用,但又不能明文计算的数据可以考虑摘要、截断或掩码等方式进行预处理,如:手机号前 X 位,邮箱 SHA 摘要等;
- 如非必须,请勿开通 select 结果下载功能;
- 如有可能,应通过安全的环境进行大数据访问,如:堡垒机、云主机等;
- 核查项目互信机制和互信清单,确保仅授权用户才能使用;
- 核查发布到 MaxCompute 环境中的Jar、Python 等文件包;
- 为项目设置不同角色的人员,按需设置设置权限;
- 定期审计项目授权清单,确认权限控制合理;
- 区分开发环境和生产环境,Job 推送前务必核实。
5.参考资料
大数据处理也要安全--关于MaxCompute的安全科普的更多相关文章
- 翻译-In-Stream Big Data Processing 流式大数据处理
相当长一段时间以来,大数据社区已经普遍认识到了批量数据处理的不足.很多应用都对实时查询和流式处理产生了迫切需求.最近几年,在这个理念的推动下,催生出了一系列解决方案,Twitter Storm,Yah ...
- [转载] 一共81个,开源大数据处理工具汇总(下),包括日志收集系统/集群管理/RPC等
原文: http://www.36dsj.com/archives/25042 接上一部分:一共81个,开源大数据处理工具汇总(上),第二部分主要收集整理的内容主要有日志收集系统.消息系统.分布式服务 ...
- eMarketer:DMP帮广告主搞定大数据处理问题
DMP(数据管理平台)帮助广告主获得可行动的洞察 在数字广告领域,大数据和数据管理平台(DPMs)仍大有可为.DMPs让广告主可以使用他们的大数据来做出更灵活更有效的营销决策. 数据管理和分析是业界挑 ...
- 《Spark大数据处理:技术、应用与性能优化 》
基本信息 作者: 高彦杰 丛书名:大数据技术丛书 出版社:机械工业出版社 ISBN:9787111483861 上架时间:2014-11-5 出版日期:2014 年11月 开本:16开 页码:255 ...
- Spark大数据处理技术
全球首部全面介绍Spark及Spark生态圈相关技术的技术书籍 俯览未来大局,不失精细剖析,呈现一个现代大数据框架的架构原理和实现细节 透彻讲解Spark原理和架构,以及部署模式.调度框架.存储管理及 ...
- hadoop大数据处理之表与表的连接
hadoop大数据处理之表与表的连接 前言: hadoop中表连接其实类似于我们用sqlserver对数据进行跨表查询时运用的inner join一样,两个连接的数据要有关系连接起来,中间必须有一个 ...
- 0基础搭建Hadoop大数据处理-初识
在互联网的世界中数据都是以TB.PB的数量级来增加的,特别是像BAT光每天的日志文件一个盘都不够,更何况是还要基于这些数据进行分析挖掘,更甚者还要实时进行数据分析,学习,如双十一淘宝的交易量的实时展示 ...
- 0基础搭建Hadoop大数据处理-编程
Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和 ...
- 《Spark大数据处理:技术、应用与性能优化》【PDF】 下载
内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...
随机推荐
- thinkphp 范围标签
范围判断标签包括in notin between notbetween四个标签,都用于判断变量是否中某个范围. 大理石平台价格 IN和NOTIN 用法: 假设我们中控制器中给id赋值为1: $id = ...
- 概率dp的迭代方式小结——zoj3329,hdu4089,hdu4035
在推导期望方程时我们常常会遇到dp[i]和其他项有关联,那么这时候我们就难以按某个顺序进行递推 即难以通过已经确定的项来求出新的项 即未知数的相互关系是循环的 但是我们又可以确定和dp[i]相关联的项 ...
- [ZJOI 2018]历史
题意:给定一棵树和点的\(Access\)次数,求切换链的最大值. 考虑修改时实边与虚边的贡献,用\(LCT\)维护此树. // luogu-judger-enable-o2 #include< ...
- JAVA_ArrayList和HashSet
ArrayList ArrayList在Java中主要是以线性表的形式进行存储,其本质是数组,不过相对于数组的长度不可变这一缺点,其实行了长度可变策略,使你在使用时,感觉到其就是一个无限长度的数组,而 ...
- 16.ajax_case06
# 抓取华尔街见闻实时快讯 # https://wallstreetcn.com/live/global?from=navbar import requests import json header ...
- JavaScript对象小基础
对象的简单学习: 1.String对象1:属性 在javascript中可以用单引号,或者双引号括起来的一个字符当作 一个字符对象的实例,所以可以在某个字符串后再加上.去调用Strin ...
- 零基础入门学习python--第二章 用Python设计第一个游戏
知识点汇总1. 什么是BIF? BIF(Built-in Functions)内置函数,共68个,可直接调用,方便程序员快速编写脚本程序.输入dir(__builtins__)即可查看所有内置函数,h ...
- 由Toolbar造成的ListView最后一项显示不全
懒得写了==附上参考博文 Android GirdView/Listview 最后一行显示不完整 - sex_34的专栏 - CSDN博客
- shell脚本练习03--字符串
######################################################################### # File Name: -.sh # Author ...
- 如何在asp.net(C#)里用正则表达式验证手机号码