當您在DSW執行個體內訪問其他雲資源時,必須配置存取金鑰來驗證身份資訊。通過為DSW執行個體關聯RAM角色,執行個體即可使用該角色的STS臨時身份憑證訪問其他雲資源,無需再配置長期AccessKey,降低了密鑰泄露的風險。
什麼是執行個體RAM角色
執行個體RAM角色是指:允許執行個體扮演某個RAM角色,之後執行個體將獲得角色的臨時身份憑證,即安全性權杖(STS Token),使用該安全性權杖就能以該角色的身份訪問被授權的資源,用於解決跨服務訪問的問題。其具有以下優勢:
安全保密:無需在執行個體內管理認證,使用STS臨時訪問憑證替代長期AccessKey,降低密鑰泄露風險。
便捷可控:通過修改執行個體RAM角色的權限原則,可更便捷、更精細地控制各開發人員在DSW執行個體內訪問雲資源時的許可權。
使用限制
一個DSW執行個體目前只能關聯一個RAM角色。
實施步驟
步驟一:為DSW執行個體配置RAM角色

情境一:PAI預設角色
PAI預設角色僅擁有訪問PAI內部產品、MaxCompute和OSS的許可權,且許可權更加精細。基於PAI預設角色簽發的臨時訪問憑證,在訪問PAI內部產品、MaxCompute表時,將擁有等同於DSW執行個體所有者的許可權;在訪問OSS時,僅能訪問當前工作空間配置的預設儲存路徑Bucket。
為執行個體授權PAI預設角色後,使用者在以下情境中無需配置AccessKey:
通過PAI SDK建立訓練任務提交至當前工作空間。
通過DLC SDK建立訓練任務提交至當前工作空間。
通過ODPS SDK提交任務到執行個體所有者有執行許可權的MaxCompute專案中。
通過OSS SDK訪問當前工作空間配置的預設儲存路徑Bucket中的資料。
在WebIDE中使用通義靈碼服務。
情境二:自訂角色
登入RAM控制台,建立RAM角色。具體操作,請參見建立可信實體為阿里雲服務的RAM角色。
其中,關鍵參數配置如下:
信任主體類型:雲端服務
信任主體名稱:人工智能平台PAI (pai.aliyun.cs.com)
為已建立的執行個體RAM角色授權。
單擊新增授權,將系統策略或者自訂權限原則授權給RAM角色,使其擁有相關的資源訪問或操作許可權,例如添加AliyunOSSFullAccess策略。詳情請參見步驟三:為RAM角色授權。
說明若您使用的是RAM子帳號操作DSW執行個體,請聯絡阿里主帳號建立如下權限原則,並授權給您的RAM子帳號,使子帳號具有使用該執行個體RAM角色的許可權。
需要建立的權限原則請參見如下代碼,其中,需要將
${RoleName}替換為DSW執行個體RAM角色的名稱。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }建立DSW執行個體並關聯執行個體RAM角色。具體操作,請參見建立DSW執行個體。
情境三:不關聯RAM角色
如果您的執行個體設定為工作空間公開可見,建議不要為執行個體關聯RAM角色,避免許可權泄露。您可以在建立執行個體或變更執行個體配置時,將高级信息地區的实例RAM角色設定為不关联角色。
更新執行個體RAM角色配置
進入DSW頁面。
登入PAI控制台。
在概览頁面選擇目標地區。
在左側導覽列單擊工作空间列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。
在工作空間頁面的左側導覽列選擇模型开发与训练 > 交互式建模(DSW),進入DSW頁面。
單擊DSW執行個體右側的变更配置。
在角色与权限地區配置執行個體RAM角色。
說明當執行個體RAM由PAI默认角色/自定义角色切換為不关联角色,或由不关联角色切換為PAI默认角色/自定义角色時,如果執行個體正在運行中,更新操作會立即重啟執行個體。請確保您已及時儲存執行個體。
完成配置後,單擊确定。
步驟二:基於執行個體RAM角色擷取臨時訪問憑證
您可在授權過RAM角色的DSW執行個體中通過以下方式擷取臨時訪問憑證。
方式一:通過Credentials工具擷取
Credentials工具會調用執行個體本地的服務(執行個體建立時已自動注入)擷取STS臨時訪問憑證,該憑證會周期性更新。
通過Credentials工具擷取執行個體RAM角色的訪問憑證,需要執行如下命令安裝阿里雲Credentials工具(以Python為例)。
pip install alibabacloud_credentialsCredentials工具使用樣本如下,更多語言SDK樣本,請參見使用訪問憑據訪問阿里雲OpenAPI最佳實務。
from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
credentialsConfig = CredConfig(
type='credentials_uri' # 選填。若您未配置其他“預設憑據鏈”訪問方式,您無需再顯式指定,Credentials SDK會通過uri方式擷取臨時憑證
)
credentialsClient = CredClient(credentialsConfig)方式二:直接存取DSW執行個體本地服務擷取
在DSW執行個體內,您可在Terminal執行如下命令,訪問本地自動注入的server直接擷取。
# 擷取執行個體RAM角色的臨時授權訪問憑證
curl $ALIBABA_CLOUD_CREDENTIALS_URI返回樣本如下,其中:
SecurityToken:執行個體RAM角色的臨時Token。
Expiration:執行個體RAM角色的臨時授權訪問憑證的有效期間。
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}方式三:直接存取執行個體本地內檔案擷取
您可在DSW執行個體內訪問指定路徑的檔案(由PAI自動注入並周期性重新整理),擷取執行個體RAM角色的臨時訪問憑證。該檔案所在的路徑為/mnt/.alibabacloud/credentials,檔案內容如下:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}步驟三:基於執行個體RAM角色訪問其他雲產品
樣本一:基於執行個體RAM角色訪問MaxCompute
執行如下命令,安裝Credentials工具和ODPS SDK。
# 安裝credentials工具 pip install alibabacloud_credentials # 安裝odps sdk pip install odps使用執行個體RAM角色的臨時憑證訪問MaxCompute,並擷取指定專案的table列表。查詢MaxCompute不同地區endpoint,請參見Endpoint。
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)
樣本二:基於執行個體RAM角色訪問Object Storage Service
執行如下命令,安裝Credentials工具和OSS SDK。# 安裝credentials工具 pip install alibabacloud_credentials # 安裝oss sdk pip install oss2使用執行個體RAM角色的臨時憑證訪問OSS,並列舉指定Bucket下的10個檔案。查詢OSS不同地區endpoint,請參見地區和Endpoint。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)
樣本三:基於執行個體RAM角色訪問DLC
執行如下命令,安裝Credentials工具、OpenAPI SDK和DLC SDK。# 安裝credentials工具 pip install alibabacloud_credentials # 安裝阿里雲openapi sdk pip install alibabacloud-tea-util alibabacloud_tea_openapi # 安裝pai-dlc sdk pip install alibabacloud_pai_dlc20201203使用執行個體RAM角色的臨時憑證訪問PAI-DLC,並列舉指定工作空間下的DLC任務。from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.client import Client as pai_dlc20201203Client from alibabacloud_pai_dlc20201203 import models as pai_dlc_20201203_models from alibabacloud_tea_util.models import RuntimeOptions # 使用Credentials工具初始化DLC client credentialsClient = CredClient() config = Config(credential=credentialsClient) config.endpoint = '{dlc_endpoint}' #需替換為您所在region的endpoint client = pai_dlc20201203Client(config) # 初始化請求,並調用ListJobs API list_jobs_request = pai_dlc_20201203_models.ListJobsRequest() list_jobs_request.workspace_id = '{workspace_id}' #需替換為您的工作空間ID runtime_options = RuntimeOptions() headers = {} resp = client.list_jobs_with_options(list_jobs_request, headers, runtime_options) jobs = resp.to_map()['body']['Jobs'] print(jobs[0])
常見問題
Q:選擇自訂角色時,建立執行個體報錯PassRoleFailedError,應如何解決?
登入RAM控制台,確認該角色是否存在。
若角色不存在,您需將執行個體RAM角色修改為已存在的角色。若角色存在,您需聯絡主帳號,為您的子帳號授予使用該角色的許可權。權限原則如下(需將${RoleName}替換為RAM角色的名稱):{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
Q:選擇自訂角色時,建立執行個體報錯AssumeRoleFailedError,應如何解決?
該問題的原因,一般由於是您的角色未配置信任策略。請按照如下步驟進行操作:
使用Resource Access Management員登入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" }