如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。
目前天翼云支持以下两种方式创建自定义策略:
- 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。
- JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
本章为您介绍常用的DLI自定义策略样例。
策略字段介绍
以授权用户拥有在所有区域中所有数据库的创建表权限为例进行说明:
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dli:database:createTable"
],
"Resource": [
"dli:*:*:database:*"
]
}
]
}
- Version
版本信息,1.1: 策略。IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。
- Effect
作用。包含两类:允许(Allow)和拒绝(Deny),既有Allow又有Deny的授权语句时,遵循Deny优先的原则。
- Action
授权项,指对资源的具体操作权限,不超过100个。
说明
格式为:服务名:资源类型:操作,例:dli:queue:submit_job。
服务名为产品名称,例如dli、evs和vpc等,服务名仅支持小写。资源类型和操作没有大小写,要求支持通配符号*,无需罗列全部授权项。
资源类型可以参考下表“DLI的指定资源与对应路径”中的资源类型。
操作:操作以IAM服务中已经注册的action为准。
限制条件:使策略生效的特定条件,包括条件键和运算符。
条件键表示策略语句的Condition 元素中的键值,分为全局级条件键和服务级条件键。
−全局级条件键(前缀为g:)适用于所有操作。
−服务级条件键(前缀为服务缩写,如dli:,目前DLI未提供服务级条件键)仅适用于对应服务的操作。
运算符与条件键一起使用,构成完整的条件判断语句。具体内容请参考下表“DLI请求条件”。
DLI通过IAM预置了一组条件键。下表显示了适用于DLI服务特定的条件键。
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。 |
- Resource
格式为:服务名:region:domainId:资源类型:资源路径, 通配符号*表示所有,资源路径可以参考下表“DLI的指定资源与对应路径”。
示例:
"dli :* :* : queue : *": 表示所有的队列。
创建DLI自定义策略
用户可以根据场景设置不同级别的Action和Resource。
1.定义Action
Action由服务名:资源类型:操作三段组成,通配符为*。例如:
Action
Action 说明 dli:queue:submit_job DLI队列的提交操作
dli:queue:*
DLI队列的全部操作
dli:*:*
DLI所有资源类型的所有操作
2.定义Resource
Resource由 <服务名:region:domainId:表“DLI的指定资源与对应路径” >5个字段组成,通配符号*表示所有资源。5个字段可以灵活设置,资源路径可以按照场景需要,设置不同级别的权限控制。当需要设置该服务下的所有资源时,可以不指定该字段。Resource定义请参考下表“Resource”。Resource中的资源类型和资源路径请参考下表“DLI的指定资源与对应路径”。
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作业。 |
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 |
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:*:*: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"
]
}
]
}