跨项目空间的访问控制分为以下五类:
- 跨项目空间访问
- 项目空间保护
- TrustedProject
- ExceptionPolicy
- 项目空间资源共享
跨项目空间访问
场景示例
如上图所示,有两个项目WonderLand和MiddleLand,每个项目有不同的成员,Dean用户想要访问WonderLand中的资源和表。那么面对作为非本项目团队成员Dean的访问请求,Alice应该怎么办?
常见的普通授权方式如下所示:
- 将Dean用户添加到WonderLand项目空间中。
- 对申请的对象进行用户授权。
但是,如果把其他部门的成员加入到本项目中,会存在风险。
Alice将WonderLand项目空间中的表customers的读权限赋给了Dean,假设Dean还有另外一个项目空间SecretGarden,那么Dean可以有多种方法把这张表的数据“盗走”:
-
SQL:通过执行SQL语句盗取数据。
create table SecretGarden.GotIt as select * from WonderLand.customers;
- MR:通过MR将表读出,然后写入SecretGarden中。
- 导出:通过数据导出工具,将该表数据导出。
- PAI:将数据间接导出。
- 其他…
数据保护机制
设置ProjectProtection规则:数据只能流入,不能流出。
set ProjectProtection=true;
设置后,上述的4种操作均将失效,因为它们都违反了ProjectProtection规则。
项目空间保护下的合规数据流出
经过严格审查,发现Bob将表customers导出到另一个项目空间SecretGarden是符合规定的。现在已经设置了项目保护,Alice可以通过以下两种方式,在不破坏目前保护机制的情况下,对Bob的要求予以满足。
设置例外策略。
在设置项目保护(ProjectProtection)的同时,附加一个例外策略(exception):
set ProjectProtection=true with exception bob_policy.JSON;
项目互信。
若当前项目空间处于受保护状态,如果将数据流出的目标空间设置为当前空间的TrustedProject,那么向目标项目空间的数据流向将不会被视为触犯ProjectProtection规则。如果多个项目空间之间两两互相设置为TrustedProject,那么这些项目空间就形成了一个TrustedProject Group,数据可以在这个Project Group内流动,但禁止流出到Project Group之外。
list trustedprojects; --查看当前project中的所有TrustedProjects
add trustedproject <projectname>; --在当前project中添加一个
TrustedProject,此处为SecretGarden
remove trustedproject <projectname>; --在当前project中移除一个TrustedProject
资源共享Package
Package是一种跨项目空间共享数据及资源的机制,主要用于解决跨项目空间的用户授权问题。
如果不使用Package,对于下面的场景我们无法有效解决。
Alifinance项目空间的成员若要访问Alipay项目空间的数据, 则需要Alipay项目空间管理员执行繁琐的授权操作:首先需要将Alifiance项目空间中的用户添加到Alipay项目空间中,再分别对这些新加入的用户进行普通授权。实际上,Alipay项目空间管理员并不期望对Alifiance项目空间中的每个用户都进行授权管理, 而更期望有一种机制能使得Alifiance项目空间管理员能对许可的对象进行自主授权控制。
使用Package之后,Alipay项目空间管理员可以对Alifinance需要使用的对象进行打包授权(也就是创建一个Package), 然后许可Alifinance项目空间可以安装这个Package。在Alifinance项目空间管理员安装Package之后, 就可以自行管理Package是否需要进一步授权给自己Project下的用户。
创建者的基本操作
操作 | 命令 |
---|---|
创建package | CREATE PACKAGE ; |
删除package | DROP PACKAGE ; |
添加想要分享的资源到package | ADD TO PACKAGE [with privileges privileges]; |
从package中去掉分享的对象 | REMOVE FROM PACKAGE ; |
允许其他项目空间使用此 package | ALLOW PROJECT TO INSTALL PACKAGE [USING LABEL ]; |
撤销项目空间对该package的使用许可 | DISALLOW PROJECT TO INSTALL PACKAGE ; |
查看已安装的package | SHOW PACKAGE; |
查看package的详细信息 | DESCRIBE PACKAGE ; |
使用者的基本操作
操作 | 命令 |
---|---|
安装package | INSTALL PACKAGE ; |
卸载package | UNINSTALL PACKAGE ; |
查看已安装的package | SHOW PACKAGES; |
查看package的详细信息 | DESCRIBE PACKAGE ; |
被安装的Package是独立的MaxCompute对象类型。如果要访问Package中的资源(即其他项目空间分享的资源),必须拥有对该Package的Read权限。如果请求者没有Read权限,则需要向ProjectOwner或Admin申请。ProjectOwner或Admin可以通过ACL授权或Policy授权机制来完成。
Dean安装来自项目空间WonderLand的包pkg_wl并授权给Emma,执行命令如下:
INSTALL PACKAGE WonderLand.pkg_wl;
GRANT READ ON PACKAGE WonderLand.pkg_wl TO USER RAM$dean@aliyun.com:emma;
项目空间的安全配置—鉴权配置
您可通过设置下列参数来定制项目空间的鉴权模型。
参数 | 说明 |
---|---|
CheckPermissionUsingACL | 激活/冻结ACL授权机制,默认为true |
CheckPermissionUsingPolicy | 激活/冻结Policy授权机制,默认为true |
ObjectCreatorHasAccessPermission | 允许/禁止对象创建者默认拥有访问权限,默认为true |
ObjectCreatorHasGrantPermission | 允许/禁止对象创建者默认拥有授权权限,默认为true |
LabelSecurity | 开启/关闭LabelSecurity安全策略,默认为false |
ProjectProtection | 开启/关闭项目空间的数据保护机制,默认false |
您可执行下述语句查看当前鉴权模型。
show SecurityConfiguration;