文档首页/ 数据湖探索 DLI/ 用户指南/ DLI权限管理/ IAM权限管理/ 通过IAM角色或策略授予使用DLI的权限
更新时间:2025-09-01 GMT+08:00
分享

通过IAM角色或策略授予使用DLI的权限

如果您需要对您所拥有的DLI进行角色与策略的权限管理,您可以使用统一身份认证服务(Identity and Access Management,简称IAM),通过IAM,您可以:

  • 根据企业的业务组织,在您的账号中,给企业中不同职能部门的员工创建IAM用户,让员工拥有唯一安全凭证,并使用DLI资源。
  • 根据企业用户的职能,设置不同的访问权限,以达到用户之间的权限隔离。
  • 将DLI资源委托给更专业、高效的其他账号或者云服务,这些账号或者云服务可以根据权限进行代运维。

如果账号已经能满足您的要求,不需要创建独立的IAM用户,您可以跳过本章节,不影响您使用DLI服务的其它功能。

本章节为您介绍使用角色与策略的授权方法,操作流程如示例流程所示。

前提条件

给用户组授权之前,请您了解用户组可以添加的DLI权限,并结合实际需求进行选择。

DLI支持的系统权限,请参见角色与策略权限管理

如果您需要对除DLI之外的其他服务授权,IAM支持服务的所有权限请参见系统权限

示例流程

图1 给用户授权DLI权限流程
表1 操作步骤

序号

步骤

说明

步骤1

创建用户组并授权

在IAM控制台创建用户组,并授予DLI服务普通用户权限“DLI ReadOnlyAccess”。

步骤2

创建用户并加入用户组

在IAM控制台创建用户,并将其加入已创建的用户组。

步骤3

用户登录并验证权限

使用新创建的用户登录控制台,切换至授权区域,验证权限:

  • 在“服务列表”中选择数据湖探索,进入DLI主界面。如果在“弹性资源池”页面可以查看弹性资源池列表,但是单击右上角“购买弹性资源池”,无法购买(假设当前权限仅包含DLI ReadOnlyAccess),表示“DLI ReadOnlyAccess”已生效。
  • 在“服务列表”中选择除数据湖探索外(假设当前策略仅包含DLI ReadOnlyAccess)的任一服务,如果提示权限不足,表示“DLI ReadOnlyAccess”已生效。

步骤4

创建自定义策略并关联至用户组

如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。

创建自定义策略请参考创建DLI自定义策略

创建DLI自定义策略的方式

如果系统预置的DLI权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考权限策略和授权项

目前华为云支持以下两种方式创建自定义策略:

  • 可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。
  • JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。

具体创建步骤请参见:创建自定义策略

策略字段介绍

以授权用户拥有在所有区域中所有数据库的创建表权限为例进行说明:

{
    "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个,如图2所示。

    图2 DLI授权项
    • 格式为:服务名:资源类型:操作,例: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。

  1. 定义Action

    Action由服务名:资源类型:操作三段组成,通配符为*。例如:

    表3 Action

    Action

    说明

    dli:queue:submit_job

    DLI队列的提交操作

    dli:queue:*

    DLI队列的全部操作

    dli:*:*

    DLI所有资源类型的所有操作

    更多操作与系统权限的关系请参考DLI常用操作与系统权限的关系

  2. 定义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弹性资源池

    elasticresourcepools.name

    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

    variable

    DLI全局变量

    variables.name

    sqldefendrule

    SQL防御规则

    sqldefendes.*

    catalog

    DLI数据目录

    catalogs.name

    • 特定资源:
      图3 特定资源
    • 所有资源: 指该服务下的所有资源
      图4 所有资源
  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"
                  ]
              }
          ]
      }
  • 示例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中,资源如下,您可以在创建自定义策略时,通过指定资源路径来选择特定资源。

表6 DLI的指定资源与对应路径

资源类型

资源名称

资源路径

elasticresourcepool

DLI弹性资源池

elasticresourcepools.name

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

variable

DLI全局变量

variables.name

sqldefendrule

SQL防御规则

sqldefendes.*

catalog

DLI数据目录

catalogs.name

DLI请求条件

您可以在创建自定义策略时,通过添加“请求条件”(Condition元素)来控制策略何时生效。请求条件包括条件键和运算符,条件键表示策略语句的 Condition 元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如dli)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。

DLI通过IAM预置了一组条件键。下表显示了适用于DLI服务特定的条件键。

表7 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

资源标签键值。

相关文档