本文详细介绍了如何配置RAM子账号权限来使用DLA Serverless Spark提交作业。

前提条件

操作步骤

  1. 登录RAM控制台为子账号授予访问DLA的权限。
    如何为RAM子账号赋权,请参考为RAM用户授权
    说明 当前RAM系统中已经预设了三种DLA授权策略,在系统策略输入框中输入DLA就可以快速选择,如下图所示:
    2
    权限策略的说明如下:
    权限策略名称 权限策略说明
    AliyunDLAFullAccess 用于数据湖分析的管理员权限,拥有数据湖分析的所有权限,可以执行新建集群、删除集群、提交作业等操作,拥有授权给DLA账户的角色的使用权。
    AliyunDLAReadOnlyAccess 用于数据湖分析的访客权限,拥有数据湖分析的只读权限,可以查看集群状态、作业状态等信息。无法修改集群的状态,也无法提交作业。
    AliyunDLADeveloperAccess 用于数据湖分析的开发者权限,可以查看集群、作业的状态,提交和执行作业,无法新建和删除集群,拥有授权给DLA账户的角色的使用权。
    说明 在RAM访问控制中,您还可以根据需要自定义创建更细粒度的访问策略,比如一个子账号可以使用哪些集群。具体请参见授予RAM账号细粒度访问DLA的权限。创建完权限策略后,您便可添加该自定义策略给该RAM子账号。
  2. 为了让Spark作业可以访问您的数据,需要为DLA创建一个数据访问的角色,并授权子用户可以使用该角色。
    用户角色是RAM用户控制中的概念,具体请参考RAM角色概览
    1. 登录RAM控制台,选择RAM角色管理->创建RAM角色->选择类型选择阿里云服务,点击下一步3
    2. 配置角色页面,填写角色名称(本例中为dla-sub-user-role),选择受信服务选择数据湖分析,点击完成 。如下图:11
    3. 创建完成界面,点击为角色授权,可以为该角色授予访问您的资源的访问权限。如授予OSSFullAccess意味着这个角色可以访问您的所有OSS数据,如下图所示:5
      说明 您也可以选择自定义权限策略做更细粒度授权,具体请参考RAM Policy概述。创建完细粒度权限策略后,便可在上图中的自定义策略中给该角色添加自定义权限策略。
    4. RAM角色管理页面,搜索刚创建好的角色,点击角色名字,如下图所示:6
      说明 在这个页面有两个信息需要注意:最大会话时间可以调整,最大可以调整为12小时;ARN是该Role的ID,需要记录下来,后面的步骤中会用到。
  3. 授权允许子账号(本例中子账号为dla-sub-user)可以使用步骤2.iii中角色的权限策略。
    1. 登录RAM控制台,选择权限管理->权限策略管理->创建权限策略->新建自定义权限策略,填写策略名称(本例中为dla-sub-user-auth),配置模式选择脚本配置
    2. 策略内容中输入如下代码。
      {
          "Statement": [
              {
                  "Action": "ram:PassRole",
                  "Resource": "<步骤2.d中记录的ARN的值>",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "acs:Service": "openanalytics.aliyuncs.com"
                      }
                  }
              }
          ],
          "Version": "1"
      }
  4. 把步骤3中创建的权限策略(本例中为dla-sub-user-auth)授权给RAM子账号(本例中子账号为dla-sub-user),对应的RAM子账号便拥有了权限策略中的权限。操作步骤如下:
    登录RAM控制台,选择人员管理->用户->权限管理->自定义策略,选择dla-sub-user-auth。如下图:7

验证RAM子账号权限配置

RAM子账号在提交任务时需要在conf参数中增加spark.dla.roleArn。这个值就是步骤2.iv中创建的角色的ARN值。示例如下:
{
    "name": "SparkPi",
    "file": "oss://sparkRoleTest/original-spark-examples_2.11-2.4.5.jar",
    "className": "org.apache.spark.examples.SparkPi",
    "args": [
        "10"
    ],
    "conf": {
        "spark.dla.roleArn": "acs:ram::xxxxxx:role/dla-sub-user-role"
        "spark.driver.resourceSpec": "small",
        "spark.executor.instances": 2,
        "spark.executor.resourceSpec": "small"
    }
}

该作业在运行时就拥有了步骤2.iv中所创建角色的权限。