如何在IAM自定义DLI细粒度策略
1 概述
DLI在服务本身维护一套完善的权限控制的同时,还支持通过统一身份认证服务细粒度鉴权,通过创建策略来管理DLI的权限,并且随着不断完善,细粒度鉴权会逐渐和DLI服务本身的权限管控同步。
2 权限分类
目前DLI有权限控制的资源如下,详细信息可以参考DLI用户指南权限管理https://support.huaweicloud.com/usermanual-dli/dli_01_0440.html:
资源名称  | 
   资源类型  | 
   权限大类  | 
   权限小类  | 
   资源路径  | 
  
DLI队列  | 
   queue  | 
   队列权限  | 
   队列管理权限  | 
   queues.queuename  | 
  
队列使用权限  | 
  ||||
DLI数据库  | 
   database  | 
   数据权限  | 
   数据库权限  | 
   databases.dbname  | 
  
DLI表  | 
   table  | 
   表权限  | 
   databases.dbname.tables.tbname  | 
  |
DLI列  | 
   column  | 
   列权限  | 
   databases.dbname.tables.tbname.columns.colname  | 
  |
DLI作业  | 
   jobs  | 
   作业权限  | 
   Flink作业  | 
   jobs.flink.jobId  | 
  
DLI程序包  | 
   resource  | 
   程序包权限  | 
   程序包权限  | 
   resources.resourcename  | 
  
group  | 
   程序包组权限  | 
   groups.groupname  | 
  ||
DLI跨源认证信息  | 
   datasourceauth  | 
   跨源认证权限  | 
   跨源认证权限  | 
   datasourceauth.name  | 
  
3 创建策略
3.1 策略字段介绍

3.1.1 Version
版本信息,1.1: 策略。IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。
3.1.2 Effect
作用。包含两种:允许(Allow)和拒绝(Deny),既有Allow又有Deny的授权语句时,遵循Deny优先的原则。
3.1.3 Action
授权项,指对资源的具体操作权限,不超过100个。
说明:
· 格式为:服务名:资源类型:操作,例:dli:queue:submit_job。
· 服务名为产品名称,例如dli、evs和vpc等,服务名仅支持小写。 资源类型和操作没有大小写,要求支持通配符号*,无需罗列全部授权项
· 资源类型可以参考2.2表中的资源类型
· 操作:操作以IAM服务中已经注册的action为准

3.1.4 Condition
限制条件:使策略生效的特定条件,包括条件键和运算符。条件键表示策略语句的 Condition 元素中的键值,分为全局级条件键和服务级条件键(由云服务定义,请参见云服务帮助中心)。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如dli:,目前DLI未提供服务级条件键)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。
3.1.5 Resource
格式为:服务名:region:domainId:资源类型:资源路径, 通配符号*表示所有,资源路径可以参考2.2表资源路径。
示例:
"dli:*:*:queue:*": 表示所有的队列。
3.2 创建DLI自定义策略
从上述策略字段介绍中,可以看出action和resource都可以根据场景需要自己进行不同级别的设置。
3.2.1 定义Action
Action由服务名:资源类型:操作三段组成,通配符为*。操作信息可以参考:https://support.huaweicloud.com/usermanual-dli/dli_01_0441.html。
示例如下:
dli:queue:submit_job  | 
   DLI队列的提交操作  | 
  
dli:queue:*  | 
   DLI队列的全部操作  | 
  
dli:*:*  | 
   DLI所有资源类型的所有操作  | 
  
3.2.2 定义Resource
Resource由<服务名:region:domainId:资源类型:资源路径>5段组成, 通配符号*表示所有。5个字段可以灵活的设置,资源路径可以按照场景需要,设置不同级别的权限控制,DLI资源路径和资源类型可以参考2.2表资源路径。当需要设置该服务下所有资源时,可以不指定该字段。
示例如下:
DLI:*:*:database:databases.dbname.tables.*  | 
   DLI服务,任意region,任意账号ID下,数据库名为dbname下的所有表资源。  | 
  
DLI:*:*:database:databases.dbname  | 
   DLI服务,任意region,任意账号ID下,数据库名为dbname的队列。  | 
  
DLI:cn-north-1:xxx:database:databases.db.tables.tb.columns.col  | 
   DLI服务,cn-north-1,账号ID为xxx,数据库名为db,表名为tb,列名为col的资源。  | 
  
DLI:*:*:database:queues.*  | 
   DLI服务,任意region,任意账号ID下,任意队列资源。  | 
  
DLI:*:*:jobs:jobs.flink.1  | 
   DLI服务,任意region,任意账号ID下,作业Id为1的flink作业。  | 
  

· 所有资源: 指该服务下的所有资源

将上述的所有字段拼接为一个json就是一个完整的策略了,其中action和resource均可以设置多个,当然也可以通过IAM提供的可视化界面创建,示例如下:
授权用户拥有DLI服务,任意region,任意账号ID下,任意数据库的创建删除权限,任意队列的提交作业权限,任意表的删除权限  | 
  
{ "Version": "1.1", "Statement": [ { "Effect": " Allow", "Action": [ "dli:database:create_database", "dli:database:drop_database", "dli:queue:submit_job", "dli:table:drop_table" ], "Resource": [ "dli:*:*:database:*", "dli:*:*:queue:*", "dli:*:*:table:*" ] } ] }  | 
  
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)