MaxCompute 项目空间内的访问控制和权限管理
项目空间内的访问控制分为以下五类:
- 用户管理
- 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子账号访问交换空间中的内容有一定的区别。
场景描述 | 是否允许 |
---|---|
Alice把云账号Andy加入到Project中 | 允许 |
Alice把她的子账号Tony加入到Project中 | 允许 |
Alice把Andy的子账号daniel加入到Project中 | 不允许 |
授权
授权三要素:主体(Subject)、客体(Object)和操作(Action)。
您可以通过ACL(基于对象)和Policy(基于策略)两种方法进行授权。
ACL授权
ACL授权的基本语法如下:
GRANT <privileges> ON <object> TO <subject>;
REVOKE <privileges> ON <object> FROM <subject>;
示例如下:
假设云账号用户dean@aliyun.com是新加入到项目空间WonderLand的成员。他需要提交作业、创建数据表、查看项目空间已存在的对象。管理员执行的授权操作如下:
use WonderLand; #打开WonderLand项目空间
add user ALIYUN$dean@aliyun.com; #添加用户到项目中
grant CreateInstance on project WanderLand to user ALIYUN$dean@aliyun.com; #对用户进行授权
权限列表如下:
对象类型 | 支持的操作 | 说明 |
---|---|---|
project | Read | 查看项目空间自身(不包括项目空间的任何对象的信息,如CreateTime等) |
project | Write | 更新项目空间自身(不包括项目空间的任何对象的信息,如Comments) |
project | List | 查看项目空间所有类型的对象列表 |
project | CreateTable | 在项目空间中创建Table |
project | CreateInstance | 在项目空间中创建Instance |
project | CreateFunction | 在项目空间中创建Function |
project | CreateResource | 在项目空间中创建Resource |
project | CreateJob | 在项目空间中创建Job |
project | All | 具备上述所有权限 |
Table | Describe | 读取Table的Metadata |
Table | Select | 读取Table的Rows |
Table | Alter | 修改Table的Metadata |
Table | Update | 覆盖或添加Table的Rows |
Table | Drop | 删除Table |
Table | All | 具备上述所有权限 |
Function | Read | 读取 |
Function | Write | 更新 |
Function | Delete | 删除 |
Function | All | 具备上述所有权限 |
Resource Instance Job | Read | 读取 |
Resource Instance Job | Write | 更新 |
Resource Instance Job | Delete | 删除 |
Resource Instance Job | All | 具备上述所有权限 |
授权内容
- 表:授权的对象可以是一张表,也可以是表里面的字段(列)。
- 函数UDF:指用户自定义函数。
- 资源Resource:指用户上传的各种资源文件,例如JAR包、文本文件等。
ACL授权应用场景
项目WonderLand的Owner Alice要给成员Bob授予创建表、查看项目空间内的表、提交作业、读取表userprofile的权限,操作如下:
Use wonderland; #进入项目空间
add user RAM$alice@aliyun.com:bob; #添加用户
grant list,createinstance on project wonderland to user RAM$alice@aliyun.com:bob; #进行命令授权
grant describe,select on table userprofile to RAM$alice@aliyun.com:bob; #授予读取表userprofile的权限
Bob在做数据开发的时候需要用到项目空间已经开发好的UDF getusertype,这个udf使用了资源getusertype.jar,操作如下:
grant read on function getusertype to user RAM$alice@aliyun.com:bob;
grant read on resource getusertype.jar to user RAM$alice@aliyun.com:bob;
Policy
Policy授权机制主要解决ACL授权机制无法解决的一些复杂授权场景,如下所示:
- 一次操作对一组对象进行授权,如所有的函数、所有以 “taobao” 开头的表。
- 带限制条件的授权,如授权只会在指定的时段内才会生效、当请求者从指定的IP地址发起请求时授权才会生效、或者只允许用户使用SQL(而不允许其它类型的Task)来访问某张表。
Policy有RolePolicy和ProjectPolicy两种,基本语法如下:
get policy; #读取项目空间的Policy
put policy <policy file>; #设置(覆盖)项目空间的Policy
get policy on role <role name>; #读取项目空间中某个角色的Policy
put policy <policy file> on role <role name>; #设置(覆盖)项目空间中某个角色的Policy
Policy授权应用场景
项目空间SecretGarden的Dean要让他所在的项目空间的所有成员,都可以使用项目空间里的udf、jar包、python资源,该如何授权?
use SecretGarden; #进入项目空间
put policy ./all_udfs_resources.json #上传Policy配置文件到project resource中
文件内容如下:
"Version": "1",
"Statement":
[{"Effect":"Allow","Principal":"*","Action":["odps:Read"],"Resource":"acs:odps:*:projects/SecretGarden/tables/*"
},
[{"Effect":"Allow","Principal":"*","Action":["odps:Read"],"Resource":"acs:odps:*:projects/SecretGarden/resources/*"
}]
}
ACL与Policy的区别
ACL | Policy | |
---|---|---|
Subject&Object是否必须存在 | 是 | 否 |
删除对象时,是否自动撤销相关授权 | 是 | 否 |
是否支持白名单(Allow)授权 | 是 | 是 |
是否支持黑名单(Deny)授权 | 否 | 是 |
是否支持带限制条件的授权 | 否 | 是 |
是否支持通配符(*) | 否 | 是 |
角色管理
当项目空间内用户比较多时,对用户逐个授权的管理方式会很繁琐。因此MaxCompute提供了角色管理,把一组的授权的操作对象赋予一个角色,再把此角色授权给一个用户,角色(Role)即是一组访问权限的集合。
每一个项目空间在创建时,会自动创建一个admin的角色,并且为该角色授予了确定的权限:可以访问项目空间内的所有对象、对用户或角色进行管理、对用户或角色进行授权。
与项目空间Owner相比,admin角色不能进行以下操作:
- 不能将admin权限指派给用户
- 不能设定项目空间的安全配置
- 不能修改项目空间的鉴权模型
- 不能共享资源
角色的限制:
- admin角色所对应的权限不能被修改。
- 没被使用的角色才可以被删除。
应用场景
Alice的公司有Bob、Tony、Peggy、George等更多数据开发工程师加入,Alice把员工分成不同的部门,每个部门只能访问各自工作范围内的数据。例如希望客户部只能看到customers表,仓储管理部门只能看devices表等,需进行如下操作:
create role customers_mgr;
grant describe,select on table customers to role customers_mgr;
grant customers_mgr to RAM$alice@aliyun.com:peggy;create role warehouse_mgr;
grant describe,select on table devices to role warehouse_mgr;
grant warehouse_mgr to RAM$alice@aliyun.com:george;
如果仓储管理数据团队也需要访问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基本操作
操作 | 命令 |
---|---|
打开LabelSecurity安全机制开关 | Set LabelSecurity=true/false; |
设置用户安全许可标签 | SET LABEL TO USER ; |
设置数据敏感等级标签 | SET LABEL TO TABLE tablename[(column_list)]; |
显示授权低级别用户访问高敏感数据 | GRANT LABEL ON TABLE [(column_list)] TO USER [WITH EXP ]; |
撤销显示授权 | revoke label on table [(column_list)] from user |
查看一个用户能访问哪些敏感数据集 | show label [] grants [for user ]; |
查看一个敏感数据表能被哪些用户访问 | show label [] grants on table ; |
用户对指定表上列级别的Label授权 | show label [] grants on table for user ; |
包安装者对包中敏感资源许可访问级别 | allow project to install package [using label ]; |
原文链接
本文为云栖社区原创内容,未经允许不得转载。
MaxCompute 项目空间内的访问控制和权限管理相关推荐
- Abp项目模板使用Oracle数据库包括系统权限管理
Abp项目模板使用Oracle数据库包括系统权限管理 by dacong 参考:Abp项目的创建以及Oracle的支持 aspnet-zero-core 使用MySql数据库 http://www.s ...
- 基于角色的访问控制'的权限管理的数据库的设计实现
RBAC基于角色的访问控制的权限管理系统数据库设计与实现 use [master] go -- 检查数据库 [RBAC]是否存在,如果存在则删除(只测试用,不然会丢数据.) -- Search fro ...
- 复习Java第一个项目学生信息管理系统 04(权限管理和动态挂菜单功能) python简单爬数据实例Java面试题三次握手和四次挥手生活【记录一个咸鱼大学生三个月的奋进生活】016
记录一个咸鱼大学生三个月的奋进生活016 复习Java(学生信息管理系统04权限管理和动态挂菜单功能) 改写MainFrame的构造方法 新增LoginFrame的验证登录是否成功的代码 新增Logi ...
- 完整项目基础架构精简版-实现权限管理
这个项目是一个网站或系统开发的基础代码,可以正常运行,但没有实际意义,主要是用来做为实际项目开发时的基础代码. 在做其他项目开发时可以直接将此代码复制一份进行项目业务的扩展,这样可以节约很多底层设计的 ...
- 从零搭建飞冰微前端项目《第四篇:权限管理》
- Casbin-authz-plugin:基于Casbin的Docker权限管理、访问控制插件
Docker是目前主流的一种容器技术.为了解决多用户同时访问Docker时产生的安全问题,Docker设计了访问控制插件(Authorization Plugin,见官方文档)这一机制,通过对Dock ...
- JAVAWEB开发之权限管理(一)——权限管理详解(权限管理原理以及方案)、不使用权限框架的原始授权方式详解
知识清单 1.了解基于资源的权限管理方式 2. 掌握权限数据模型 3. 掌握基于url的权限管理(不使用Shiro权限框架的情况下实现权限管理) 4. shiro实现用户认证 5. shiro实现用户 ...
- ODPS 权限管理命令集合
项目空间的安全配置 语句 说明 show SecurityConfiguration 查看项目空间的安全配置 set CheckPermissionUsingACL=true/false 激活/冻结A ...
- shiro、基于url权限管理、超详细
如果需要本篇博客内容的代码!请到我的博客下载中心去下载 https://download.csdn.net/download/qq_36125138/10719559 项目运行图: 权限管理原理知 ...
最新文章
- share extension 不显示_你所不知道的网红小酒馆Helens
- 怎么申请 bing api key
- 关于 Ruby Ruby on Rails 的一些书及论坛网站
- C#之IComparable用法,实现ListT.sort()排序
- 使用nginx cache缓存网站数据实践
- 云服务器的主机名是否可以修改??
- CVE-2017-12635+12636 复现+反弹shell
- 如何打开阿里云安全组
- h5 php 拍照上传图片,H5拍照、选择图片上传组件核心
- 摄影教学 - 城市夜景
- 在职场中Java工程师通宵都要看完这几本阿里P8小编都强烈推荐的Java电子书
- unity实现太空场景
- Android Studio代码迁移问题小汇总
- 为什么有的人明明能力没问题,却总是抓不住升职加薪的机会?
- 增大计算机字体,怎么调整电脑字体大小?
- 用python输入圆的半径、输出圆的周长_Python基础题练习(输入圆的半径计算周长面积,判断年份是否是闰年)...
- 妈,别再乱买保健品了!
- ZOJ 3591 Nim (NIM博弈+统计
- linux启动盘怎样使用,用syslinux制作U盘启动盘
- 加工中心编程技术讲座文库
热门文章
- InputStream.read()
- php使用队列_php之任务队列 并发
- 关于高速光耦6n137的使用总结_高速光耦6N137
- 50ETF期权新手的一些投资技巧
- Sql Server的Cross Apply用法
- C语言实现读者写者问题(读者优先)
- 计算机课程编程设计贪吃蛇游戏设计,c语言课程设计报告--贪吃蛇游戏系统
- 图解常用的RAID 0, RAID 1, RAID 5, RAID 10
- raid 0 raid1 raid5 raid10(0+1)的区别
- QML笔记(三)之QML中的几种布局