一、实验概述
大数据计算服务(MaxCompute,原名 ODPS)是一种快速、完全托管的 GB/TB/PB 级数据仓库解决方案。MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。
本实验结合实际场景案例,演示如何对MaxCompute的权限及安全进行操作。
二、实验目标
本实验通过客户端方式进行实验,掌握如何对MaxCompute的权限及安全进行操作。
完成此实验后,可以掌握的能力有:
1. A用户授权给B用户;
2. 角色管理与授权;
3. 鉴权模型查看与管理;
4. 基于标签的安全控制;
5. 跨项目空间的资源分享;
6. 项目空间保护;
三、学习建议
1. 掌握如何对MaxCompute的权限及安全进行操作;
2. 提前安装 ODPS客户端(下载客户端软件)
第 1 章:实验准备
1.1 申请MaxCompute资源
在弹出的左侧栏中,点击 创建资源 按钮,开始创建实验资源。 资源创建过程需要1-3分钟。完成实验资源的创建后,用户可以通过 实验资源 查看实验中所需的资源信息,例如:阿里云账号等。
1.2 准备测试账号
该实验需要和其他同学配合完成,请找到一个可以和你互相配合的同学,下文中会提到A用户、B用户,其中A用户即为你本人使用的阿里云的账号,B用户为和你配合的同学的阿里云账号;
实验中两个账户均使用的是阿里云主账号(或者具有项目admin权限的用户),可在两台电脑中登录,亦或使用同一台电脑里两个不同的浏览器打开,或一个使用浏览器打开,另一个使用odpscmd客户端;
为方便区别相关的账号操作,下述实验过程中A账号的操作记录均采用的命令行的方式进行操作截图,账号B的操作记录均使用页面浏览器的操作截图;
实验中的配置文件、文件路径、账号、项目名称、授权表等,均需根据具体的项目进行修改。
1.3 资源环境准备
1)请点击页面左侧的实验资源,在左侧栏中,查看本次实验资源信息。如图案例:
2)点击“实验资源”,查看所需具体资源,如图案例:
3)在弹出的左侧栏中,点击 创建资源 按钮,开始创建实验资源。
注意:由于实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建
4)创建资源,如图案例:(创建资源需要几分钟时间,请耐心等候……)资源创建成功,如图案例:(注意资源中的项目名称、子用户名称、子用户密码、AK ID、AK Secret信息)
1.4 进入实验环境
1、登录控制台
1)点击“前往控制台”
注意:此实验界面为使用者提供了进入实验的用户名称,如 u-bcofvgpr 以及登录密码,请先记录下来,密码需要鼠标点击直接拷贝下来,以及使用其他工具的 AK ID 以及 AK Secret 秘钥对 ,项目名称等信息。将AK ID 和 AK Secret配置在安装的客户端的配置文件中。
2)输入用户名
3)点击下一步,输入密码:(刚才实验环境创建时所提供)
4)进入控制台界面
5) 点击 “大数据(数加)”进入大数据开发控制台
6) 点击”大数据开发套件”进入工作区界面
7)点击“进入工作区”,进入工作环境(首次进入显示每个菜单的帮助信息)
8) 点击“跳过”或逐个菜单看看,最终显示
9)点击“新建脚本”设置实验临时文件
10)设置文件名称、类型(选择ODPS SQL)、描述信息(建议非必须)、文件保存目录信息,点击“提交”进入SQL操作环境
2、配置客户端
1)如果为提前安装客户端,请参考下面网址进行安装:
(https://help.aliyun.com/document_detail/27971.html?spm=5176.doc27834.6.730.xbOX5m)
3)解压安装
4)配置客户端文件,在XXX(个人目录)\odpscmd_public\conf\,打开文件 odps_config.ini,修改配置信息;即将上述实验资源中提供的AK ID 以及 AK Secret 和项目名称分别填写在上述配置文件中,其他信息不变,如图:
5) 检查测试即通过命令行,进入\ODPS_DEMO\odpscmd_public\bin\,执行 odpscmd,进入交互界面,确认安装是否配置成功。案例如图:
执行后进入如下界面:(测试案例项目为bigdata_train)
6) 通过创建一个数据表测试:
------输入语句创建表dual
create table dual (X string);
------数据表中插入一条记录并检查
insert into table dual select count(*) from dual;
------检查插入结果
select * from dual;
1.5 安装配置最新odpscmd 客户端
步骤1:客户端介质下载 (参考地址)
https://help.aliyun.com/document_detail/27971.html?spm=5176.doc27833.2.1.b6nngs 步骤2:解压odpscmd_public.zip 到本目录,如:解压至本地目录 E:\ ODPS_DEMO \odpscmd_public
步骤3:查看本次实验课用到的介质,可以看到如下的文件夹: 步骤4:在conf文件夹中有odps_config.ini文件。编辑此文件,填写相关信息:
project_name=<自己的项目名称>
access_id=<自己的项目生成的访问ID , www.aliyun.com网站上申请到的access_id>
access_key=<自己的项目生成的访问ID的密钥信息,即 www.aliyun.com网站上申请access_key>
end_point=http://service.odps.aliyun.com/api (tunnel JAVA SDK 需要)
tunnel_endpoint=http://dt.odps.aliyun.com (tunnel JAVA SDK 需要)
log_view_host=http://logview.odps.aliyun.com (默认)
https_check=true (默认)
注意: [在申请资源部分可获取实验所需的项目名称、所需的access_id(AK ID) 、access_key(AK Secre)等信息 ] 如下图开通资源后所示:步骤5:修改好配置文件后运行bin目录下的odpscmd(在Linux系统下是./bin/odpscmd,Windows下运行./bin/odpscmd.bat),现在可以运行 MaxCompute 命令,如: 注意:项目可以随时根据情况切换,上图表示环境设置成功.
将 E:\ODPS_DEMO\odpscmd_public\bin 加入环境变量 PATH,方便通过命令行调用 odpscmd
第 2 章:实验内容
####2.1 实验:A用户授权给B用户 提示:本章节所需操作均需使用阿里云主账号或者具有项目admin权限的用户进行实验,实验环境需在各阿里云主账号对应的项目中进行。
本实验中,所使用的配置文件、文件路径、账号、项目名称、授权表等,均需根据具体的项目进行修改,如下新建的几张表主要作用于演示。
新建表:
----新建DUAL
CREATE TABLE DUAL (
ID BIGINT
);
----新建T_TEST
CREATE TABLE T_TEST (
ID STRING
);
----新建T_TUNNEL
CREATE TABLE T_TUNNEL (
ID STRING
);
----新建T_TUNNEL_P
CREATE TABLE T_TUNNEL_P (
ID STRING,
NAME STRING,
ADRESS STRING,
PHONE STRING,
EMAIL STRING
);
1、登录odpscmd客户端,查看当前项目中用户权限情况:
show grants;
2、将用户B加入到当前项目空间中来:
add user ALIYUN$huiongshan@126.com;
3、将表dual的访问权限赋予用户B:
grant select, describe on table dual to user ALIYUN$huiongshan@126.com;
4、查看B用户拥有的权限:
show grants for ALIYUN$huiongshan@126.com;
5、使用用户B去访问表 Lab_class.dual:
select * from Lab_class.dual;
6、用户A将用户B从项目中移除:
remove user ALIYUN$huiongshan@126.com;
7、使用用户B去访问表 Lab_class.dual,此时访问报错:
select * from Lab_class.dual;
8、查看B用户拥有的权限:
show grants for ALIYUN$huiongshan@126.com;
9、用户A将用户B加入到当前项目空间中来:
add user ALIYUN$huiongshan@126.com;
10、使用用户B去访问表 Lab_class.dual,成功,原有权限自动生效:
select * from Lab_class.dual;
11、用户A收回B用户对dual表的读的权限:
revoke select,describe on table dual from user ALIYUN$huiongshan@126.com;
12、再使用用户B进行查询,发现报错:
select * from Lab_class.dual;
2.2 实验:角色管理与授权
提示:本章节所需操作均需使用阿里云主账号或者具有项目admin权限的用户进行实验,实验环境需在各阿里云主账号对应的项目中进行。
1、用户A新建一个角色 reader:
create role reader;
2、用户A赋予角色reader几张表的读权限:
grant describe, select on table dual to role reader;
grant describe, select on table t_test to role reader;
3、用户A查看角色的权限:
desc role reader;
4、用户A查看B用户拥有的权限:
show grants for ALIYUN$huiongshan@126.com;
5、用户A将角色reader赋予用户B:
grant reader to ALIYUN$huiongshan@126.com;
6、用户A查看B用户拥有的权限:
show grants for ALIYUN$huiongshan@126.com;
7、用户A赋予角色reader另外几张表的读权限:
grant describe, select on table t_tunnel to role reader;
grant describe, select on table t_tunnel_p to role reader;
8、用户A查看角色的权限和使用情况:
desc role reader;
9、用户A查看B用户拥有的权限:
show grants for ALIYUN$huiongshan@126.com;
10、用户A删除角色reader(会报错,删除失败):
drop role reader;
11、用户A移除用户B(会报错,移除失败):
remove user ALIYUN$huiongshan@126.com;
12、用户A查看角色的权限和使用情况:
desc role reader;
13、用户A从用户B收回角色:
revoke reader from ALIYUN$huiongshan@126.com;
14、用户A删除角色reader:
drop role reader;
15、用户A移除用户B:
remove user ALIYUN$huiongshan@126.com;
2.3 实验:鉴权模型查看与管理
提示:本章节所需操作均需使用阿里云主账号或者具有项目admin权限的用户进行实验,实验环境需在各阿里云主账号对应的项目中进行。
1、用户A查看当前项目的鉴权模型:
show SecurityConfiguration;
2、用户A赋予用户B建表的权限:
add user ALIYUN$huiongshan@126.com;
grant createtable on project Lab_class to user ALIYUN$huiongshan@126.com;
3、用户B建表:
create table Lab_class.t_test_sg (id int);
desc Lab_class.t_test_sg;
select count(*) from Lab_class.t_test_sg;
image.png
image.png
image.png
4、用户A修改鉴权模型,将ObjectCreatorHasAccessPermission改为false:
set ObjectCreatorHasAccessPermission=false;
show SecurityConfiguration;
5、用户B访问Lab_class.t_test_sg(报错,权限不足):
desc Lab_class.t_test_sg;
select count(*) from Lab_class.t_test_sg;
image.png
image.png
6、用户B删除Lab_class.t_test_sg(报错,权限不足):
drop table Lab_class.t_test_sg;
image.png
7、用户A修改鉴权模型,将ObjectCreatorHasAccessPermission改为true:
set ObjectCreatorHasAccessPermission=true;
show SecurityConfiguration;
8、用户B访问Lab_class.t_test_sg:
desc Lab_class.t_test_sg;
select count(*) from Lab_class.t_test_sg;
image.png
image.png
9、用户B删除Lab_class.t_test_sg:
drop table Lab_class.t_test_sg;
image.png
10、用户A收回用户B建表的权限:
revoke createtable on project Lab_class from user ALIYUN$huiongshan@126.com;
remove user ALIYUN$huiongshan@126.com;
2.4 实验:基于标签的安全控制
提示:本章节所需操作均需使用阿里云主账号或者具有项目admin权限的用户进行实验,实验环境需在各阿里云主账号对应的项目中进行。
1、用户A查看当前项目的鉴权模型:
show SecurityConfiguration;
2、如果LabelSecurity的值为false,则需要将它设置成true:
set LabelSecurity=true;
3、增加用户B到当前项目Lab_class,并设置安全许可标签:
(默认安全标签为0,我们将用户B(ALIYUN$huiongshan@126.com) 安全许可标签设置为3)
add user ALIYUN$huiongshan@126.com;
set label 3 to user ALIYUN$huiongshan@126.com;
grant select,describe on table t_tunnel to user ALIYUN$huiongshan@126.com;
4、用户B此时可以访问Lab_class.t_tunnel:
select * from Lab_class.t_tunnel;
image.png
5、用户A将t_tunnel的id敏感等级提高成4:
set label 4 to table t_tunnel(id);
image.png
6、用户B此时因安全等级低,无法访问敏感等级高的数据Lab_class.t_tunnel:
select * from Lab_class.t_tunnel;
image.png
7、用户A将t_tunnel中的id字段的敏感度调整到3:
set label 3 to table t_tunnel(id);
8、用户B此时可以访问Lab_class.t_tunnel中敏感级别不大于3的列id:
select id from Lab_class.t_tunnel;
image.png
9、用户A可以设置对低权限用户B进行临时授权可以访问高敏感级别的表t_tunnel_p:
set label 3 to user ALIYUN$huiongshan@126.com;
grant select,describe on table t_tunnel_p to user ALIYUN$huiongshan@126.com;
set label 5 to table t_tunnel_p(name);
set label 4 to table t_tunnel_p (id);
grant label 4 on table t_tunnel_p to user ALIYUN$huiongshan@126.com with exp 1;
10、用户B此时可以访问Lab_class.t_tunnel_p中敏感级别不大于4的所有列:
select id from Lab_class.t_tunnel_p;
select name from Lab_class.t_tunnel_p;
image.png
image.png
11、用户A查看当前有权限访问t_tunnel_p的表的用户列表:
show label grants on table t_tunnel_p;
12、用户A查看用户B有权限访问的所有的表的列表:
show grants for ALIYUN$huiongshan@126.com;
13、用户A收回用户B权限,并从项目中移除用户B,并复原项目的鉴权模型:
revoke describe,select on table t_tunnel from user ALIYUN$huiongshan@126.com;
revoke describe,select on table t_tunnel_p from user ALIYUN$huiongshan@126.com;
remove user ALIYUN$huiongshan@126.com;
set LabelSecurity=false;
show SecurityConfiguration;
2.5 实验:跨项目空间的资源分享
提示:本章节所需操作均需使用阿里云主账号或者具有项目admin权限的用户进行实验,实验环境需在各阿里云主账号对应的项目中进行。
1、用户A创建package,并将表t_tunnel以及表t_tunnel_p的访问权限添加到该package:
create package pk_tunnel_read;
add table t_tunnel to package pk_tunnel_read with privileges select;
add table t_tunnel_p to package pk_tunnel_read with privileges describe;
2、用户A将pk_tunnel_read赋给用户B所在的项目Star_research:
allow project Star_research to install package pk_tunnel_read;
3、用户B查看所在项目空间可用的package:
show packages;
image.png
4、用户B安装pk_tunnel_read:
install package Lab_class.pk_tunnel_read;
show packages;
desc package Lab_class.pk_tunnel_read;
image.png
image.png
image.png
5、用户B访问package中包含的资源:
select * from Lab_class.t_tunnel;
desc Lab_class.t_tunnel_p;
image.png
image.png
6、用户B卸载package:
uninstall package Lab_class.pk_tunnel_read;
image.png
7、用户A删除package:
drop package pk_tunnel_read;
2.6 实验:项目空间保护
提示:本章节所需操作均需使用阿里云主账号或者具有项目admin权限的用户进行实验,实验环境需在各阿里云主账号对应的项目中进行。
1、用户A查看当前项目的鉴权模型,确认目前的ProjectProtection处于false状态:
show SecurityConfiguration;
2、增加用户B到当前项目Lab_class,并赋予表t_tunnel的读写权限:
add user ALIYUN$huiongshan@126.com;
grant all on table t_tunnel to user ALIYUN$huiongshan@126.com;
grant select on table dual to user ALIYUN$huiongshan@126.com;
3、用户B操作表t_tunnel:可以读取记录,或者插入数据
select * from Lab_class.t_tunnel;
insert into table Lab_class.t_tunnel select '1' from Lab_class.dual;
image.png
image.png
4、用户B甚至可以把表中的数据搬到本地的项目中来:
create table iris as select * from Lab_class.t_tunnel;
image.png
5、用户A为了防止数据流出,打开项目保护选项:ProjectProtection:
set ProjectProtection=true;
6、用户B对t_tunnel的操作都被禁止,需要联系Lab_class的owner:
select * from Lab_class.t_tunnel;
insert into table Lab_class.t_tunnel select '-2' from Lab_class.t_tunnel;
create table iris_again as select * from Lab_class.t_tunnel;
image.png
image.png
image.png
7、用户A为用户B设置例外:
set ProjectProtection=true with exception c:\pf_try;
其中,pf_try为一个授权策略文件(ANSI/ANSII格式),内容如下:
{
"Version": "1",
"Statement":[{
"Effect":"Allow",
"Principal":"ALIYUN$huiongshan@126.com",
"Action":["odps:Select"],
"Resource":["acs:odps:*:projects/Lab_class/tables/t_tunnel"],
"Condition":{
"StringEquals": {
"odps:TaskType":"SQL"
} }
}]
}
8、用户B可以对表Lab_class.t_tunnel进行正常操作:
select * from Lab_class.t_tunnel;
create table iris_again as select * from Lab_class.t_tunnel;
image.png
image.png
9、用户A设置无例外项目保护:
set ProjectProtection=true;
第 3 章:实验总结
3.1 实验总结
通过本次实验,了解MaxCompute的用户授权、角色管理、鉴权模型、基于标签的安全控制、项目空间资源分享、项目空间保护等配置是如何实现,熟练掌握各种权限配置的方法,在后续的工作学习中,通过已学的配置方法,可较为方便的实现资源共享。
评论