MaxCompute 项目空间内的访问控制和权限管理

项目空间内的访问控制分为以下五类:

  • 用户管理
  • ACL授权
  • Policy授权
  • 角色管理
  • 基于标签的访问控制管理

用户管理

任意非项目空间Owner用户必须被加入MaxCompute项目空间中,并被授予相对应权限,方能操作MaxCompute中的数据、作业、资源及函数。示例如下:

1

假设Alice创建一个名为WonderLand的项目,自动成为Owner。没有Alice的授权,其他任何人都无法访问WonderLand。

Alice要授权Bob允许他访问WonderLand中的一些对象,操作如下:

  1. Bob要有一个合法的云账号或者是Alice的RAM子账号。
  2. Alice要把Bob的账号加到项目中来。
  3. 赋一些对象的权限给Bob。

注意:

  • Alice要禁止Bob访问项目,则直接将他的账号从项目中移除即可。
  • Bob虽然被移除出了项目,但他之前被授予的权限仍然保留在项目中。下次一旦他被Alice加入同一个项目,原有的权限将会被自动激活

RAM子账号管理

RAM子账号分两类,每个项目有不同的RAM子账号,不同的RAM子账号访问交换空间中的内容有一定的区别。

1

场景描述是否允许
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; #对用户进行授权

权限列表如下:

对象类型支持的操作说明
projectRead查看项目空间自身(不包括项目空间的任何对象的信息,如CreateTime等)
projectWrite更新项目空间自身(不包括项目空间的任何对象的信息,如Comments)
projectList查看项目空间所有类型的对象列表
projectCreateTable在项目空间中创建Table
projectCreateInstance在项目空间中创建Instance
projectCreateFunction在项目空间中创建Function
projectCreateResource在项目空间中创建Resource
projectCreateJob在项目空间中创建Job
projectAll具备上述所有权限
TableDescribe读取Table的Metadata
TableSelect读取Table的Rows
TableAlter修改Table的Metadata
TableUpdate覆盖或添加Table的Rows
TableDrop删除Table
TableAll具备上述所有权限
FunctionRead读取
FunctionWrite更新
FunctionDelete删除
FunctionAll具备上述所有权限
Resource Instance JobRead读取
Resource Instance JobWrite更新
Resource Instance JobDelete删除
Resource Instance JobAll具备上述所有权限

授权内容

  • 表:授权的对象可以是一张表,也可以是表里面的字段(列)。
  • 函数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的区别

ACLPolicy
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考虑的范畴。

1

注意:

  • select table时才检查label。
  • 检查完label后,下面的acl、policy的权限仍需要验证。

数据的敏感等级分类

Project Owner需要定义明确的数据敏感等级和访问许可等级划分标准,默认时所有用户的访问许可等级为0级,数据安全级别默认为0级。

LabelSecurity对敏感数据的粒度可以支持列级别,管理员可以对表的任何列设置敏感度标记(Label),一张表可以由不同敏感等级的数据列构成。

1

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 ];

 

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 中间点策略_网易MySQL中间件的负载均衡策略及性能优化

团队介绍网易乐得DBA组&#xff0c;负责网易乐得电商、网易邮箱、网易技术部数据库日常运维&#xff0c;负责数据库私有云平台的开发和维护&#xff0c;负责数据库及数据库中间件Cetus的开发和测试等等。一、背景随着业务的爆发式增长&#xff0c;电商系统中的读写压力越来越高…

华为与美国公司就授权5G平台展开初期谈判;Linux 中存在严重漏洞;Microsoft 发布 Cosmos DB GA 版……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周两次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go iPhone12 概念图&#xff08…

Bellman_Ford算法总结

知识概览 Bellman_Ford算法适合解决存在负权边的最短路问题&#xff0c;时间复杂度为O(nm)。在存在负权边的最短路问题中&#xff0c;Bellman_Ford算法的效率虽然不如SPFA算法&#xff0c;但是Bellman_Ford算法能解决SPFA算法不能解决的经过不超过k条边的最短路问题。 例题展示…

java collections_扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法

作者&#xff1a;小傅哥 博客&#xff1a;https://bugstack.cn沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01; 一、前言算法是数据结构的灵魂&#xff01;好的算法搭配上合适的数据结构&#xff0c;可以让代码功能大大的提升效率。当然&#xff0c;算法学习…

如何进行MaxCompute 用户认证?

您可以通过以下两种方式进行用户认证。 检查请求Request发送者的真实身份 即请求发送后&#xff0c;参数包括用户名和密码&#xff0c;服务端会验证用户名和密码是否正确&#xff0c;以此判断Request发送者的身份是否可信。 使用此方法有可能在请求时间较长的情况下&#xf…

Linux Shell脚本专栏_MySQL数据库备份_09

文章目录一、MySQL数据库备份单循环1. 安装mysql2. 配置mysql环境变量3. 刷新环境变量4. 创建数据库和表lue5. 脚本制作6. 运行脚本7. 查看备份的sql文件7. 脚本升级动态传参8. 运行脚本9. 查看备份的sql文件二、MySQL数据库表备份多循环2.1. 脚本制作2.2. 运行脚本2.3. 指定目…

【当头棒喝】你是真的了解云计算吗?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 全球物联网观察责编 | 阿秃对于“云计算”这个名词&#xff0c;大家早已耳熟能详&#xff0c;而且出场率越来越高&#xff01;但对于很多新入行的“小白”来说&#xff0c;其中涉及的各种概念可能令人毫无头绪&#xff0c;这…

专注数据,打造阿里云Elasticsearch“一站式”数据服务体系

众所周知&#xff0c;Elasticsearch的问世使得各种结构、非结构数据得以实现实时搜索、分析的可能&#xff0c;越来越多的用户使用ES集群&#xff08;即Elasticseach集群&#xff0c;下文均简称ES集群&#xff09;实现数据的升值与挖掘。而用户在开发的过程中总是面临数据导入、…

java8 lambda maplist排序_「java8系列」流式编程Stream

前言「Java8系列」神秘的Lambda「Java8系列」神奇的函数式接口继上两篇之后&#xff0c;本文已经java8系列的第三篇了。本篇文章比较长&#xff0c;但我希望大家都能认真读完。读不完可以先收藏&#xff0c;在找时间读。没看过前两篇的可以点上边的链接看看&#xff0c;前两篇文…

Centos7 下载、安装、配置、启动部署

文章目录1. 下载tomcat2. 解压tomcat3. 重命名tomcat4. 配置tomcat环境变量5. 刷新配置文件6. 启动tomcat1. 下载tomcat wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz2. 解压tomcat [rootly-01 ~]# tar -zxf apache-tomca…

世界杯千万级直播高稳定的挑战和实践

今年夏天&#xff0c;俄罗斯世界杯召开。在刚刚落幕的重庆云栖飞天技术汇专场中&#xff0c;阿里视频云技术专家裘良科&#xff0c;就世界杯这个话题&#xff0c;跟参会嘉宾一起探讨了千万级直播高稳定的挑战和相关实践&#xff0c;本文为演讲全文。 2018年俄罗斯世界杯从6月14…

会议邀请 | 10月25日北京,首期D2iQ云原生主题论坛正式启动

在开始今天的内容之前&#xff0c;先问大家一个问题&#xff1a;云原生究竟是什么&#xff1f; 一般来说&#xff0c;“云原生”是一种构建和运行应用程序的方法&#xff0c;它利用了云计算交付模型的优势。CNCF&#xff08;云原生计算基金会&#xff09;将“云原生”定义为使…

Flutter快速上车之Widget

Flutter作为一种全新的响应式&#xff0c;跨平台&#xff0c;高性能的移动开发框架。从开源以来&#xff0c;已经得到越来越多开发者的喜爱。闲鱼是最早一批与谷歌展开合作&#xff0c;并在重要的商品详情页中使用上线的公司。一路走来&#xff0c;积累了大量的开发经验。虽然越…

Linux Shell脚本专栏_自动发布Java项目(tomcat)_10

文章目录一、需求背景及实现流程1. 需求背景2. 实现流程二、软件准备2.1. 公共工具包yum下载2.2. tomcat安装及配置2.3. maven安装及配置2.4. 安装mysql2.5. order项目配置2.6. 脚本制作2.7. 运行脚本一、需求背景及实现流程 1. 需求背景 order项目代码已经到版本仓库中&…

[Phoenix] 十、全局索引设计实践

概述 全局索引是Phoenix的重要特性&#xff0c;合理的使用二级索引能降低查询延时&#xff0c;让集群资源得以充分利用。 本文将讲述如何高效的设计和使用索引。 全局索引说明 全局索引的根本是通过单独的HBase表来存储数据表的索引数据。我们通过如下示例看索引数据和主表数…

云原生数据库崛起,阿里云POLARDB当选世界互联网领先科技成果

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 晶少责编 | 阿秃10月20日&#xff0c;在第六届世界互联网大会上&#xff0c;阿里云自研数据库POLARDB当选世界互联网领先科技成果&#xff0c;POLARDB解决了企业在云时代的数据库难题&#xff0c;帮助企业在数小时内完成上云…

gitee提交代码_git 版本控制,github和gitee

3.4 git 版本控制# 查看本地状态git status # 修改README.txt &#xff0c;添加一行,保存&#xff0c;添加到暂存区git add README.txt # 查看当前仓库某一个文件的版本git diff README.txt# 提交到本地仓库git commit README.txt -m second Commit# 查看当前仓库某一个文件版本…

IT 拉呱室 | 论我遇到的最刺激的bug【长期福利站】

戳蓝字“CSDN云计算”关注我们哦&#xff01;套路的最高境界是没有套路&#xff1a;这是一个只送福利的长期互动栏目【如果你们让我尴尬&#xff0c;我就哭给你们看】。书籍、键盘、鼠标、鼠标垫、CSDN 20周年纪念T恤、技术沙龙门票、线上公开课名额……你敢一直在&#xff0c;…

“百变”Redis带你见识不同场景下的产品技术架构

2018飞天技术汇24期-云数据库Redis产品发布会&#xff0c;由阿里云数据库技术组技术专家王欢、怀听、梁盼分别带来以“Redis全球多活产品”、“Redis混合存储产品”、“Redis多线程性能增强版”为题的演讲。本文对Redis进行了简单的介绍&#xff0c;进而针对不同的应用场景研制…

阿里云PyODPS 0.7.18发布,针对聚合函数进行优化同时新增对Python 3.7支持

近日&#xff0c;阿里云发布PyODPS 0.7.18&#xff0c;主要是针对聚合函数进行优化同时新增对Python 3.7支持。 PyODPS是MaxCompute的Python版本的SDK&#xff0c;SDK的意思非常广泛&#xff0c;辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。 PyODPS在这…