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

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

常见方案
package方案,通过打包授权进行权限精细化管控。
DataWorks上新建角色(管理>MaxCompute高级配置>自定义用户角色)来进行高级管控。
Role policy方案,通过role policy来自定义role的权限集合。
可选方案
(1)package方案,通过打包授权进行权限精细化管控。
package基本知识,通常是为了解决跨项目空间的共享数据及资源的用户授权问题。当通过package后会发现给予其DataWorks开发者角色后用户拥有了所有权限。不可控。

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

从权限配置上看明显不符合我们的要求,明显看出来其对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添加了子账号并赋予了开发者角色,具体如下:

上述的普及应该让大家明白,通过打package和DataWorks默认的角色都不能够满足我们的需求。比如我将子账号[email protected]m: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,如下:
[email protected] 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。如下:
[email protected] sz_mc>put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole;

step4:添加用户至role denyudfrole。
[email protected] sz_mc>grant denyudfrole to [email protected]:ramtest;

至此我们验证下,以子账号[email protected]:ramtest登录MaxCompute console。
1、登录console确认角色。

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

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

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

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

配置project policy
step1:编写policy。

{
"Version": "1", "Statement":"Principal":"[email protected]:yangyitest",
br/>[{
"Effect":"Allow",
"Principal":"[email protected]:yangyitest",
"Action":["odps:Read","odps:List","odps:Select"],},
{
"Effect":"Allow",
"Principal":"[email protected]:yangyitest",
br/>"Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar"
},
{
"Effect":"Allow",
"Principal":"[email protected]:yangyitest",
"Action":["odps:Read","odps:List","odps:Select"],
"Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion"
}] }
step2:设置和查看policy。
[email protected] sz_mc>put policy /Users/yangyi/Desktop/project_policy.json;

验证下:

跑一个SQL看看:

查看依赖的包:

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

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

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

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

原文地址:http://blog.51cto.com/14031893/2343457

时间: 2024-10-11 06:01:19

在DataWorks中实现指定UDF只能被指定账户访问的相关文章

Android中如何做到自定义的广播只能有指定的app接收

今天没吊事,又去面试了,具体哪家公司就不说了,因为我在之前的blog中注明了那些家公司的名字,结果人家给我私信说我泄露他们的题目,好吧,我错了...其实当我们已经在工作的时候,我们可以在空闲的时间去面一面,因为面试有很多好处的: 第一点:你知道这个公司的具体地址了,以后和朋友说的时候也是有话题的 第二点:这点很重要,看看其他公司的面试题(现在有的公司还在采用笔试题这个环节,真心无语了,题目全是从网上找的,很没有意思,所以我只要见到有笔试题的一律pass,个人感觉面到现在,阿里和滴滴还是不错的,他

C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码

本文介绍在 C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和边框宽度的二维码.网上文章大多只是简单介绍内置参数的设置,根据我的使用目的,增加了自定义目标二维码图片尺寸和白边边框.有需要的朋友们可以试一下,如有bug欢迎指正. 首先,将 ThoughtWorks.QRCode.dll 放在 bin 目录后,在页面中引用: using ThoughtWorks.QRCode.Codec; 生成二维码图片: 1 2 3 4 5 6 7 8 9 10 11 12 13 14

获取字符串中指定位置开始的指定长度的字符串,支持汉字英文混合 汉字为2字节计数

#region 函数:GetSubString() 作用:获取字符串中指定位置开始的指定长度的字符串,支持汉字英文混合 汉字为2字节计数 /// <summary> /// 获取字符串中指定位置开始的指定长度的字符串,支持汉字英文混合 汉字为2字节计数 /// </summary> /// <param name="strSub">输入中英混合字符串</param> /// <param name="start"

node-webkit中保存文件图片时如何指定保存类型

node-webkit中保存文件图片时如何指定保存类型,nw中可以用html的属性donwload属性来下载,最简单但它弹出的下载框可以重命名时把后缀去掉,用户不小心会把文件或图片后缀去掉,导致打不开文件.另外可以用input 的accept属性打开一个<input style="display:none;" id="saveImg" type="file" nwsaveas="imge.png"  accept=&qu

OpenGL中启用光照前的准备——指定法线

我们在使用光源时,除了强度和颜色之外,还需要指定光源的位置和方向,并且这些光源的位置和方向将会极大地影响场景的外观. OpenGL至少支持8种独立的光源.当我们指定一个光源时,便要告诉OpenGL这个光源的位置以及它的照射方向.光源经常向四周照射,但也可以向一个方向照射.无论在哪种情况下,对于我们所绘制的任何物体,来自任何光源的光线(除了纯粹的环境光源之外)都将根据一个角度撞击组成这个物体的多边形的表面.为了计算围绕多边形表面的着色效果,OpenGL必须能够计算光线与多边形表面之间的角度. 设想

asp.net中TextBox里面实现回车触发指定事件

原文:asp.net中TextBox里面实现回车触发指定事件 我在一个user_top用户控件里面做了个包括搜索的功能.然后再一个页面中添加这个用户控件.浏览时候在textbox里面输入搜索内容后.下意识的摁了回车.谁知道报错了.因为页面回发.我在page_load里面写了!IsPostBack{...}所以导致了未将对象引入对象实例.网上搜了下. 方法一: <asp:Panel ID="panSearch" runat="server" DefaultBut

css基础 给一个标记的后代中 指定的标签 或者指定标签的指定class名称 添加样式 (后代多级的)

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ex1: code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&

coacoapods中的podfile介绍;如何指定版本号(内容来自官方英文blog)

一个简单的podfile: pod 'AFNetworking', '~> 1.0' 版本号可以是1.0,可以是1.1,1.9,但必须小于2 -个更简单的podfile: pod 'AFNetworking', '1.0' // 版本号指定为1.0 一个更更简单的podfile: pod 'AFNetworking', // 不指定版本号,任何版本都可以 一个复杂的podfile:  platform :ios, '6.0' inhibit_all_warnings! xcodeproj 'My

SQL SERVER中XML查询:FOR XML指定PATH

SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指定PATH的XML查询. PATH參数 PATH('參数'),參数是用来重命名ROW的,ROW是默认生成的名称. select 'Hui' for xml path  结果:<row>Hui</row> select 'Hui' for xml path ('root') 结果:<