本文主要介绍RAM子账号如何访问其他账号的OSS资源并提交Spark作业。

前提条件

  • 您需要准备2个阿里云账号。假设提交Spark作业的是A账号,要访问B账号的OSS资源。为了您操作的便捷性,建议您使用两个浏览器来进行操作,一个浏览器登录A账号,一个浏览器登录B账号。
  • A账号下的RAM子账号已经可以访问A账号下的所有资源。具体操作请参见配置RAM子账号权限(精简版)配置RAM子账号权限(详细版)

操作步骤

  1. 使用B账号登录RAM控制台创建RAM角色。
    1. 登录RAM控制台,在左侧导航栏单击RAM角色管理
    2. RAM角色管理页面,单击创建RAM角色
    3. 创建RAM角色页面的选择类型区域,选择阿里云服务,单击下一步创建RAM角色
    4. 创建RAM角色页面的配置角色区域,选择普通服务角色,编辑角色名称(本例中角色名称为test-dla-accross-account),受信服务选择数据湖分析。单击完成配置角色
  2. 使用B账号登录RAM控制台修改新创建的RAM角色(本例中角色名称为test-dla-accross-account)的权限策略,并为该角色添加访问OSS的权限。
    1. 登录RAM控制台,在左侧导航栏单击RAM角色管理
    2. RAM角色管理页面的RAM角色名称列,定位到新创建的RAM角色(本例中角色名称为test-dla-accross-account),单击RAM角色名称链接。RAM角色名称
    3. 信任策略管理页签,单击修改信任策略信任策略管理
      说明 上述截图中B账号的ARN值,会在RAM角色创建成功后生成,在步骤3中会用到。
    4. 修改信任策略页面,修改权限策略。如下所示:
      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": [
                          "<这里需要替换为A账号的UID>@openanalytics.aliyuncs.com"
                      ]
                  }
              }
          ],
          "Version": "1"
      }
    5. 权限策略修改完成后,在权限管理页签,单击添加权限添加权限
    6. 添加权限页面,授权范围选择云账号全部资源系统策略选择AliyunOSSFullAccess,单击确定添加权限
  3. 使用A账号登录RAM控制台新建自定义权限策略。
    1. 登录RAM控制台,在左侧导航栏单击权限管理 > 权限策略管理
    2. 新建自定义权限策略页面,输入策略名称(本例中策略名称为test-dla-accross-b-oss),选择脚本配置模式,并输入以下策略内容。单击确定新建自定义权限策略
      策略内容:
      {
          "Statement": [
              {
                  "Action": "ram:PassRole",
                  "Resource": "<这里填写您在步骤2中创建的B账号的ARN>",
                  "Effect": "Allow",
                  "Condition": {
                      "StringEquals": {
                          "acs:Service": "openanalytics.aliyuncs.com"
                      }
                  }
              }
          ],
          "Version": "1"
      }
  4. 使用A账号登录RAM控制台为A账号下的RAM子账号,添加步骤3创建的权限策略。
    1. 登录RAM控制台,在左侧导航栏单击人员管理 > 用户
    2. 用户页面,定位到需要添加权限策略的RAM子账号,单击RAM子账号链接。
    3. 在RAM子账号详情页面,单击权限管理权限管理
    4. 权限管理页签,单击添加权限
    5. 添加权限页签,授权范围选择云账号全部资源自定义权限选择步骤3创建的权限策略(test-dla-accross-b-oss)。单击确定添加权限

验证RAM子账号跨账号访问OSS配置

账号A的RAM子账号在提交Spark任务时,需要在conf参数中增加spark.dla.roleArn配置,spark.dla.roleArn的值就是步骤2中B账号的ARN值。示例如下:
{
    "name": "<作业名称>",
    "file": "<oss://path/to/your/jar>",
    "className": "<mainclass>",
    "args": [
        "作业参数1",
        "作业参数2"
    ],
    "conf": {
        "spark.dla.roleArn": "acs:ram::xxxxxx:role/test-dla-accross-account"
        "spark.driver.resourceSpec": "small",
        "spark.executor.instances": 2,
        "spark.executor.resourceSpec": "small"
    }
}