在DataWorks中实现指定UDF只能被指定账户访问

简介: 在DataWorks中实现指定资源只能被指定账户访问,适用于简单模式。

在DataWorks中实现指定资源被指定账户访问

背景

之前写过一篇文章是关于“DataWorks和MaxCompute内部权限体系的区别”有兴趣的朋友可以点击阅读查看详情。但是还是有些同学会问,我如何在DataWorks中实现我的具体某个Resource,Table还是UDF只能被我指定的用户所使用的权限管控。这个UDF可能涉及到数据的加解密算法,属于数据安全管控范围了。

常见方案

  1. package方案,通过打包授权进行权限精细化管控。
  2. DataWorks上新建角色(管理>MaxCompute高级配置>自定义用户角色)来进行高级管控。
  3. Role policy方案,通过role policy来自定义role的权限集合。

可选方案

(1)package方案,通过打包授权进行权限精细化管控。
package基本知识,通常是为了解决跨项目空间的共享数据及资源的用户授权问题。当通过package后会发现给予其DataWorks开发者角色后用户拥有了所有权限。不可控。

  • 首先,普及大家熟知的DataWorks开发者角色的权限如下:

image

从权限配置上看明显不符合我们的要求,明显看出来其对project中的package、functions、resources和table默认有全部权限。
A projects/sz_mc/packages/*: *
A projects/sz_mc/registration/functions/*: *
A projects/sz_mc/resources/*: *
A projects/sz_mc/tables/*: *

  • 其次,通过DataWorks添加了子账号并赋予了开发者角色,具体如下:

image

上述的普及应该让大家明白,通过打package和DataWorks默认的角色都不能够满足我们的需求。比如我将子账号RAM$yangyi.pt@aliyun-test.com:ramtest并给予开发者角色,那么他就默认拥有这个当前项目里所有Object的所有action权限,具体详见

(2)DataWorks上新建角色(管理>MaxCompute高级配置>自定义用户角色)来进行高级管控。但是在DataWorks-MaxCompute高级配置中只能针对某个表/某个项目进行授权,不能对resource和udf进行授权。

(3)role policy方案,通过policy可以精细化的管理到具体用户针对具体资源的具体权限粒度,可以满足我们的场景需求。但是policy机制的官方文档一直没有公开,主要考虑到用户是否熟悉policy否则使用起来会造成一定的困扰和问题,耽误开发效率。

Role policy方案

为了安全起见,建议初学者找个测试项目来验证policy。以下操作都是通过MaxCompute console完成,具体详见:console配置

① 创建默认拒绝访问UDF角色

step1:创建一个role  denyudfrole,如下:
odps@ sz_mc>create role denyudfrole;

step2:创建policy授权文件,如下:

{
"Version": "1", "Statement":

[{
"Effect":"Deny",
"Action":["odps:Read","odps:List"],
"Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar"
},
{
"Effect":"Deny",
"Action":["odps:Read","odps:List"],
"Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion"
}
 ] }

step3:设置和查看role policy。如下:
odps@ sz_mc>put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole;

image

step4:添加用户至role denyudfrole。
odps@ sz_mc>grant denyudfrole to RAM$yangyi.pt@aliyun-test.com:ramtest;

至此我们验证下,以子账号RAM$yangyi.pt@aliyun-test.com:ramtest登录MaxCompute console。
1、登录console确认角色。

image

2、show grants查看当前登录用户权限。

image

可以看出来,该RAM子账号有两个角色,一个是role_project_dev其实就是DataWorks默认的开发者角色,一个是我们刚自定义创建的denyudfrole。

3、验证自建UDF以及依赖的包的权限。

image

image

验证成功,该子账号在拥有了DataWorks开发者角色的前提下并没有自建UDF:getregion的读权限。但是离我们期望只能指定某个用户来访问该UDF还差最后一步。需要结合project policy来解决此需求。

配置project policy

step1:编写policy。

{
"Version": "1", "Statement":
[{
"Effect":"Allow",
"Principal":"RAM$yangyi.pt@aliyun-test.com:yangyitest",
"Action":["odps:Read","odps:List","odps:Select"],
"Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar"
},
{
"Effect":"Allow",
 "Principal":"RAM$yangyi.pt@aliyun-test.com:yangyitest",
"Action":["odps:Read","odps:List","odps:Select"],
"Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion"
}] }

step2:设置和查看policy。
odps@ sz_mc>put policy /Users/yangyi/Desktop/project_policy.json;

image

验证下:

image

跑一个SQL看看:

image

查看依赖的包:

image

--->到此为止,我们完成了需求。指定项目下只有指定的RAM子账号能够访问指定的UDF和依赖的包。

总结

有些同学到这里可能清晰的认识了DataWorks和MaxCompute的安全体系,但是有些同学可能还比较晕。总结如下:

  1. 不想其访问具体资源的,在DataWorks中添加数据开发者权限后再在MaxCompute console上按照role policy配置为拒绝访问权限。
  2. 指定账户访问资源的,在DataWorks配置数据数据开发者权限后再再MaxCompute console上按照project policy配置为允许访问权限。
  3. 具体实例详见上述,可以满足我们的精细化管理需求。

image

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标  通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群  企业数据仓库开发人员  大数据平台开发人员  数据分析师  大数据运维人员  对于大数据平台、数据中台产品感兴趣的开发者
目录
相关文章
|
SQL DataWorks
【DataWorks】【odpsSQL格式化】使用快捷键快速实现代码左对齐
【DataWorks】【odpsSQL格式化】使用快捷键快速实现代码左对齐
2288 0
|
6月前
|
DataWorks API 开发者
DataWorks中,通常不建议直接在开发环境中访问生产环境的数据
DataWorks中,通常不建议直接在开发环境中访问生产环境的数据
32 3
|
7月前
|
DataWorks 关系型数据库 数据库
DataWorks试用账户 怎么创建RDS实例?
DataWorks试用账户 怎么创建RDS实例?
104 1
|
编解码 弹性计算 DataWorks
Dataworks实现邮件外发
Dataworks实现邮件外发
Dataworks实现邮件外发
|
SQL DataWorks Java
DataWorks_数据服务_高级sql mybatis标签实现“可选”
DataWorks数据服务高级sql mybatis标签实现“可选”。
384 0
DataWorks_数据服务_高级sql mybatis标签实现“可选”
|
分布式计算 DataWorks BI
DataWorks OpenAPI实现数据资产分布和排行分析
3.1 资产总览: odps项目数量, 表数量,分区表数量,表总大小 3.2 资产分布 按工作空间划分、按所有者划分 3.2(b) 资产分布 按工作空间(名称)划分、按所有者(nick)划分
1944 0
DataWorks OpenAPI实现数据资产分布和排行分析
|
存储 DataWorks 算法
依赖DataWorks OpenAPI补数据实现圈人
从2020年10月份起DataWorks为企业版提供了API的能力,我们可以根据现有的API能力打通应用与离线数据加工,从而让大数据能直接为在线应用服务,本篇文章使用圈人功能做一个简单的介绍实现;
1962 0
依赖DataWorks OpenAPI补数据实现圈人
|
SQL 分布式计算 DataWorks
ODPS Python3开发UDF实践 dataworks平台
# 业务背景 花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息. 用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着. 业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营 # 解决思路 这个问题有两个解法 #### 1. ODPS SQL解法 每月月末跑一个数, 统计本月用户
4330 0
ODPS Python3开发UDF实践 dataworks平台
|
分布式计算 运维 DataWorks
阿里云Dataworks数据集成工具实现:OTS -> Maxcompute数据同步
数据集成主要用于离线(批量)数据同步。离线(批量)的数据通道通过定义数据来源和去向的数据源和数据集,提供一套抽象化的数据抽取插件(Reader)、数据写入插件(Writer),并基于此框架设计一套简化版的中间数据传输格式,从而实现任意结构化、半结构化数据源之间数据传输。结合用户在使用OTS数据源同步的时候容易出现问题,这里演示:OTS数据源同步数据到Maxcompute的具体实现步骤。
1327 0
阿里云Dataworks数据集成工具实现:OTS -> Maxcompute数据同步
|
分布式计算 DataWorks MaxCompute