大数据处理也要安全--关于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 推送前务必核实。