本文主要介绍如何让RAM子用户可以提交Serverless Spark作业。

操作步骤

  1. DLA子账号关联RAM子账号
    1. 如果您还没有RAM子账号,需要新建RAM子账号。本例创建的子账号为:“dla-sub-user”。创建子账号如下图所示。需要勾选“控制台访问”和“编程访问”。8创建RAM用户可以参考文档:创建一个RAM用户
    2. 将RAM子账号:“dla-sub-user”和DLA子账号绑定,请参见DLA 子账号绑定 RAM 子账号
  2. 为子账号:“dla-sub-user”授予访问DLA的权限
    关于如何为RAM子账号赋权,您可以参考RAM文档:为RAM用户授权
    说明 当前RAM系统中已经预设了三种DLA授权策略,在系统策略输入框中输入DLA就可以快速选择,如下图所示:
    2
    权限策略的说明如下:
    AliyunDLAFullAccess 用于数据湖分析的管理员权限,拥有数据湖分析的所有权限,可以执行新建集群、删除集群、提交作业等操作
    AliyunDLAReadOnlyAccess 用于数据湖分析的访客权限,拥有数据湖分析的只读权限,可以查看集群状态、作业状态等信息。无法修改集群的状态,也无法提交作业。
    AliyunDLADeveloperAccess 用于数据湖分析的开发者权限,可以查看集群、作业的状态,提交和执行作业,无法新建和删除集群。
    说明 在RAM访问控制中,您还可以根据需求创建自定义更细粒度的访问策略,比如一个子账号可以使用哪些集群。详情请参见授予RAM子账户DLA细粒度权限
  3. 为了让Spark作业可以访问您的数据,需要为DLA创建一个数据访问的Role:“dla-sub-user-role”,并授权子用户可以使用该Role
    用户角色是RAM用户控制中的概念,它的使用方法和介绍可以参考RAM文档:RAM角色概览
    1. 为Spark作业新建一个RAM角色,并授予DLA
      • 登录RAM控制台,选择RAM角色管理->创建RAM角色->选择类型选择阿里云服务,点击下一步。如下图:3
      • 配置角色界面,填写角色名称选择受信服务选择数据湖分析,点击完成 。如下图:11
      • 创建完成界面,点击为角色授权,可以为该角色授予访问您的资源的访问权限。如授予OSSFullAccess意味着这个角色可以访问您的所有OSS数据,如下图所示:5
        说明 您也可以选择自定义权限,做更细粒度授权,比如只能让子用户访问OSS的特定bucket等。除了OSS之外,其他数据服务比如TableStore,权限配置方法也类似。
      • RAM角色管理页面,搜索刚刚创建好的角色,点击角色名字,如下图所示:6这个界面有两个信息需要注意:最大会话时间可以调整, 请保证这个时间大于作业运行的最大时间,最大可以调整为12小时;ARN是该Role的ID,需要记录下来,后面的步骤中会用到。
    2. 授权子用户:“dla-sub-user” 可以使用步骤3.i创建好的角色:“dla-sub-user-role”
      RAM操作步骤如下:
      权限管理->权限策略管理->创建权限策略->新建自定义权限策略:填写策略名称:”dla-sub-user-auth“,配置模式选择脚本配置,并在策略内容中输入如下代码:
      {
          "Statement": [
              {
                  "Action": "ram:PassRole",
                  "Resource": "acs:ram::xxxxxx:role/dla-sub-user-role",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "acs:Service": "openanalytics.aliyuncs.com"
                      }
                  }
              }
          ],
          "Version": "1"
      }
      其中,Resource字段需要替换为步骤3.i中已经创建好的角色的ARN值
    3. 把上一个步骤创建的权限策略:”dla-sub-user-auth“授权给RAM子账号:”dla-sub-user“
      RAM操作步骤如下:
      人员管理->用户->权限管理->自定义策略,选择:“dla-sub-user-auth”。如下图:7
  4. 在作业配置中使用已经创建好的Role
    子账号在提交任务时需要在 conf 参数中增加 spark.dla.roleArn 这个配置,值就是步骤3.i中创建的角色的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"
        }
    }

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