全部產品
Search
文件中心

Platform For AI:配置DLC RAM角色

更新時間:Oct 24, 2024

當您在DLC任務中訪問其他雲資源時,必須配置存取金鑰來驗證身份資訊。通過為DLC任務關聯RAM角色,您可在任務內基於STS臨時憑證訪問其他雲資源,無需再配置長期AccessKey,減少密鑰泄漏的風險。本文主要介紹如何建立RAM角色並授權給DLC,以及如何基於RAM角色擷取STS臨時訪問憑證。

功能優勢

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

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

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

使用限制

目前,一個DLC任務只能關聯一個RAM角色。

配置方法

在建立DLC任務時,您需要為DLC配置RAM角色,並擷取STS臨時訪問憑證。

為DLC配置RAM角色

情境一:為DLC任務授權PAI預設角色

PAI預設角色基於服務角色AliyunPAIDLCDefaultRole運作,僅擁有訪問MaxCompute和OSS的許可權,且許可權更加精細。基於PAI預設角色簽發的臨時訪問憑證,在訪問MaxCompute表時,將擁有等同於DLC執行個體所有者的許可權;在訪問OSS時,僅能訪問當前工作空間配置的預設OSS儲存空間(Bucket)。

為DLC任務授權PAI預設角色能夠讓您無需額外建立RAM角色,即可在任務內擷取一份可訪問基本開發資源、且無越權的臨時訪問憑證。

  • 使用情境

    為DLC任務授權PAI預設角色後,您在以下情境無需配置AccessKey:

    • 通過PyODPS SDK提交任務到任務所有者有執行許可權的MaxCompute專案中。

    • 通過OSS SDK訪問當前工作空間配置的預設OSS儲存空間(Bucket)中的資料。如何為工作空間配置預設OSS儲存空間,請參見設定工作空間儲存路徑

  • 配置方法

    在建立DLC任務時,您需要在角色資訊地區選取項目PAI預設角色作為執行個體RAM角色。具體操作,請參見建立訓練任務image

配置RAM角色後,您需要基於DLC關聯的RAM角色擷取臨時訪問憑證

情境二:為DLC任務授權自訂角色

PAI預設角色的臨時訪問憑證許可權無法滿足您的需求時,您可以自行建立RAM角色並自訂其權限原則,按需控制開發人員在任務內可訪問的雲資源範圍。具體操作步驟如下:

  1. 登入RAM控制台,建立RAM角色。具體操作,請參見建立可信實體為阿里雲服務的RAM角色

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

    • 選擇可信實體類型阿里雲服務

    • 角色類型普通服務角色

    • 選擇受信服務人工智慧平台PAI

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

    將系統策略或者自訂策略授權給RAM角色,使其擁有相關的資源訪問或操作許可權。具體操作,請參見步驟三:為RAM角色授權。例如授予RAM角色訪問OSS的許可權AliyunOSSReadOnlyAccess。

    若您使用的是RAM使用者(阿里雲子帳號),請聯絡阿里雲帳號(主帳號)為您授予使用該RAM角色的許可權,具體操作,請參見為RAM使用者授權。自訂權限原則內容樣本如下:

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

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

  3. 提交DLC任務並關聯RAM角色。您只需在角色資訊地區配置以下關鍵參數,其他參數配置說明,請參見建立訓練任務image

    參數

    描述

    執行個體RAM角色

    選擇自訂角色

    RAM角色

    選擇在上述步驟中已建立的RAM角色。該任務在基於STS臨時憑證訪問雲產品時,擁有的許可權將與該自訂角色的許可權保持一致。

配置RAM角色後,您需要基於DLC關聯的RAM角色擷取臨時訪問憑證

情境三:DLC任務不關聯RAM角色

無需使用密鑰訪問資料時,建議您不關聯角色。您可以在建立DLC任務時,在角色資訊地區,選擇不關聯角色作為執行個體RAM角色即可。具體操作,請參見建立訓練任務image

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

在建立DLC任務時,若為任務分配了PAI預設角色或自訂角色,您可以通過以下方式便捷地擷取臨時訪問憑證:

方式一:通過Credentials工具擷取

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

在建立DLC任務時,完成以下關鍵配置,更多配置說明,請參見建立訓練任務

  • 安裝阿里雲Credentials工具。

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

    說明

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

  • 配置指令檔。

    以Python為例,指令碼內容樣本如下,更多語言SDK樣本,請參見使用訪問憑據訪問阿里雲OpenAPI最佳實務。您可以通過代碼配置掛載配置,將指令檔上傳至DLC環境中。

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

方式二:直接存取DLC任務本地服務擷取

在建立DLC任務時,您可以在啟動命令中配置以下命令,訪問本地自動注入的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角色的臨時授權訪問憑證的有效期間。

方式三:直接存取任務本地內檔案擷取

在DLC容器中訪問指定路徑的檔案(由PAI自動注入並周期性重新整理),擷取RAM角色的臨時訪問憑證。該檔案所在的路徑為/mnt/.alibabacloud/credentials,檔案內容樣本如下:

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

使用樣本

樣本一:基於DLC的RAM角色訪問ODPS

在建立DLC任務時,完成以下關鍵配置,更多配置說明,請參見建立訓練任務

  • 安裝阿里雲Credentials工具。

    三方庫配置參數中,配置以下三方庫列表,來安裝阿里雲Credentials工具和ODPS SDK。

    alibabacloud_credentials
    pyodps
    說明

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

  • 配置指令檔。

    以Python為例,指令碼內容樣本如下。您可以通過代碼配置掛載配置,將指令檔上傳至DLC環境中,並配置掛載路徑,例如/mnt/data/

    from alibabacloud_credentials import providers
    from odps.accounts import CredentialProviderAccount
    from odps import ODPS
    
    if __name__ == '__main__':
        account = CredentialProviderAccount(providers.DefaultCredentialsProvider())
        o = ODPS(
            account=account,
            project="{odps_project}",  # 需替換為您的Project名稱
            endpoint="{odps_endpoint}"  # 需替換為您的Project所在region的Endpoint
        )
    
        for t in o.list_tables():
            print(t)
    
  • 配置執行命令。

    啟動命令配置為執行指令碼的命令。例如python /mnt/data/xx.py

  • 配置角色資訊。

    執行個體RAM角色選擇PAI預設角色

樣本二:基於DLC的RAM角色訪問OSS

在建立DLC任務時,完成以下關鍵配置,更多配置說明,請參見建立訓練任務

  • 安裝阿里雲Credentials工具。

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

    alibabacloud_credentials
    oss2
    說明

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

  • 配置指令檔。

    以Python為例,指令碼內容樣本如下。您可以通過代碼配置掛載配置,將指令檔上傳至DLC環境中,並配置掛載路徑,例如/mnt/data/

    import oss2
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials import providers
    from itertools import islice
    
    auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider())
    bucket = oss2.Bucket(auth,
                         '{oss_endpoint}',  # 需替換為您的oss bucket所在region的endpoint
                         '{oss_bucket}'  # 需替換為您的oss bucket名稱
             )
    for b in islice(oss2.ObjectIterator(bucket), 10):
        print(b.key)
    
  • 配置執行命令。

    啟動命令配置為執行指令碼的命令。例如python /mnt/data/xx.py

  • 配置角色資訊。

    執行個體RAM角色選擇PAI預設角色

常見問題

建立DLC任務時選擇自訂角色報錯,應如何解決?

  • 報錯資訊為check permission for ram role failedcheck permission for sub user failed

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

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

    • 若角色存在,您需聯絡主帳號,為您的子帳號授予使用該角色的許可權,詳情請參見為RAM使用者授權。自訂權限原則如下(需將${RoleName}替換為RAM角色的名稱):

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "acs:ram::*:role/${RoleName}"
          }
        ]
      }
  • 報錯資訊為Failed to assume role for user

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

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

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

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

    4. 信任策略頁簽,單擊編輯信任策略

    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",
                "pai.aliyuncs.com" 
              ]
            }
          }
        ],
        "Version": "1"
      }