DLI自定义策略
如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考《数据湖探索API参考》中的“权限策略和授权项”。
目前云支持以下两种方式创建自定义策略:
- 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。
- JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
本章为您介绍常用的DLI自定义策略样例。
策略字段介绍
以授权用户拥有在所有区域中所有数据库的创建表权限为例进行说明:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:database:create_table" ], "Resource": [ "dli:*:*:database:*" ] } ] }
- Version
- Effect
- Action
- 格式为:服务名:资源类型:操作,例:dli:queue:submit_job。
- 服务名为产品名称,例如dli、evs和vpc等,服务名仅支持小写。资源类型和操作没有大小写,要求支持通配符号*,无需罗列全部授权项。
- 资源类型可以参考表4中的资源类型。
- 操作:操作以IAM服务中已经注册的action为准。
- Condition
条件键表示策略语句的 Condition 元素中的键值,分为全局级条件键和服务级条件键。
- 全局级条件键(前缀为g:)适用于所有操作。详细请参考策略语法中的条件键说明。
- 服务级条件键(前缀为服务缩写,如dli:,目前DLI未提供服务级条件键)仅适用于对应服务的操作。
运算符与条件键一起使用,构成完整的条件判断语句。具体内容请参考表1。
DLI通过IAM预置了一组条件键。下表显示了适用于DLI服务特定的条件键。
- Resource
格式为:服务名:region:domainId:资源类型:资源路径, 通配符号*表示所有,资源类型和资源路径可以参考表4。
示例:
"dli:*:*:queue:*": 表示所有的队列。
创建DLI自定义策略
用户可以根据场景设置不同级别的Action和Resource。
- 定义Action
Action由服务名:资源类型:操作三段组成,通配符为*。例如:
表2 Action Action
说明
dli:queue:submit_job
DLI队列的提交操作
dli:queue:*
DLI队列的全部操作
dli:*:*
DLI所有资源类型的所有操作
更多操作与系统权限的关系请参考常用操作与系统权限关系。
- 定义Resource
Resource由<服务名:region:domainId:资源类型:资源路径>5个字段组成,通配符号*表示所有资源。5个字段可以灵活设置,资源路径可以按照场景需要,设置不同级别的权限控制。当需要设置该服务下的所有资源时,可以不指定该字段。Resource定义请参考表3。Resource中的资源类型和资源路径请参考表4。
表3 Resource Resource
说明
DLI:*:*:table:databases.dbname.tables.*
DLI服务,任意region,任意帐号ID下,数据库名为dbname下的所有表资源。
DLI:*:*:database:databases.dbname
DLI服务,任意region,任意帐号ID下,数据库名为dbname的队列。
DLI:*:*:queue:queues.*
DLI服务,任意region,任意帐号ID下,任意队列资源。
DLI:*:*:jobs:jobs.flink.1
DLI服务,任意region,任意帐号ID下,作业Id为1的flink作业。
表4 DLI的指定资源与对应路径 资源类型
资源名称
资源路径
queue
DLI队列
queues.queuename
database
DLI数据库
databases.dbname
table
DLI表
databases.dbname.tables.tbname
column
DLI列
databases.dbname.tables.tbname.columns.colname
jobs
DLI Flink作业
jobs.flink.jobid
resource
DLI程序包
resources.resourcename
group
DLI程序包组
groups.groupname
datasourceauth
DLI跨源认证信息
datasourceauth.name
- 将上述的所有字段拼接为一个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:*" ] } ] }
DLI自定义策略样例
- 示例1:允许
- 授权用户拥有在所有区域中所有数据库的创建表权限
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:database:create_table" ], "Resource": [ "dli:*:*:database:*" ] } ] }
- 授权用户拥有在数据库db中表tb中列col的查询权限
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:column:select" ], "Resource": [ "dli:*:*:column:databases.db.tables.tb.columns.col" ] } ] }
- 授权用户拥有在所有区域中所有数据库的创建表权限
- 示例2:拒绝
拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先。
- 授权用户不能创建数据库,删除数据库,提交作业(default队列除外),删除表
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dli:database:create_database", "dli:database:drop_database", "dli:queue:submit_job", "dli:table:drop_table" ], "Resource": [ "dli:*:*:database:*", "dli:*:*:queue:*", "dli:*:*:table:*" ] } ] }
- 授权用户不能在队列名为demo的队列上提交作业
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dli:queue:submit_job" ], "Resource": [ "dli:*:*:queue:queues.demo" ] } ] }
- 授权用户不能创建数据库,删除数据库,提交作业(default队列除外),删除表