全部產品
Search
文件中心

E-MapReduce:執行角色

更新時間:Aug 02, 2025

EMR Serverless Spark工作空間中的任務在調用其他阿里雲服務(如OSS、DLF)時,將通過執行角色進行許可權驗證。在建立工作空間時,您既可以使用預設執行角色,也可以使用自訂的角色。

使用情境

在任務執行過程中,執行角色會根據具體情境調用不同的資源或服務,並以指定的身份進行鑒權和Action Trail。以下是主要使用情境:

  • 調用OSS檔案

    在任務執行時,執行角色負責訪問和操作儲存在阿里雲Object Storage Service服務(OSS)中的檔案。

  • 讀寫DLF中繼資料

    如果開啟了資料湖中繼資料服務(DLF)許可權控制,執行角色將根據不同的任務類型扮演不同的身份:

    • 資料開發:扮演提交任務的阿里雲帳號或RAM使用者(子帳號)身份。

    • Livy Gateway:扮演Token建立者的身份。

  • 讀寫MaxCompute資料

    在讀寫MaxCompute資料時,執行角色將扮演提交任務的阿里雲帳號或RAM使用者(子帳號)身份進行鑒權及Action Trail。

注意事項

工作空間建立後,執行角色不可更改。

使用預設執行角色

在建立工作空間時,如果您未對执行角色配置項進行修改,系統將自動使用預設執行角色AliyunEMRSparkJobRunDefaultRole

預設執行角色說明如下:

  • 角色名稱:AliyunEMRSparkJobRunDefaultRole

  • 關聯策略:該角色包含系統權限原則AliyunEMRSparkJobRunDefaultRolePolicy,授予了OSS(Object Storage Service服務)、DLF(資料湖中繼資料服務)和MaxCompute服務的存取權限。

  • 維護方式:該策略由阿里雲建立和維護,會根據服務需求變化自動更新。

重要

請謹慎編輯和刪除預設執行角色AliyunEMRSparkJobRunDefaultRole,否則會造成工作空間資源建立失敗或者任務執行失敗。

使用自訂執行角色

如果您希望自主控制執行角色的許可權點,可以在建立工作空間時修改執行角色。通過以下步驟配置自訂執行角色,以實現免密訪問同一帳號下的其他資源(例如,OSS和DLF)。

說明

以下權限原則僅用於為您展示如何為自訂角色配置許可權。當選擇使用自訂執行角色,請注意其權限原則是靜態,不會隨阿里雲服務的需求變化而自動更新。為了確保任務能夠正常運行,建議定期檢查並更新權限原則。具體可以參考預設執行角色AliyunEMRSparkJobRunDefaultRole的權限原則(AliyunEMRSparkJobRunDefaultRolePolicy),以瞭解當前所需的最新的許可權列表。

操作流程

  1. 建立權限原則。

    1. 進入建立自訂權限原則頁面。

      1. 使用Resource Access Management員登入RAM控制台

      2. 在左側導覽列,選擇許可權管理 > 權限原則

      3. 權限原則頁面,單擊建立權限原則

        image

    2. 建立權限原則頁面,單擊指令碼編輯頁簽。

    3. 輸入權限原則內容,然後單擊確定

      {
        "Version": "1",
        "Statement": [
          {
            "Action": [
              "oss:ListBuckets",
              "oss:PutObject",
              "oss:ListObjectsV2",
              "oss:ListObjects",
              "oss:GetObject",
              "oss:CopyObject",
              "oss:DeleteObject",
              "oss:DeleteObjects",
              "oss:RestoreObject",
              "oss:CompleteMultipartUpload",
              "oss:ListMultipartUploads",
              "oss:AbortMultipartUpload",
              "oss:UploadPartCopy",
              "oss:UploadPart",
              "oss:GetBucketInfo",
              "oss:PostDataLakeStorageFileOperation",
              "oss:PostDataLakeStorageAdminOperation",
              "oss:GetBucketVersions",
              "oss:ListObjectVersions",
              "oss:DeleteObjectVersion"
            ],
            "Resource": [
              "acs:oss:*:*:serverless-spark-test-resources/*",
              "acs:oss:*:*:serverless-spark-test-resources"
            ],
            "Effect": "Allow"
          },
          {
            "Action": [
              "dlf:AlterDatabase",
              "dlf:AlterTable",
              "dlf:ListCatalogs",
              "dlf:ListDatabases",
              "dlf:ListFunctions",
              "dlf:ListFunctionNames",
              "dlf:ListTables",
              "dlf:ListTableNames",
              "dlf:ListIcebergNamespaceDetails",
              "dlf:ListIcebergTableDetails",
              "dlf:ListIcebergSnapshots",
              "dlf:CreateDatabase",
              "dlf:Get*",
              "dlf:DeleteDatabase",
              "dlf:DropDatabase",
              "dlf:DropTable",
              "dlf:CreateTable",
              "dlf:CommitTable",
              "dlf:UpdateTable",
              "dlf:DeleteTable",
              "dlf:ListPartitions",
              "dlf:ListPartitionNames",
              "dlf:CreatePartition",
              "dlf:BatchCreatePartitions",
              "dlf:UpdateTableColumnStatistics",
              "dlf:DeleteTableColumnStatistics",
              "dlf:UpdatePartitionColumnStatistics",
              "dlf:DeletePartitionColumnStatistics",
              "dlf:UpdateDatabase",
              "dlf:BatchCreateTables",
              "dlf:BatchDeleteTables",
              "dlf:BatchUpdateTables",
              "dlf:BatchGetTables",
              "dlf:BatchUpdatePartitions",
              "dlf:BatchDeletePartitions",
              "dlf:BatchGetPartitions",
              "dlf:DeletePartition",
              "dlf:CreateFunction",
              "dlf:DeleteFunction",
              "dlf:UpdateFunction",
              "dlf:ListPartitionsByFilter",
              "dlf:DeltaGetPermissions",
              "dlf:UpdateCatalogSettings",
              "dlf:CreateLock",
              "dlf:UnLock",
              "dlf:AbortLock",
              "dlf:RefreshLock",
              "dlf:ListTableVersions",
              "dlf:CheckPermissions",
              "dlf:RenameTable",
              "dlf:RollbackTable"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Action": [
              "dlf-dss:CreateDatabase",
              "dlf-dss:CreateFunction",
              "dlf-dss:CreateTable",
              "dlf-dss:DropDatabase",
              "dlf-dss:DropFunction",
              "dlf-dss:DropTable",
              "dlf-dss:DescribeCatalog",
              "dlf-dss:DescribeDatabase",
              "dlf-dss:DescribeFunction",
              "dlf-dss:DescribeTable",
              "dlf-dss:AlterDatabase",
              "dlf-dss:AlterFunction",
              "dlf-dss:AlterTable",
              "dlf-dss:ListCatalogs",
              "dlf-dss:ListDatabases",
              "dlf-dss:ListTables",
              "dlf-dss:ListFunctions",
              "dlf-dss:CheckPermissions"
            ],
            "Resource": "*",
            "Effect": "Allow"
          },
          {
            "Effect": "Allow",
            "Action": "dlf-auth:ActOnBehalfOfAnotherUser",
            "Resource": "*"
          }
        ]
      }
    4. 輸入權限原則名稱(例如,test-serverless-spark)和備忘,然後單擊確定

      策略中涉及的元素如下所示:

      • Action:是指對具體資源的操作。本樣本是OSS和DLF的讀取及查詢目錄的許可權。

      • Resource:是指被授權的具體對象。本樣本是訪問DLF所有對象及其中的內容,以及訪問OSS Bucket(serverless-spark-test-resources)下的所有內容,其中serverless-spark-test-resources需要根據實際情況替換為指定OSS Bucket的名稱。

      更多權限原則的基本元素,請參見權限原則基本元素

  2. 建立RAM角色。

    1. 在左側導覽列,選擇身份管理 > 角色

    2. 角色頁面,單擊建立角色

    3. 建立RAM角色。

      1. 建立角色面板,配置以下資訊,單擊確定

        參數

        描述

        信任主體類型

        選擇雲端服務

        信任主體名稱

        spark.emr-serverless.aliyuncs.com

      2. 輸入角色名稱(例如,test-serverless-spark-jobrun),單擊確定

  3. 為RAM角色授權。

    1. 角色頁面,單擊剛建立的角色操作列的新增授權

    2. 新增授權面板,權限原則選擇自訂策略,添加前一步驟中建立的權限原則。

    3. 單擊確認新增授權

    4. 單擊關閉

  4. 建立工作空間並訪問外部資源。

    1. 登入E-MapReduce控制台

    2. 在左側導覽列,選擇EMR Serverless > Spark

    3. 單擊创建工作空间,參考以下參數配置,更多參數詳情請參見建立工作空間

      • 工作空间基础路径:選擇前面建立的RAM角色有讀寫權限的OSS路徑。

      • 执行角色:選擇前面建立的RAM角色名稱(例如test-serverless-spark-jobrun)。

    4. 工作空間建立成功後,參考JAR開發快速入門進行批任務以驗證許可權是否生效。

      • 檔案上傳到已授權的OSS Bucket下時,任務可正常運行。

      • 檔案上傳到未授權的OSS Bucket下時,任務運行會報錯,提示沒有該OSS路徑的存取權限。

其他權限原則參考

訪問MaxCompute資料

為執行角色添加以下權限原則。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "odps:ActOnBehalfOfAnotherUser",
      "Resource": [
        "acs:odps:*:*:users/default/aliyun/*",
        "acs:odps:*:*:users/default/ramuser/*",
        "acs:odps:*:*:users/default/ramrole/*"
      ]
    }
  ]
}

訪問開啟了KMS的OSS

為執行角色添加以下權限原則。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:List*",
        "kms:DescribeKey",
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*"
    }
  ]
}

相關文檔