全部產品
Search
文件中心

Platform For AI:配置EAS RAM角色

更新時間:Jun 24, 2025

在EAS服務中訪問其他雲資源時,需配置存取金鑰進行身分識別驗證。通過關聯RAM角色,您可在EAS服務執行個體內基於STS臨時憑證訪問其他雲資源,無需再配置長期AccessKey,減少密鑰泄漏風險。本文介紹如何建立RAM角色並授權給EAS,以及如何基於RAM角色擷取STS臨時訪問憑證。

功能優勢

RAM角色是一種允許雲端服務扮演的可信實體角色,用於解決“跨服務訪問”的問題。基於RAM角色擷取臨時訪問憑證來驗證身份資訊和存取權限控制,具有以下優勢:

  • 安全保密:無需在服務內管理認證,使用STS臨時訪問憑證替代長期AccessKey,減少密鑰泄露風險。

  • 便捷可控:通過修改RAM角色權限原則,可更便捷、更精細地控制各開發人員在服務內訪問雲資源的許可權。

使用限制

目前,一個EAS服務只能關聯一個RAM角色。

配置方法

在建立EAS服務時為其配置RAM角色,並擷取STS臨時訪問憑證。

為EAS配置RAM角色

支援以下兩種配置方式:

配置方式

適用情境

方式一:為EAS服務授權PAI預設角色

說明

PAI預設角色基於服務角色AliyunServiceRoleForPaiEas運作,僅擁有訪問MaxCompute和OSS的許可權。

無需額外建立RAM角色,適用於訪問MaxCompute和OSS的基本開發資源。為EAS服務授權PAI預設角色,在以下情境中無需配置AccessKey:

  • 通過PyODPS SDK訪問EAS服務所有者有執行許可權的MaxCompute專案中的資料。

  • 通過OSS SDK訪問當前工作空間預設的預設OSS儲存空間(Bucket)中的資料。

方式二:為EAS服務授權自訂角色

當PAI預設角色許可權不足時,您可以建立RAM角色並自訂其權限原則,按需控制開發人員在EAS服務內可訪問的雲資源範圍。

為EAS服務授權自訂角色後,通過STS臨時憑證訪問雲產品時,所擁有的許可權將與該自訂角色的許可權保持一致。在部署服務時,系統將基於自訂角色的許可權訪問掛載的資料來源並拉取自訂鏡像。

具體配置方法如下:

方式一:為EAS服務授權PAI預設角色

在部署EAS服務時,在服務配置地區的JSON中添加以下配置:

"options": {
  "enable_ram_role": true
}
說明

如果使用JSON直接部署,並且希望通過PAI預設角色調用OSS SDK時,需要確保服務配置中包含metadata.workspace_id欄位。

方式二:為EAS服務授權自訂角色

  1. 登入RAM控制台建立RAM角色

    其中,關鍵參數配置如下:

    • 信任主體類型:選擇雲端服務

    • 信任主體名稱:選擇人工智慧平台PAI/PAI(eas.pai.aliyuncs.com)。

    image

  2. 為已建立的RAM角色授權。

    將系統策略或者自訂策略授權給RAM角色,使其擁有相關的資源訪問或操作許可權。例如給RAM角色授予訪問OSS的許可權AliyunOSSReadOnlyAccess。

    重要

    若在部署服務時掛載了資料來源或使用了自訂鏡像,系統將基於RAM角色的許可權訪問資料來源和拉取鏡像。因此需要為RAM角色授予訪問資料來源(NASOSS)和Container Registry的許可權。

  3. 在部署EAS服務時,關聯RAM角色。

    在服務配置地區的JSON中配置以下內容,其中role_arn需替換為上述步驟已建立的RAM角色的ARN,如何擷取ARN,請參見查看RAM角色

    "options": {
      "enable_ram_role": true
    },
    "role_arn": "acs:ram::111*************:role/${RoleName}"

    (可選)若您使用RAM使用者(阿里雲子帳號)部署EAS服務,請聯絡阿里雲帳號(主帳號)為您授予如下權限原則,以獲得將RAM角色傳遞給EAS執行個體的許可權。具體操作,請參見建立自訂權限原則為RAM使用者授權

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "acs:ram::*:role/${RoleName}"
        }
      ]
    }

    其中${RoleName}需要替換為EAS服務關聯的RAM角色名稱。

基於EAS服務關聯的RAM角色擷取臨時訪問憑證

為EAS服務分配了PAI預設角色或自訂角色後,您可以通過以下方式擷取臨時訪問憑證:

方式一:通過Credentials工具擷取

Credentials工具會調用EAS服務執行個體內的本地服務(EAS服務建立時已自動注入)擷取STS臨時訪問憑證,該憑證會周期性更新。

在部署EAS服務時,完成以下關鍵配置:

  • 安裝阿里雲Credentials工具。

    三方庫配置參數中,選中三方庫列表,並在編輯框中配置alibabacloud_credentials,來安裝阿里雲Credentials工具。

    說明

    如果鏡像中已預裝此庫,該配置步驟可省略。

  • 配置指令檔。

    以Python為例,指令碼內容樣本如下,更多語言SDK樣本,請參見使用訪問憑據訪問阿里雲OpenAPI最佳實務

    from alibabacloud_credentials.client import Client as CredClient
    from alibabacloud_credentials.models import Config as CredConfig
    
    credentialsConfig = CredConfig(
        type='credentials_uri'
    )
    credentialsClient = CredClient(credentialsConfig)

方式二:直接存取EAS服務執行個體內的本地服務擷取

在EAS服務執行個體內,執行以下命令,可訪問本地自動注入的Server擷取臨時訪問憑證。

# 擷取執行個體RAM角色的臨時授權訪問憑證
curl $ALIBABA_CLOUD_CREDENTIALS_URI

返回樣本如下所示:

{
	"Code": "Success",
	"AccessKeyId": "STS.N*********7",
	"AccessKeySecret": "3***************d",
	"SecurityToken": "DFE32G*******",
	"Expiration": "2024-05-21T10:39:29Z"
}

其中:

  • SecurityToken:表示RAM角色的臨時Token。

  • Expiration:表示RAM角色的臨時授權訪問憑證的有效期間。

方式三:直接存取EAS服務執行個體的本地內檔案擷取

在EAS服務執行個體中訪問指定路徑的檔案(由PAI-EAS自動注入並周期性重新整理),擷取RAM角色的臨時訪問憑證。該檔案所在的路徑為/etc/ram/credentials,檔案內容樣本如下:

{
	"Code": "Success",
	"AccessKeyId": "STS.N*********7",
	"AccessKeySecret": "3***************d",
	"SecurityToken": "DFE32G*******",
	"Expiration": "2024-05-21T10:39:29Z"
}

使用樣本

介紹如何基於EAS的RAM角色訪問PyODPS或OSS。您可以將代碼整合到服務鏡像中,也可以通過模型配置將其掛載到服務執行個體中。本樣本將以掛載方式為例介紹,具體操作步驟如下:

  1. 進入自訂部署頁面,詳情請參見服務部署

  2. 自訂部署頁面,配置以下關鍵參數,更多參數配置說明,請參見控制台自訂部署參數說明

    參數

    描述

    環境資訊

    運行命令

    增加執行代碼的命令,例如python /mnt/data/xx.py

    模型配置

    將代碼檔案xx.py通過模型配置掛載到EAS服務執行個體中。選擇代碼檔案所在目錄,並配置掛載路徑/mnt/data/。代碼檔案內容樣本如下:

    樣本1:基於RAM角色訪問OSS資料

    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials import providers
    from itertools import islice
    
    if __name__ == '__main__':
        auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider())
        # <oss_endpoint>需替換為您的OSS Bucket名稱;<oss_bucket>需替換為您的OSS Bucket所在region的Endpoint。
        bucket = oss2.Bucket(auth,
                             '<oss_endpoint>',
                             '<oss_bucket>'
                  )
    
        for b in islice(oss2.ObjectIterator(bucket), 10):
            print(b.key)
    

    其中:

    • <oss_bucket>需替換為您的OSS Bucket名稱,並確保其為當前工作空間中預設的預設OSS儲存空間(Bucket)

    • <oss_endpoint>需替換為您的OSS Bucket所在region的Endpoint。因EAS預設不通公網,此處應配置內網Endpoint地址(例如oss-cn-hangzhou-internal.aliyuncs.com)。如果需要使用公網Endpoint(例如oss-cn-hangzhou.aliyuncs.com),則需為EAS配置具有公網訪問能力的專用網路,詳情請參見配置網路連通

    樣本2:基於RAM角色訪問PyODPS資料

    from alibabacloud_credentials import providers
    from odps.accounts import CredentialProviderAccount
    from odps import ODPS
    
    if __name__ == '__main__':
        account = CredentialProviderAccount(providers.DefaultCredentialsProvider())
        # <odps_project>需替換為您的Project名稱;<odps_endpoint>需替換為您的Project所在region的Endpoint。
        o = ODPS(
            account=account,
            project="<odps_project>", 
            endpoint="<odps_endpoint>" 
        )
    
        for t in o.list_tables():
            print(t)
    

    其中:

    • <odps_project>需替換為您的Project名稱。您可以登入MaxCompute控制台,在指定地區的工作區 > 專案管理中,查看具體的Project名稱。

      說明

      如果您使用RAM使用者,請確保該使用者已具備專案的操作許可權,詳情請參見授權給其他使用者

    • <odps_endpoint>需替換為您的Project所在Region的Endpoint。因EAS預設不通公網,此處應配置內網Endpoint地址(例如https://service.cn-hangzhou-vpc.maxcompute.aliyun-inc.com/api)。如果需要使用公網Endpoint(例如https://service.cn-hangzhou.maxcompute.aliyun.com/api),則需為EAS配置具有公網訪問能力的專用網路,詳情請參見配置網路連通

    三方庫配置

    配置以下三方庫列表,來安裝阿里雲Credentials工具、PyODPS SDK和OSS SDK。

    alibabacloud_credentials
    pyodps
    oss2
    說明

    如果鏡像中已預裝此庫,該配置步驟可省略。

    服務配置

    PAI預設角色為例,在服務配置地區JSON中添加以下配置:

    "options": {
            "enable_ram_role": true
        }
    說明

    如果使用JSON直接部署,並且希望通過PAI預設角色調用OSS SDK時,需要確保服務配置中包含metadata.workspace_id欄位。

  3. 參數配置完成後,單擊部署

    服務部署成功後,您可以在服務日誌中查看運行結果。

常見問題

部署EAS服務時配置自訂RAM角色報錯,應如何解決?

  • 報錯資訊:image

    登入RAM控制台,確認角色是否存在。

    • 若角色不存在,請將執行個體自訂RAM角色修改為已存在的角色。

    • 若角色存在,請聯絡主帳號為子帳號授予如下自訂權限原則(需將${RoleName}替換為RAM角色名稱),以獲得將RAM角色傳遞給EAS執行個體的許可權,詳情請參見為RAM使用者授權

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "acs:ram::*:role/${RoleName}"
          }
        ]
      }
  • 部署事件報錯資訊為unable to render, error: failed to assume role for user, reason: You are not authorized to do this action. You should be authorized by RAM.

    可在模型線上服務(EAS)頁面,單擊服務名稱,然後切換到部署事件頁簽進行查看。如下圖所示:image

    該問題一般是由於您的角色未配置信任策略。您可以按照以下操作步驟為您的角色添加信任策略:

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

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

    3. 角色頁面,單擊目標RAM角色名稱。

    4. 信任策略頁簽,單擊編輯信任策略,添加信任"eas.pai.aliyuncs.com"

    5. 在編輯器中修改信任策略內容,然後單擊確定

      假設該角色原始的信任策略為:

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::aaa:root"
              ],
              "Service": [
                "xxx.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }

      則新的策略內容如下:

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::aaa:root"
              ],
              "Service": [
                "xxx.aliyuncs.com",
                "eas.pai.aliyuncs.com" 
              ]
            }
          }
        ],
        "Version": "1"
      }