更新时间:2024-05-11 GMT+08:00

自定义DLI委托权限

使用Flink 1.15和Spark 3.3及以上版本的引擎执行作业时,当您所需的委托没有包含在DLI系统委托dli_management_agency时,您需要在IAM页面创建相关委托,并在作业配置中添加新建的委托信息。dli_management_agency包含跨源操作、消息通知、用户授权操作所需的权限,除此之外的其他委托权限需求,都需自定义DLI委托。了解dli_management_agency请参考DLI委托概述

本节操作介绍自定义委托,并完成服务授权,以及在作业配置中添加新建的委托信息的操作步骤。

DLI自定义委托场景

表1 DLI自定义委托场景

场景

委托名称

适用场景

权限策略

允许DLI按表生命周期清理数据

dli_data_clean_agency

数据清理委托,表生命周期清理数据、Lakehouse表数据清理使用。

该委托需新建后自定义权限,但委托名称固定为dli_data_clean_agency。

数据清理委托权限配置

允许DLI读写OBS将日志转储

自定义

DLI Flink作业下载OBS对象、OBS/DWS数据源(外表)、日志转储、使用savepoint、开启checkpoint,DLI Spark作业下载OBS对象、读写OBS外表。

访问和使用OBS的权限策略

允许DLI在访问DEW获取数据访问凭证

自定义

DLI 作业使用DEW-CSMS凭证管理能力。

使用DEW加密功能的权限

允许访问DLI Catalog元数据

自定义

DLI 访问DLI元数据。

访问DLI Catalog元数据的权限

允许访问LakeFormation Catalog元数据

自定义

DLI 访问LakeFormation元数据。

访问LakeFormation Catalog元数据的权限

操作流程

图1 自定义委托操作流程

约束与限制

  • 自定义委托名称不可与系统默认委托重复,即不可以是dli_admin_agency、dli_management_agency、dli_data_clean_agency。
  • 允许DLI按表生命周期清理数据的委托名称必须为dli_data_clean_agency。
  • 仅Flink 1.15和Spark 3.3.1(Spark通用队列场景)及以上版本的引擎执行作业支持配置自定义委托。
  • 更新委托权限后,系统将升级您的dli_admin_agency为dli_management_agency,新的委托包含跨源操作、消息通知、用户授权操作所需的权限。除此之外的其他委托权限需求都需要用户自定义委托。了解dli_management_agency请参考DLI委托概述
  • 常见新建委托场景:允许DLI读写OBS数据、日志转储、Flink checkopoint;允许DLI在访问DEW获取数据访问凭证、允许访问Catalog获取元数据等场景。以上场景的委托权限请参考常见场景的委托权限策略

步骤1:在IAM控制台创建云服务委托并授权

  1. 登录管理控制台。
  2. 单击右上方登录的用户名,在下拉列表中选择“统一身份认证”。
  3. 在左侧导航栏中,单击“委托”。
  4. 在“委托”页面,单击“创建委托”。
  5. 在“创建委托”页面,设置如下参数:
    • 委托名称:按需填写,例如“dli_obs_agency_access”。
    • 委托类型:选择“云服务”。
    • 云服务:(“委托类型”选择“云服务”时出现此参数项。)在下拉列表中选择“DLI"。
    • 持续时间:选择“永久”。
    • 描述:非必选,可以填写“拥有OBS OperateAccess权限的委托”。
      图2 创建委托
  6. 配置完委托的基本信息后,单击“下一步”。
  7. 授予当前委托所需的权限策略,单击“新建策略”。
  8. 配置策略信息。
    1. 输入策略名称,本例:dli-obs-agency。
    2. 选择“JSON视图”。
    3. 在策略内容中粘贴自定义策略。

      本例权限包含访问和使用OBS的权限,适用于以下场景:DLI Flink作业下载OBS对象、OBS/DWS数据源(外表)、日志转储、使用savepoint、开启Checkpoint。DLI Spark作业下载OBS对象、读写OBS外表。

      更多Flink作业常见委托权限配置请参考常见场景的委托权限策略
      {
          "Version": "1.1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "obs:bucket:GetBucketPolicy",
                      "obs:bucket:GetLifecycleConfiguration",
                      "obs:bucket:GetBucketLocation",
                      "obs:bucket:ListBucketMultipartUploads",
                      "obs:bucket:GetBucketLogging",
                      "obs:object:GetObjectVersion",
                      "obs:bucket:GetBucketStorage",
                      "obs:bucket:GetBucketVersioning",
                      "obs:object:GetObject",
                      "obs:object:GetObjectVersionAcl",
                      "obs:object:DeleteObject",
                      "obs:object:ListMultipartUploadParts",
                      "obs:bucket:HeadBucket",
                      "obs:bucket:GetBucketAcl",
                      "obs:bucket:GetBucketStoragePolicy",
                      "obs:object:AbortMultipartUpload",
                      "obs:object:DeleteObjectVersion",
                      "obs:object:GetObjectAcl",
                      "obs:bucket:ListBucketVersions",
                      "obs:bucket:ListBucket",
                      "obs:object:PutObject"
                  ],
                  "Resource": [
                      "OBS:*:*:bucket:bucketName",//请替换bucketName为对应的桶名称
                      "OBS:*:*:object:*"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "obs:bucket:ListAllMyBuckets"
                  ]
              }
          ]
      }
    4. 按需输入策略描述。
  9. 新建策略完成后,单击“下一步”,返回委托授权页面。
  10. 选择步骤8新建的自定义策略。
    图3 选择自定义策略
  11. 单击“下一步”,选择委托的授权范围。

    了解更多授权操作说明请参考创建用户组并授权

    • 所有资源:授权后,IAM用户可以根据权限使用账号中所有资源,包括企业项目、区域项目和全局服务资源。
    • 全局服务资源:全局服务部署时不区分区域,访问全局级服务,不需要切换区域,全局服务不支持基于区域项目授权。如对象存储服务(OBS)、内容分发网络(CDN)等。授权后,用户根据权限使用全局服务的资源。
    • 指定区域项目资源:授权后,IAM用户根据权限使用所选区域项目中的资源,未选择的区域项目中的资源,该IAM用户将无权访问。
    • 指定企业项目资源:授权后,IAM用户根据权限使用所选企业项目中的资源。如企业项目A包含资源B,资源B部署在北京四和上海二,IAM用户所在用户组关联企业项目A后,北京四和上海二的资源B用户都可访问,不在企业项目A内的其他资源,该IAM用户将无权访问。

    本例自定义策略中是OBS权限,因此选择全局服务资源。如果使用的是DLI权限,推荐选择“指定区域项目资源”。

  12. 单击“确定”,完成授权。

    授权后需等待15-30分钟才可生效。

步骤2:在作业中设置委托权限

使用Flink 1.15和Spark 3.3及以上版本的引擎执行作业时,需要在作业配置中添加新建的委托信息。

否则Spark3.3.1作业不指定委托时,无法使用OBS;Flink1.15作业不指定委托时,无法开启checkpoint、savepoint,作业提交日志无法转储,无法使用OBS、DWS等数据源。

  • 仅有运行在弹性资源池队列上的Flink 1.15和Spark3.3.1作业支持指定委托。
  • 作业指定委托后,授予委托的权限要谨慎修改,委托权限变动可能会影响作业的正常运行。
  • Flink Jar作业指定委托
    1. 登录DLI管理控制台,选择“作业管理 > Flink作业”。
    2. 选择待编辑的Flink Jar作业,单击操作列的“编辑”。
    3. 在作业配置区域配置委托信息:
      • Flink版本:选择1.15。
      • 优化参数:配置新建的委托key-value信息,key固定为“flink.dli.job.agency.name”,value为自定义的委托名。

        本例配置为:flink.dli.job.agency.name=dli_obs_agency_access

      图4 Flink Jar作业指定委托
  • Flink OpenSource SQL作业指定委托
    1. 登录DLI管理控制台,选择“作业管理 > Flink作业”。
    2. 选择待编辑的Flink OpenSource SQL作业,单击操作列的“编辑”。
    3. 在作业配置区域配置委托信息:
      • 在“运行参数”页签,确保所选的Flink版本为1.15。
      • 单击“自定义配置”,配置新建的委托key-value信息,key固定为“flink.dli.job.agency.name”,value为自定义的委托名。

        本例配置为:flink.dli.job.agency.name=dli_obs_agency_access

        图5 Flink OpenSource SQL作业指定委托
  • Spark作业指定委托
    1. 登录DLI管理控制台,选择“作业管理 > Spark作业”。
    2. 选择待编辑的Spark作业,单击操作列的“编辑”。
    3. 在作业配置区域配置委托信息:
      • 确保所选的Spark版本为3.3.1。
      • 在“Spark参数(--conf)”区域配置新建的委托key-value信息,key固定为“spark.dli.job.agency.name”,value为自定义的委托名。

        本例配置为:spark.dli.job.agency.name=dli_obs_agency_access

        图6 Spark作业指定委托