天天看点

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

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

  • 跨项目空间访问
  • 项目空间保护
  • TrustedProject
  • ExceptionPolicy
  • 项目空间资源共享

场景示例

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

如上图所示,有两个项目WonderLand和MiddleLand,每个项目有不同的成员,Dean用户想要访问WonderLand中的资源和表。那么面对作为非本项目团队成员Dean的访问请求,Alice应该怎么办?

常见的普通授权方式如下所示:

  1. 将Dean用户添加到WonderLand项目空间中。
  2. 对申请的对象进行用户授权。

但是,如果把其他部门的成员加入到本项目中,会存在风险。

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;           
MaxCompute 跨项目空间的访问控制和权限管理

项目互信。

若当前项目空间处于受保护状态,如果将数据流出的目标空间设置为当前空间的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下的用户。

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

创建者的基本操作

操作 命令
创建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 ;
SHOW PACKAGES;

被安装的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 [email protected]:emma;           

项目空间的安全配置—鉴权配置

您可通过设置下列参数来定制项目空间的鉴权模型。

参数 说明
CheckPermissionUsingACL 激活/冻结ACL授权机制,默认为true
CheckPermissionUsingPolicy 激活/冻结Policy授权机制,默认为true
ObjectCreatorHasAccessPermission 允许/禁止对象创建者默认拥有访问权限,默认为true
ObjectCreatorHasGrantPermission 允许/禁止对象创建者默认拥有授权权限,默认为true
LabelSecurity 开启/关闭LabelSecurity安全策略,默认为false
ProjectProtection 开启/关闭项目空间的数据保护机制,默认false

您可执行下述语句查看当前鉴权模型。

show SecurityConfiguration;           

继续阅读