如何在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)