DLI自定义策略
如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)
目前华为云支持以下两种方式创建自定义策略:
- 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。
- JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
具体创建步骤请参见:创建自定义策略。本章为您介绍常用的DLI自定义策略样例。
策略字段介绍
以授权用户拥有在所有区域中所有数据库的创建表权限为例进行说明:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:database:createTable" ], "Resource": [ "dli:*:*:database:*" ] } ] }
- Version
- Effect
- Action
授权项,指对资源的具体操作权限,不超过100个,如图1所示。
- 格式为:服务名:资源类型:操作,例:dli:queue:submit_job。
- 服务名为产品名称,例如dli、evs和vpc等,服务名仅支持小写。资源类型和操作没有大小写,要求支持通配符号*,无需罗列全部授权项。
- 资源类型可以参考表4中的资源类型。
- 操作:操作以IAM服务中已经注册的action为准。
- Condition
条件键表示策略语句的 Condition 元素中的键值,分为全局级条件键和服务级条件键。
- 全局级条件键(前缀为g:)适用于所有操作。详细请参考策略语法中的条件键说明。
- 服务级条件键,仅适用于对应服务的操作。
运算符与条件键一起使用,构成完整的条件判断语句。具体内容请参考表1。
DLI通过IAM预置了一组条件键。下表显示了适用于DLI服务特定的条件键。
表1 DLI请求条件 DLI条件键
类型
运算符
描述
g:CurrentTime
全局级
Date and time
接收到鉴权请求的时间。
说明:以“ISO 8601”格式表示,例如:2012-11-11T23:59:59Z。
g:MFAPresent
全局级
Boolean
用户登录时是否使用了多因素认证。
g:UserId
全局级
String
当前登录的用户ID。
g:UserName
全局级
String
当前登录的用户名。
g:ProjectName
全局级
String
当前登录的Project。
g:DomainName
全局级
String
当前登录的Domain。
g:ResourceTag
全局级
StringEquals
资源标签键值。
- 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
edsconnections
DLI增强跨源
edsconnections.连接ID
- 特定资源:
图2 特定资源
- 所有资源: 指该服务下的所有资源
图3 所有资源
- 特定资源:
- 将上述的所有字段拼接为一个json就是一个完整的策略了,其中action和resource均可以设置多个,当然也可以通过IAM提供的可视化界面进行创建,例如:
授权用户拥有DLI服务,任意region,任意账号ID下,任意数据库的创建删除权限,任意队列的提交作业权限,任意表的删除权限。
{ "Version": "1.1", "Statement": [ { "Effect": " Allow", "Action": [ "dli:database:createDatabase", "dli:database:dropDatabase", "dli:queue:submitJob", "dli:table:dropTable" ], "Resource": [ "dli:*:*:database:*", "dli:*:*:queue:*", "dli:*:*:table:*" ] } ] }
DLI自定义策略样例
- 示例1:允许
- 授权用户拥有在所有区域中所有数据库的创建表权限。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:database:createTable" ], "Resource": [ "dli:*:*:database:*" ] } ] }
- 授权用户拥有在所在区域中数据库db中表tb中列col的查询权限。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:column:select" ], "Resource": [ "dli:xxx:*:column:databases.db.tables.tb.columns.col" ] } ] }
- 授权用户拥有在所有区域中所有数据库的创建表权限。
- 示例2:拒绝
拒绝策略需要同时配合其他策略使用,即用户需要先被授予部分操作权限策略后,才可以在权限内设置拒绝策略,否则用户无任何权限的情况下,拒绝策略无实际作用。
用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先。
- 授权用户不能创建数据库,删除数据库,提交作业(default队列除外),删除表。
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dli:database:createDatabase", "dli:database:dropDatabase", "dli:queue:submitJob", "dli:table:dropTable" ], "Resource": [ "dli:*:*:database:*", "dli:*:*:queue:*", "dli:*:*:table:*" ] } ] }
- 授权用户不能在队列名为demo的队列上提交作业。
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dli:queue:submitJob" ], "Resource": [ "dli:*:*:queue:queues.demo" ] } ] }
- 授权用户不能创建数据库,删除数据库,提交作业(default队列除外),删除表。
- 示例3:标签鉴权,指定action绑定Condition,指定g:ResourceTag的key和value。
Condition g:ResourceTag使用表示带有标签key=value的资源,并且资源操作在策略action中包含的可以鉴权通过。
key不区分大小写,并且目前不支持value的模糊匹配。{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:database:dropDatabase", "dli:table:select", "dli:database:createTable", "dli:table:dropTable" ], "Condition": { "StringEquals": { "g:ResourceTag/key": [ "value" ] } } } ] }