摘要: 本文将为您介绍项目空间内的访问控制和权限管理。
项目空间内的访问控制分为以下五类:
用户管理
ACL授权
Policy授权
角色管理
基于标签的访问控制管理
用户管理
任意非项目空间Owner用户必须被加入MaxCompute项目空间中,并被授予相对应权限,方能操作MaxCompute中的数据、作业、资源及函数。示例如下:
假设Alice创建一个名为WonderLand的项目,自动成为Owner。没有Alice的授权,其他任何人都无法访问WonderLand。
Alice要授权Bob允许他访问WonderLand中的一些对象,操作如下:
Bob要有一个合法的云账号或者是Alice的RAM子账号。
Alice要把Bob的账号加到项目中来。
赋一些对象的权限给Bob。
注意:
Alice要禁止Bob访问项目,则直接将他的账号从项目中移除即可。
Bob虽然被移除出了项目,但他之前被授予的权限仍然保留在项目中。下次一旦他被Alice加入同一个项目,原有的权限将会被自动激活。
RAM子账号管理
RAM子账号分两类,每个项目有不同的RAM子账号,不同的RAM子账号访问交换空间中的内容有一定的区别。
授权
授权三要素:主体(Subject)、客体(Object)和操作(Action)。
您可以通过ACL(基于对象)和Policy(基于策略)两种方法进行授权。
ACL授权
ACL授权的基本语法如下:
GRANT <privileges> ON <object> TO <subject>;
REVOKE <privileges> ON <object> FROM <subject>;br/>示例如下:
假设云账号用户[email protected]是新加入到项目空间WonderLand的成员。他需要提交作业、创建数据表、查看项目空间已存在的对象。管理员执行的授权操作如下:
权限列表如下:
授权内容
表:授权的对象可以是一张表,也可以是表里面的字段(列)。
函数UDF:指用户自定义函数。
资源Resource:指用户上传的各种资源文件,例如JAR包、文本文件等。
ACL授权应用场景
项目WonderLand的Owner Alice要给成员Bob授予创建表、查看项目空间内的表、提交作业、读取表userprofile的权限,操作如下:
Bob在做数据开发的时候需要用到项目空间已经开发好的UDF getusertype,这个udf使用了资源getusertype.jar,操作如下:
Policy
Policy授权机制主要解决ACL授权机制无法解决的一些复杂授权场景,如下所示:
一次操作对一组对象进行授权,如所有的函数、所有以 “taobao” 开头的表。
带限制条件的授权,如授权只会在指定的时段内才会生效、当请求者从指定的IP地址发起请求时授权才会生效、或者只允许用户使用SQL(而不允许其它类型的Task)来访问某张表。
Policy有RolePolicy和ProjectPolicy两种,基本语法如下:
项目空间SecretGarden的Dean要让他所在的项目空间的所有成员,都可以使用项目空间里的udf、jar包、python资源,该如何授权?
文件内容如下:
ACL与Policy的区别
角色管理
当项目空间内用户比较多时,对用户逐个授权的管理方式会很繁琐。因此MaxCompute提供了角色管理,把一组的授权的操作对象赋予一个角色,再把此角色授权给一个用户,角色(Role)即是一组访问权限的集合。
每一个项目空间在创建时,会自动创建一个admin的角色,并且为该角色授予了确定的权限:可以访问项目空间内的所有对象、对用户或角色进行管理、对用户或角色进行授权。
与项目空间Owner相比,admin角色不能进行以下操作:
不能将admin权限指派给用户
不能设定项目空间的安全配置
不能修改项目空间的鉴权模型
不能共享资源
角色的限制:
admin角色所对应的权限不能被修改。
没被使用的角色才可以被删除。
应用场景
Alice的公司有Bob、Tony、Peggy、George等更多数据开发工程师加入,Alice把员工分成不同的部门,每个部门只能访问各自工作范围内的数据。例如希望客户部只能看到customers表,仓储管理部门只能看devices表等,需进行如下操作:
如果仓储管理数据团队也需要访问customers表,则执行下述命令:
grant describe,select on table customers to role warehouse_mgr;
查看权限
MaxCompute支持查看指定用户的权限、查看指定角色的权限、以及查看指定对象的授权列表。
查看指定用户的权限:
show grants;
show grants for <username>;
查看指定角色的权限:
describe role <rolename>;
查看指定对象的授权列表:
show acl for <objectName> [on type <objectType>];
基于标签的访问控制
ACL和Policy是数据库比较常见的权限管理模型,MaxCompute除此之外还提供了基于标签的访问控制。它是项目空间级别的一种强制访问控制策略(Mandatory Access Control, MAC),它的引入是为了让项目空间管理员能更加灵活地控制用户对列级别敏感数据的访问。
例如对于一个国家来说(类比MaxCompute的一个项目空间),这个国家公民要想开车(类比读数据操作),必须先申请获得驾照(类比申请SELECT权限)。这些就属于DAC考虑的范畴。
但由于这个国家交通事故率一直居高不下,于是该国新增了一条法律:禁止酒驾。此后,所有想开车的人除了持有驾照之外,还必须不能喝酒。类比MaxCompute,这个禁止酒驾就相当于禁止读取敏感度高的数据。这就属于MAC考虑的范畴。
注意:
select table时才检查label。
检查完label后,下面的acl、policy的权限仍需要验证。
数据的敏感等级分类
Project Owner需要定义明确的数据敏感等级和访问许可等级划分标准,默认时所有用户的访问许可等级为0级,数据安全级别默认为0级。
LabelSecurity对敏感数据的粒度可以支持列级别,管理员可以对表的任何列设置敏感度标记(Label),一张表可以由不同敏感等级的数据列构成。
LabelSecurity基本操作
本文为云栖社区原创内容,未经允许不得转载。
原文地址:http://blog.51cto.com/13952056/2171223