當您在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角色。具體操作,請參見創建訓練任務。
配置RAM角色后,您需要基于DLC關聯的RAM角色獲取臨時訪問憑證。
場景二:為DLC任務授權自定義角色
當PAI默認角色的臨時訪問憑證權限無法滿足您的需求時,您可以自行創建RAM角色并自定義其權限策略,按需控制開發者在任務內可訪問的云資源范圍。具體操作步驟如下:
登錄RAM控制臺,創建RAM角色。具體操作,請參見創建可信實體為阿里云服務的RAM角色。
其中,關鍵參數配置如下:
選擇可信實體類型:阿里云服務
角色類型:普通服務角色
選擇受信服務:人工智能平臺PAI
為已創建的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角色名稱。
提交DLC任務并關聯RAM角色。您只需在角色信息區域配置以下關鍵參數,其他參數配置說明,請參見創建訓練任務。
參數
描述
實例RAM角色
選擇自定義角色。
RAM角色
選擇在上述步驟中已創建的RAM角色。該任務在基于STS臨時憑證訪問云產品時,擁有的權限將與該自定義角色的權限保持一致。
配置RAM角色后,您需要基于DLC關聯的RAM角色獲取臨時訪問憑證。
場景三:DLC任務不關聯RAM角色
無需使用密鑰訪問數據時,建議您不關聯角色。您可以在創建DLC任務時,在角色信息區域,選擇不關聯角色作為實例RAM角色即可。具體操作,請參見創建訓練任務。
基于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 failed或check 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。
該問題一般是由于您的角色未配置信任策略。您可以按照以下操作步驟為您的角色添加信任策略:
使用RAM管理員登錄RAM控制臺。
在左側導航欄,選擇 。
在角色頁面,單擊目標RAM角色名稱。
在信任策略頁簽,單擊編輯信任策略。
修改信任策略內容,然后單擊保存信任策略。
假設該角色原始的信任策略為:
{ "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" }