配置DSW實(shí)例RAM角色
當(dāng)您在DSW實(shí)例內(nèi)訪問其他云資源時,必須配置訪問密鑰來驗(yàn)證身份信息。通過為DSW實(shí)例關(guān)聯(lián)RAM角色,您可以在實(shí)例內(nèi)基于STS臨時憑證訪問其他云資源,無需再配置長期AccessKey,降低密鑰泄露的風(fēng)險(xiǎn)。本文為您介紹如何創(chuàng)建可信實(shí)體為阿里云服務(wù)的RAM角色并授權(quán)給DSW實(shí)例,以及如何基于實(shí)例RAM角色獲取STS臨時訪問憑證。
背景信息
實(shí)例RAM角色是一種可信實(shí)體為阿里云服務(wù)的RAM角色,即允許云服務(wù)扮演的角色,用于解決跨服務(wù)訪問的問題。關(guān)于RAM角色的詳細(xì)說明,請參見什么是RAM角色。
基于實(shí)例RAM角色獲取臨時訪問憑證來驗(yàn)證身份信息和訪問權(quán)限控制,具有以下優(yōu)勢:
安全保密
無需在實(shí)例內(nèi)管理憑據(jù),使用STS臨時訪問憑證替代長期AccessKey,降低密鑰泄露風(fēng)險(xiǎn)。
便捷可控
通過修改實(shí)例RAM角色的權(quán)限策略,可更便捷、更精細(xì)地控制各開發(fā)者在DSW實(shí)例內(nèi)訪問云資源時的權(quán)限。
使用限制
一個DSW實(shí)例現(xiàn)只能關(guān)聯(lián)一個RAM角色。
步驟一:為DSW實(shí)例配置RAM角色
場景一:為實(shí)例授權(quán)PAI默認(rèn)角色
PAI默認(rèn)角色僅擁有訪問PAI內(nèi)部產(chǎn)品、MaxCompute和OSS的權(quán)限,且權(quán)限更加精細(xì)。基于PAI默認(rèn)角色簽發(fā)的臨時訪問憑證,在訪問PAI內(nèi)部產(chǎn)品、MaxCompute表時,將擁有等同于DSW實(shí)例所有者的權(quán)限;在訪問OSS時,僅能訪問當(dāng)前工作空間配置的默認(rèn)存儲路徑Bucket。
為實(shí)例授權(quán)PAI默認(rèn)角色能夠讓您無需額外創(chuàng)建RAM角色,即可在實(shí)例內(nèi)獲取一份可訪問基本開發(fā)資源、且無越權(quán)的臨時訪問憑證。
為實(shí)例授權(quán)PAI默認(rèn)角色后,以下場景的用戶可以免配置AK:
通過PAI SDK創(chuàng)建訓(xùn)練任務(wù)提交至當(dāng)前工作空間。
通過DLC SDK創(chuàng)建訓(xùn)練任務(wù)提交至當(dāng)前工作空間。
通過ODPS SDK提交任務(wù)到實(shí)例所有者有執(zhí)行權(quán)限的MaxCompute項(xiàng)目中。
通過OSS SDK訪問當(dāng)前工作空間配置的默認(rèn)存儲路徑Bucket中的數(shù)據(jù)。
在WebIDE中使用通義靈碼服務(wù)。
場景二:為實(shí)例授權(quán)自定義角色
登錄RAM控制臺,創(chuàng)建RAM角色。具體操作,請參見創(chuàng)建可信實(shí)體為阿里云服務(wù)的RAM角色。
其中,關(guān)鍵參數(shù)配置如下:
角色類型:阿里云服務(wù)
角色類型:普通服務(wù)角色
選擇受信服務(wù):人工智能平臺PAI
為已創(chuàng)建的實(shí)例RAM角色授權(quán)。
將系統(tǒng)策略或者自定義權(quán)限策略授權(quán)給RAM角色,使其擁有相關(guān)的資源訪問或操作權(quán)限。具體操作,請參見步驟三:為RAM角色授權(quán)。
(可選)PAI默認(rèn)角色的RAM策略如下,您可以基于該策略進(jìn)行添加或修改。
{ "Version": "1", "Statement": [ { "Action": [ "oss:GetObject", "oss:PutObject", "oss:DeleteObject", "oss:ListParts", "oss:AbortMultipartUpload", "oss:ListObjects", "oss:ListBuckets", "oss:PutBucketCors", "oss:GetBucketCors", "oss:DeleteBucketCors", "oss:GetBucketInfo" ], "Resource": [ "acs:oss:*:*:${bucketName}", "acs:oss:*:*:${bucketName}/*" ], "Effect": "Allow" }, { "Effect": "Allow", "Action": [ "odps:ActOnBehalfOfAnotherUser" ], "Resource": "acs:odps:*:*:users/*" }, { "Effect": "Allow", "Action": [ "pai:AssumeUser" ], "Resource": "acs:pai:*:*:users/*" } ] }
說明若您使用的是RAM用戶(子賬號),請聯(lián)系阿里云賬號(主賬號)為您授予使用該實(shí)例RAM角色的權(quán)限。
權(quán)限策略請參見如下代碼,其中,需要將
${RoleName}
替換為DSW實(shí)例RAM角色的名稱。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
創(chuàng)建DSW實(shí)例并關(guān)聯(lián)實(shí)例RAM角色。具體操作,請參見創(chuàng)建DSW實(shí)例。
場景三:實(shí)例不關(guān)聯(lián)RAM角色
如果您的實(shí)例設(shè)置為工作空間公開可見,建議不要為實(shí)例關(guān)聯(lián)RAM角色,避免權(quán)限泄露。您可以在新建實(shí)例或變更實(shí)例配置時,將高級信息區(qū)域的實(shí)例RAM角色設(shè)置為不關(guān)聯(lián)角色。
更新實(shí)例RAM角色配置
進(jìn)入DSW頁面。
登錄PAI控制臺。
在概覽頁面選擇目標(biāo)地域。
在左側(cè)導(dǎo)航欄單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進(jìn)入對應(yīng)工作空間內(nèi)。
在工作空間頁面的左側(cè)導(dǎo)航欄選擇模型開發(fā)與訓(xùn)練>交互式建模(DSW),進(jìn)入DSW頁面。
單擊DSW實(shí)例右側(cè)的變更配置。
在高級信息區(qū)域配置實(shí)例RAM角色。
說明當(dāng)實(shí)例RAM由PAI默認(rèn)角色/自定義角色切換為不關(guān)聯(lián)角色,或由不關(guān)聯(lián)角色切換為PAI默認(rèn)角色/自定義角色時,如果實(shí)例正在運(yùn)行中,更新操作會立即重啟實(shí)例。請確保您已及時保存實(shí)例。
完成配置后,單擊確定。
步驟二:基于實(shí)例RAM角色獲取臨時訪問憑證
您可在授權(quán)過RAM角色的DSW實(shí)例中通過以下方式獲取臨時訪問憑證。
方式一:通過Credentials工具獲取
Credentials工具會調(diào)用實(shí)例本地的服務(wù)(實(shí)例創(chuàng)建時已自動注入)獲取STS臨時訪問憑證,該憑證會周期性更新。
通過Credentials工具獲取實(shí)例RAM角色的訪問憑證,需要執(zhí)行如下命令安裝阿里云Credentials工具(以Python為例)。
pip install alibabacloud_credentials
Credentials工具使用示例如下,更多語言SDK示例,請參見使用訪問憑據(jù)訪問阿里云OpenAPI最佳實(shí)踐。
from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
credentialsConfig = CredConfig(
type='credentials_uri' # 選填。若您未配置其他“默認(rèn)憑據(jù)鏈”訪問方式,您無需再顯式指定,Credentials SDK會通過uri方式獲取臨時憑證
)
credentialsClient = CredClient(CredConfig)
方式二:直接訪問DSW實(shí)例本地服務(wù)獲取
在DSW實(shí)例內(nèi),您可在Terminal執(zhí)行如下命令,訪問本地自動注入的server直接獲取。
# 獲取實(shí)例RAM角色的臨時授權(quán)訪問憑證
curl $ALIBABA_CLOUD_CREDENTIALS_URI
返回示例如下,其中:
SecurityToken:實(shí)例RAM角色的臨時Token。
Expiration:實(shí)例RAM角色的臨時授權(quán)訪問憑證的有效期。
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
方式三:直接訪問實(shí)例本地內(nèi)文件獲取
您可在DSW實(shí)例內(nèi)訪問指定路徑的文件(由PAI自動注入并周期性刷新),獲取實(shí)例RAM角色的臨時訪問憑證。該文件所在的路徑為/mnt/.alibabacloud/credentials
,文件內(nèi)容如下:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
步驟三:基于實(shí)例RAM角色訪問其他云產(chǎn)品
示例一:基于實(shí)例RAM角色訪問ODPS
執(zhí)行如下命令,安裝Credentials工具和ODPS SDK。
# 安裝credentials工具 pip install alibabacloud_credentials # 安裝odps sdk pip install odps
使用實(shí)例RAM角色的臨時憑證訪問ODPS,并獲取指定項(xiàng)目的table列表。
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)
示例二:基于實(shí)例RAM角色訪問OSS
執(zhí)行如下命令,安裝Credentials工具和OSS SDK。
# 安裝credentials工具 pip install alibabacloud_credentials # 安裝oss sdk pip install oss2
使用實(shí)例RAM角色的臨時憑證訪問OSS,并列舉指定Bucket下的10個文件。
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)
示例三:基于實(shí)例RAM角色訪問DLC
執(zhí)行如下命令,安裝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
使用實(shí)例RAM角色的臨時憑證訪問PAI-DLC,并列舉指定工作空間下的DLC任務(wù)。
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) # 初始化請求,并調(diào)用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])
常見問題
選擇自定義角色時,創(chuàng)建實(shí)例報(bào)錯PassRoleFailedError,應(yīng)如何解決?
登錄RAM控制臺,確認(rèn)該角色是否存在。
若角色不存在,您需將實(shí)例RAM角色修改為已存在的角色。
若角色存在,您需聯(lián)系主賬號,為您的子賬號授予使用該角色的權(quán)限。權(quán)限策略如下(需將
${RoleName}
替換為RAM角色的名稱):{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
選擇自定義角色時,創(chuàng)建實(shí)例報(bào)錯AssumeRoleFailedError,應(yīng)如何解決?
該問題的原因,一般由于是您的角色未配置信任策略。請按照如下步驟進(jìn)行操作:
使用RAM管理員登錄RAM控制臺。
在左側(cè)導(dǎo)航欄,選擇身份管理>角色。
在角色頁面,單擊目標(biāo)RAM角色名稱。
在信任策略頁簽,單擊編輯信任策略。
修改信任策略內(nèi)容,然后單擊保存信任策略。
例如,假設(shè)該角色原始的信任策略為:
{ "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" }