开箱即用的安全方案:MaxCompute数据安全方案介绍

摘要: MaxCompute 是一个支持多租户的统一大数据处理平台,不一样的用户对数据安全需求不尽相同。为了知足不一样租户对数据安全的灵活需求,MaxCompute 支持项目空间级别的安全配置,ProjectOwner 能够定制适合本身的外部帐号支持和鉴权模型而且在某种程度上保障Project的数据安全。html

MaxCompute 是一个支持多租户的统一大数据处理平台,不一样的用户对数据安全需求不尽相同。为了知足不一样租户对数据安全的灵活需求,MaxCompute 支持项目空间级别的安全配置,ProjectOwner 能够定制适合本身的外部帐号支持和鉴权模型而且在某种程度上保障Project的数据安全。git

一般状况下,常见的开发模式为__MaxCompute+DataWorks__方式,针对这种场景下数据安全方案以下:github

1、禁止数据下载到本地
禁止数据流出或下载本地
方式①:
数据保护机制也被称之为开启项目空间数据保护,能够经过MaxCompute console 开启服务端禁止数据流出:api

set projectProtection=true
--设置ProjectProtection规则:数据只能流入,不能流出。
--默认时,ProjectProtection不会被设置,值为false。
方式②:
那么更多开发者经过DataWorks进行数据分析,一般会屏显在IDE上而且能够下载结果,这种能够经过项目管理 > 项目配置中打开“在本项目中能下载select结果”,具体以下:安全

图片描述

那么这种状况下,在DataWorks查询结果页面就不能够经过“下载”按钮进行下载数据到本地。运维

图片描述

开启数据保护机制后的数据流出方法
在您的Project被设置了ProjectProtection以后,您可能很快就会遇到这样的需求:user1向您提出申请,她的确须要将某张表的数据导出您的项目空间。函数

并且通过您的审查以后,那张表也的确没有泄漏您关心的敏感数据。为了避免影响user1的正常业务须要,MaxCompute为您提供了在ProjectProtection被设置以后的两种数据导出途径。工具

方式①:
ProjectOwner设置ExceptionPolicy,针对已经开启项目数据保护的进行开例外。具体方式以下(须要经过MaxCompute console操做):大数据

SET ProjectProtection=true WITH EXCEPTION <policyFile>
这种policy不一样于Policy受权(尽管它与Policy受权语法彻底同样),它只是对项目空间保护机制的例外状况的一种描述,即全部符合policy中所描述的访问情形均可以打破ProjectProtection规则。>>>policy详细文档url

{

"Version": "1",
"Statement":
[{
    "Effect":"Allow",
    "Principal":"ALIYUN$Alice@aliyun.com",
    "Action":["odps:Select"],
    "Resource":"acs:odps:*:projects/alipay/tables/table_test",
    "Condition":{
        "StringEquals": {
            "odps:TaskType":["DT", "SQL"]
        }
    }
}]
}

ProjectProtection是一种数据流向的控制,而不是访问控制。只有在用户能访问数据的前提下,控制数据流向才是有意义的。

* 另外,能够经过show grants [for <username>] [on type <objectType>] 查看某用户权限,查看是否加例外成功。

方法②:
设置TrustedProject,若当前项目空间处于受保护状态,若是将数据流出的目标空间设置为当前空间的TrustedProject,那么向目标项目空间的数据流向将不会被视为触犯ProjectProtection规则。能够经过以下命令方式进行设置(需经过MaxCompute console进行):

list trustedprojects;
--查看当前project中的全部TrustedProjects
add trustedproject <projectname>;
--在当前project中添加一个TrustedProject
remove trustedproject <projectname>;
--在当前project中移除一个TrustedProject
2、IP白名单控制
MaxCompute支持Project级别的IP白名单。

设置IP白名单后,只有白名单列表中的IP(console或者SDK所在的出口IP)可以访问这个Project。
设置IP白名单后,您须要等待五分钟后才会生效。
切记在设置白名单的时候,加上本身当前机器IP,以避免把本身屏蔽。
setproject odps.security.ip.whitelist=101.132.236.134,100.116.0.0/16,101.132.236.134-101.132.236.144;
白名单中IP列表的表示格式有三种。

单纯IP:例如101.132.236.134。
子网掩码:100.116.0.0/16。
网段:101.132.236.134-101.132.236.144。
具体详细教程能够参考,>>>>IP白名单控制。

更精细化的管理
固然MaxCompute Policy机制也能够实现控制某个用户/或者角色的用户从具体IP地址来访问具体资源(表、UDF、资源)等。
Policy样例:

{

"Version": "1",
"Statement":
 [{
    "Effect":"Allow",
    "Principal":"ALIYUN$alice@aliyun.com",
    "Action":["odps:CreateTable","odps:CreateInstance","odps:List"],
    "Resource":"acs:odps:*:projects/prj1",
    "Condition":{
        "DateLessThan": {
            "acs:CurrentTime":"2013-11-11T23:59:59Z"
        },
        "IpAddress": {
            "acs:SourceIp":"10.32.180.0/23"
        }
    }
},
{
    "Effect":"Deny",
    "Principal":"ALIYUN$alice@aliyun.com",
    "Action":"odps:Drop",
    "Resource":"acs:odps:*:projects/prj1/tables/*"
}]
}

受权用户alice@aliyun.com只能在"2013-11-11T23:59:59Z"这个时间点以前、只能从“10.32.180.0/23”这个IP段提交请求, 只容许在项目空间prj1中执行CreateInstance, CreateTable和 List操做,禁止删除prj1下的任何table。具体能够参考Policy文档。

3、数据保护伞(数据脱敏)
数据保护伞为DataWorks的一个数据安全模块,具体能够经过点击进入进行了解,其包括数据脱敏、安全审计等。https://help.aliyun.com/docum...

能够针对敏感数据在DataWorks屏显进行加**显示,以下图所示:

图片描述

注意:数据保护伞是DataWorks的一个模块,若是使用了数据保护伞且进行了数据脱敏,可是经过console进行tunnel download仍是未脱敏状态。

4、细粒度的权限管控
一、列级别LabelSecurity访问控制
项目空间中的LabelSecurity安全机制默认是关闭的,ProjectOwner能够自行开启。

【应用场景】
场景说明:user_profile是某项目空间中的一张含有敏感数据的表,它包含有100列,其中有5列包含敏感数据:id_card, credit_card, mobile, user_addr, birthday. 当前的DAC机制中已经受权了全部用户对该表的Select操做。ProjectOwner但愿除了Admin以外,全部用户都不容许访问那5列敏感数据。

ProjectOwner操做步骤以下:

set LabelSecurity=true;
--开启LabelSecurity机制
set label 2 to table user_profile(mobile, user_addr, birthday);
--将指定列的敏感等级设置为2
set label 3 to table user_profile(id_card, credit_card);
--将指定列的敏感等级设置为3
Alice是项目空间中的一员,因为业务须要,她要申请访问user_profile的mobile列的数据,须要访问1周时间。项目空间管理员操做步骤以下:

GRANT LABEL 2 ON TABLE user_profile TO USER alice WITH EXP 7;
更多关于列级别安全控制文档:https://help.aliyun.com/docum...

二、Role Policy管理自定义Role
不少用户会由于DataWorks内置的数据开发、运维、管理员等角色不能知足其个性化需求,会基于ACL建立符合本身业务逻辑的角色如数据分析师、ETL开发等,基于这些role如何进行复杂的受权,如批量授予ods_开头的表权限,但限制条件的,以及Deny类型的角色,这个时候就须要结合Role policy来精细化管理。

一次操做对一组对象进行受权,如全部的函数、全部以”taobao”开头的表。
带限制条件的受权,如受权只会在指定的时段内才会生效、当请求者从指定的IP地址发起请求时受权才会生效、或者只容许用户使用SQL(而不容许其它类型的Task)来访问某张表。
方式①:
Policy操做代码以下所示:

get policy --读取项目空间的Policy
put policy <policyFile> --设置(覆盖)项目空间的Policy
get policy on role <roleName> --读取项目空间中某个角色的Policy
put policy <policyFile> on role <roleName> --设置(覆盖)项目空间中某个角色的Policy
更多关于Policy的介绍以及操做详见文档:http://www.aiwanba.net/plugin...

方式②:
经过DataWorks-项目管理-MaxCompute配置-自定义用户角色中进行。

图片描述

建立步骤:

【新增角色】点击新建角色,填写角色名称,勾选须要加入该角色的帐号(子帐号用户)。
图片描述

【角色受权】包括两种一个是表一个是项目。以表为例:
图片描述

选择须要受权的表,并赋予相应的操做权限,以下所示针对具体表赋予具体权限。
图片描述

说明:上述两种方式最大的区别就是,role policy能够进行批量表受权,如以taobao_开头的。可是DataWorks大的方式须要逐个表来进行筛选并配置权限。

4、JDBC 2.4(数据安全加固)
MaxCompute JDBC 2.4针对数据安全加固作了必定的挑战,具体JDBC地址:https://github.com/aliyun/ali...

在JDBC中使用数据安全加固方案具体步骤:
下载JDBC 2.4(建议)
配置jdbc url,一般以下制定Tunnel endpoint地址,如 jdbc:odps:http://service.cn.maxcompute....://dt.cn-shanghai.maxcompute.aliyun-inc.com。
具体region对应的MaxCompute Endpoint和Tunnel Endpoint能够参考文档:https://help.aliyun.com/docum...开启项目保护SET ProjectProtection=true,不须要加exception例外,具体能够想见项目保护机制章节。打开控制返回数据条数:setproject READ_TABLE_MAX_ROW=1000;基于JDBC的工具进行查询,数据返回条数会控制在1000条之内。说明:若是使用的版本小于JDBC 2.4,而且开启了项目保护那么经过JDBC方式会直接报错(无权限)。

相关文章
相关标签/搜索