通过IAM角色或策略授予使用DLI的权限
如果您需要对您所拥有的DLI进行角色与策略的权限管理,您可以使用统一身份认证服务(Identity and Access Management,简称IAM),通过IAM,您可以:
- 根据企业的业务组织,在您的账号中,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证,并使用DLI资源。
- 根据企业用户的职能,设置不同的访问权限,以达到用户之间的权限隔离。
- 将DLI资源委托给更专业、高效的其他账号或者云服务,这些账号或者云服务可以根据权限进行代运维。
如果账号已经能满足您的要求,不需要创建独立的IAM用户,您可以跳过本章节,不影响您使用DLI服务的其它功能。
本章节为您介绍使用角色与策略的授权方法,操作流程如示例流程所示。
前提条件
给用户组授权之前,请您了解用户组可以添加的DLI权限,并结合实际需求进行选择。
DLI支持的系统权限,请参见角色与策略权限管理。
如果您需要对除DLI之外的其他服务授权,IAM支持服务的所有权限请参见系统权限。
示例流程
|
序号 |
步骤 |
说明 |
|---|---|---|
|
步骤1 |
在IAM控制台创建用户组,并授予DLI服务普通用户权限“DLI ReadOnlyAccess”。 |
|
|
步骤2 |
在IAM控制台创建用户,并将其加入已创建的用户组。 |
|
|
步骤3 |
使用新创建的用户登录控制台,切换至授权区域,验证权限:
|
|
|
步骤4 |
创建自定义策略并关联至用户组 |
如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。 创建自定义策略请参考创建DLI自定义策略。 |
创建DLI自定义策略的方式
如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考权限策略和授权项。
目前华为云支持以下两种方式创建自定义策略:
- 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。
- JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。
具体创建步骤请参见:创建自定义策略。
策略字段介绍
以授权用户拥有在所有区域中所有数据库的创建表权限为例进行说明:
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dli:database:createTable"
],
"Resource": [
"dli:*:*:database:*"
]
}
]
}
- Version
- Effect
- Action
授权项,指对资源的具体操作权限,不超过100个,如图2所示。
- 格式为:服务名:资源类型:操作,例:dli:queue:submit_job。
- 服务名为产品名称,例如dli、evs和vpc等,服务名仅支持小写。资源类型和操作没有大小写,要求支持通配符号*,无需罗列全部授权项。
- 资源类型可以参考表5中的资源类型。
- 操作:操作以IAM服务中已经注册的action为准。
- Condition
条件键表示策略语句的 Condition 元素中的键值,分为全局级条件键和服务级条件键。
- 全局级条件键(前缀为g:)适用于所有操作。详细请参考策略语法中的条件键说明。
- 服务级条件键,仅适用于对应服务的操作。
运算符与条件键一起使用,构成完整的条件判断语句。具体内容请参考表2。
DLI通过IAM预置了一组条件键。下表显示了适用于DLI服务特定的条件键。
表2 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:资源类型:资源路径, 通配符号*表示所有,资源类型和资源路径可以参考表5。
示例:
"dli:*:*:queue:*": 表示所有的队列。
创建DLI自定义策略
用户可以根据场景设置不同级别的Action和Resource。
- 定义Action
Action由服务名:资源类型:操作三段组成,通配符为*。例如:
表3 Action Action
说明
dli:queue:submit_job
DLI队列的提交操作
dli:queue:*
DLI队列的全部操作
dli:*:*
DLI所有资源类型的所有操作
更多操作与系统权限的关系请参考DLI常用操作与系统权限的关系。
- 定义Resource
Resource由<服务名:region:domainId:资源类型:资源路径>5个字段组成,通配符号*表示所有资源。5个字段可以灵活设置,资源路径可以按照场景需要,设置不同级别的权限控制。当需要设置该服务下的所有资源时,可以不指定该字段。
Resource定义请参考表4。
Resource中的资源类型和资源路径请参考表5。
表4 Resource Resource
说明
DLI:*:*:table:databases.dbname.tables.*
DLI服务,任意region,任意账号ID下,数据库名为dbname下的所有表资源。
DLI:*:*:database:databases.dbname
DLI服务,任意region,任意账号ID下,数据库名为dbname的资源。
DLI:xxx:xxx:column: databases.db.tables.tb.columns.col
DLI服务,指定region,账号ID为xxx,数据库名为db,表名为tb,列名为col的资源。
DLI:*:*:queue:queues.*
DLI服务,任意region,任意账号ID下,任意队列资源。
DLI:*:*:jobs:jobs.flink.1
DLI服务,任意region,任意账号ID下,作业Id为1的flink作业。
表5 DLI的指定资源与对应路径 资源类型
资源名称
资源路径
说明
elasticresourcepool
DLI弹性资源池
DLI:*:*:elasticresourcepool:elasticresourcepools.name
queue
DLI队列
DLI:*:*:queue:queues.queuename
database
DLI数据库
DLI:*:*:database:databases.dbname
table
DLI表
DLI:*:*:table:databases.dbname.tables.tbname
column
DLI列
DLI:*:*:column:databases.dbname.tables.tbname.columns.colname
jobs
DLI Flink作业
DLI:*:*:jobs:jobs.flink.jobid
resource
DLI程序包
DLI:*:*:resource:resources.resourcename
group
DLI程序包组
DLI:*:*:group:groups.groupname
datasourceauth
DLI跨源认证信息
DLI:*:*:datasourceauth:datasourceauth.name
edsconnections
DLI增强跨源
DLI:*:*:edsconnections:edsconnections.连接 ID
variable
DLI全局变量
DLI:*:*:variable:variables.name
sqldefendrule
SQL防御规则
DLI:*:*:sqldefendrule:sqldefendes.*
- sqldefendrule路径前缀固定为 DLI:*:*:sqldefendrule:
- 支持通配符*:DLI:*:*:sqldefendrule:sqldefendes.*表示所有 SQL 防御规则(sqldefendrule资源路径自带通配符,无需额外指定)
catalog
DLI数据目录
DLI:*:*:catalog:catalogs.name
- 特定资源:
图3 特定资源
- 所有资源: 指该服务下的所有资源
图4 所有资源
- 将上述的所有字段拼接为一个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" ] } } } ] }
DLI资源
资源是服务中存在的对象。在DLI中,资源如下,您可以在创建自定义策略时,通过指定资源路径来选择特定资源。
|
资源类型 |
资源名称 |
资源路径 |
说明 |
|---|---|---|---|
|
elasticresourcepool |
DLI弹性资源池 |
DLI:*:*:elasticresourcepool:elasticresourcepools.name |
|
|
queue |
DLI队列 |
DLI:*:*:queue:queues.queuename |
|
|
database |
DLI数据库 |
DLI:*:*:database:databases.dbname |
|
|
table |
DLI表 |
DLI:*:*:table:databases.dbname.tables.tbname |
|
|
column |
DLI列 |
DLI:*:*:column:databases.dbname.tables.tbname.columns.colname |
|
|
jobs |
DLI Flink作业 |
DLI:*:*:jobs:jobs.flink.jobid |
|
|
resource |
DLI程序包 |
DLI:*:*:resource:resources.resourcename |
|
|
group |
DLI程序包组 |
DLI:*:*:group:groups.groupname |
|
|
datasourceauth |
DLI跨源认证信息 |
DLI:*:*:datasourceauth:datasourceauth.name |
|
|
edsconnections |
DLI增强跨源 |
DLI:*:*:edsconnections:edsconnections.连接 ID |
|
|
variable |
DLI全局变量 |
DLI:*:*:variable:variables.name |
|
|
sqldefendrule |
SQL防御规则 |
DLI:*:*:sqldefendrule:sqldefendes.* |
|
|
catalog |
DLI数据目录 |
DLI:*:*:catalog:catalogs.name |
DLI请求条件
您可以在创建自定义策略时,通过添加“请求条件”(Condition元素)来控制策略何时生效。请求条件包括条件键和运算符,条件键表示策略语句的 Condition 元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如dli)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。
DLI通过IAM预置了一组条件键。下表显示了适用于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 |
资源标签键值。 |
