全部產品
Search
文件中心

Platform For AI:配置DSW執行個體RAM角色

更新時間:Oct 23, 2024

當您在DSW執行個體內訪問其他雲資源時,必須配置存取金鑰來驗證身份資訊。通過為DSW執行個體關聯RAM角色,您可以在執行個體內基於STS臨時憑證訪問其他雲資源,無需再配置長期AccessKey,降低密鑰泄露的風險。本文為您介紹如何建立可信實體為阿里雲服務的RAM角色並授權給DSW執行個體,以及如何基於執行個體RAM角色擷取STS臨時訪問憑證。

背景資訊

執行個體RAM角色是一種可信實體為阿里雲服務的RAM角色,即允許雲端服務扮演的角色,用於解決跨服務訪問的問題。關於RAM角色的詳細說明,請參見什麼是RAM角色

基於執行個體RAM角色擷取臨時訪問憑證來驗證身份資訊和存取權限控制,具有以下優勢:

  • 安全保密

    無需在執行個體內管理認證,使用STS臨時訪問憑證替代長期AccessKey,降低密鑰泄露風險。

  • 便捷可控

    通過修改執行個體RAM角色的權限原則,可更便捷、更精細地控制各開發人員在DSW執行個體內訪問雲資源時的許可權。

使用限制

一個DSW執行個體現只能關聯一個RAM角色。

步驟一:為DSW執行個體配置RAM角色

情境一:為執行個體授權PAI預設角色

PAI預設角色僅擁有訪問PAI內部產品、MaxCompute和OSS的許可權,且許可權更加精細。基於PAI預設角色簽發的臨時訪問憑證,在訪問PAI內部產品、MaxCompute表時,將擁有等同於DSW執行個體所有者的許可權;在訪問OSS時,僅能訪問當前工作空間配置的預設儲存路徑Bucket。

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

為執行個體授權PAI預設角色後,以下情境的使用者可以免配置AK:

  • 通過PAI SDK建立訓練任務提交至當前工作空間。

  • 通過DLC SDK建立訓練任務提交至當前工作空間。

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

  • 通過OSS SDK訪問當前工作空間配置的預設儲存路徑Bucket中的資料。

  • 在WebIDE中使用通義靈碼服務。

image

情境二:為執行個體授權自訂角色

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

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

    • 角色類型阿里雲服務

    • 角色類型普通服務角色

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

  2. 為已建立的執行個體RAM角色授權。

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

    (可選)PAI預設角色的RAM策略如下,您可以基於該策略進行添加或修改。

    {
        "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使用者(子帳號),請聯絡阿里雲帳號(主帳號)為您授予使用該執行個體RAM角色的許可權。

    權限原則請參見如下代碼,其中,需要將${RoleName}替換為DSW執行個體RAM角色的名稱。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "acs:ram::*:role/${RoleName}"
        }
      ]
    }
  3. 建立DSW執行個體並關聯執行個體RAM角色。具體操作,請參見建立DSW執行個體

    image

情境三:執行個體不關聯RAM角色

如果您的執行個體設定為工作空間公開可見,建議不要為執行個體關聯RAM角色,避免許可權泄露。您可以在建立執行個體或變更執行個體配置時,將進階資訊地區的執行個體RAM角色設定為不關聯角色

image

更新執行個體RAM角色配置

  1. 進入DSW頁面。

    1. 登入PAI控制台

    2. 概覽頁面選擇目標地區。

    3. 在左側導覽列單擊工作空間列表,在工作空間列表頁面中單擊待操作的工作空間名稱,進入對應工作空間內。

    4. 在工作空間頁面的左側導覽列選擇模型開發與訓練>互動式建模(DSW),進入DSW頁面。

  2. 單擊DSW執行個體右側的變更配置

  3. 進階資訊地區配置執行個體RAM角色。

    說明

    當執行個體RAM由PAI預設角色/自訂角色切換為不關聯角色,或由不關聯角色切換為PAI預設角色/自訂角色時,如果執行個體正在運行中,更新操作會立即重啟執行個體。請確保您已及時儲存執行個體。

  4. 完成配置後,單擊確定

步驟二:基於執行個體RAM角色擷取臨時訪問憑證

您可在授權過RAM角色的DSW執行個體中通過以下方式擷取臨時訪問憑證。

方式一:通過Credentials工具擷取

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

通過Credentials工具擷取執行個體RAM角色的訪問憑證,需要執行如下命令安裝阿里雲Credentials工具(以Python為例)。

pip install alibabacloud_credentials

Credentials工具使用樣本如下,更多語言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(CredConfig)

方式二:直接存取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角色訪問ODPS

  1. 執行如下命令,安裝Credentials工具和ODPS SDK。

    # 安裝credentials工具
    pip install alibabacloud_credentials
    # 安裝odps sdk
    pip install odps
  2. 使用執行個體RAM角色的臨時憑證訪問ODPS,並擷取指定專案的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)

樣本二:基於執行個體RAM角色訪問OSS

  1. 執行如下命令,安裝Credentials工具和OSS SDK。

    # 安裝credentials工具
    pip install alibabacloud_credentials
    # 安裝oss sdk
    pip install oss2
  2. 使用執行個體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)

樣本三:基於執行個體RAM角色訪問DLC

  1. 執行如下命令,安裝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
  2. 使用執行個體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])

常見問題

選擇自訂角色時,建立執行個體報錯PassRoleFailedError,應如何解決?

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

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

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

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

選擇自訂角色時,建立執行個體報錯AssumeRoleFailedError,應如何解決?

該問題的原因,一般由於是您的角色未配置信任策略。請按照如下步驟進行操作:

  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"
    }