すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:DSW インスタンスの RAM ロールを設定する

最終更新日:Nov 09, 2025

Data Science Workshop (DSW) インスタンスから他のクラウドリソースにアクセスする場合、ID 検証のために AccessKey ペアを設定する必要があります。RAM ロールを DSW インスタンスに関連付けることで、インスタンスはロールの一時的なセキュリティトークンサービス (STS) 認証情報を使用して他のクラウドリソースにアクセスできます。これにより、長期的な AccessKey ペアを設定する必要がなくなり、キー漏洩のリスクが軽減されます。

インスタンス RAM ロールとは

インスタンス RAM ロールを使用すると、インスタンスは RAM ロールを偽装できます。その後、インスタンスはロールの一時的な ID 認証情報であるセキュリティトークンサービス (STS) トークンを取得します。このトークンを使用して、ロールとして承認されたリソースにアクセスできます。このメソッドは、サービス間のアクセス問題を解決し、次の利点を提供します:

  • 安全で機密性が高い: インスタンスで認証情報を管理する必要はありません。長期的な AccessKey ペアの代わりに一時的な STS アクセス認証情報を使用することで、キー漏洩のリスクを軽減できます。

  • 便利で制御可能: インスタンス RAM ロールの権限ポリシーを変更して、DSW インスタンス内のクラウドリソースへの開発者のアクセスをより便利かつ詳細に制御できます。

制限

DSW インスタンスには 1 つの RAM ロールしか関連付けることができません。

手順

ステップ 1: DSW インスタンスの RAM ロールを設定する

シナリオ 1: PAI のデフォルトロール

PAI のデフォルトロールは、内部 PAI プロダクト、MaxCompute、および Object Storage Service (OSS) にアクセスするための詳細な権限を提供します。このロールから発行された一時的なアクセス認証情報は、内部 PAI プロダクトおよび MaxCompute テーブルへのアクセスに関して、DSW インスタンスのオーナーと同等の権限を付与します。OSS アクセスの場合、権限は現在のワークスペースでデフォルトのストレージパスとして設定されているバケットに限定されます。

PAI のデフォルトロールをインスタンスに付与した後、次のシナリオでは AccessKey ペアを設定する必要はありません:

  • PAI SDK を使用して現在のワークスペースにトレーニングジョブを送信する。

  • DLC SDK を使用して現在のワークスペースにトレーニングジョブを送信する。

  • ODPS SDK を使用して、インスタンスのオーナーが実行権限を持つ MaxCompute プロジェクトにジョブを送信する。

  • OSS SDK を使用して、現在のワークスペースのデフォルトのストレージパスとして設定されているバケット内のデータにアクセスする。

  • WebIDE で Tongyi Lingma サービスを使用する。

image

シナリオ 2:カスタムロール

  1. RAM コンソールにログインし、RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud サービス用の RAM ロールを作成する」をご参照ください。

    主要なパラメーターを次のように設定します:

    • [信頼できるエンティティタイプ]: Alibaba Cloud サービス

    • [信頼できるサービス]: Platform For AI / PAI (pai.aliyun.cs.com)

  2. 作成したインスタンス RAM ロールに権限を付与します。

    [権限の付与] をクリックして、AliyunOSSFullAccess などのシステムまたはカスタム権限ポリシーを RAM ロールに付与します。これにより、ロールは関連リソースにアクセスしたり管理したりできるようになります。詳細については、「ステップ 3: RAM ロールに権限を付与する」をご参照ください。

    説明

    RAM ユーザーを使用して DSW インスタンスを操作している場合は、Alibaba Cloud アカウントのオーナーに連絡して次の権限ポリシーを作成し、RAM ユーザーに付与してください。これにより、RAM ユーザーはインスタンス RAM ロールを使用する権限が付与されます。

    作成する権限ポリシーについては、次のコードを参照してください。${RoleName} を DSW インスタンス RAM ロールの名前に置き換えてください。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "acs:ram::*:role/${RoleName}" // インスタンスRAMロールの名前で置き換えてください。
        }
      ]
    }
  3. DSW インスタンスを作成し、インスタンス RAM ロールを関連付けます。詳細については、「DSW インスタンスを作成する」をご参照ください。

    image

シナリオ 3: RAM ロールを関連付けない

インスタンスがワークスペースで公開されている場合は、セキュリティリスクを防ぐために RAM ロールを関連付けないでください。インスタンスを作成または設定を変更する際に、[詳細情報] セクションの [インスタンス RAM ロール][ロールを関連付けない] に設定します。

image

インスタンス RAM ロールの設定を更新する

  1. DSW ページに移動します。

    1. PAI コンソール にログオンします。

    2. [概要] ページで、ターゲットリージョンを選択します。

    3. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。[ワークスペース] ページで、管理したいワークスペースの名前をクリックします。

    4. ワークスペースページの左側のナビゲーションウィンドウで、[モデル開発とトレーニング] > [Data Science Workshop (DSW)] を選択して DSW ページに移動します。

  2. DSW インスタンスの [設定の変更] をクリックします。

  3. [ロールと権限] セクションで、インスタンス RAM ロールを設定できます。

    説明

    実行中のインスタンスのインスタンス RAM ロールを [PAI デフォルトロール] または [カスタムロール] から [ロールを関連付けない] に変更した場合、または [ロールを関連付けない] から [PAI デフォルトロール] または [カスタムロール] に変更した場合、インスタンスはすぐに再起動します。続行する前に、インスタンスのデータを保存したことを確認してください。

  4. 設定が完了したら、[OK] をクリックします。

ステップ 2: インスタンス RAM ロールに基づいて一時的なアクセス認証情報を取得する

RAM ロールが関連付けられた DSW インスタンスから、次の方法で一時的なアクセス認証情報を取得できます。

方法 1: Credentials ツールを使用して認証情報を取得する

Credentials ツールは、インスタンス作成時に自動的に注入されるインスタンス上のローカルサービスを呼び出して、一時的な STS アクセス認証情報を取得します。この認証情報は定期的に更新されます。

Credentials ツールを使用してインスタンス RAM ロールのアクセス認証情報を取得するには、次のコマンドを実行して Alibaba Cloud Credentials ツールをインストールします。次の例では Python を使用します。

pip install alibabacloud_credentials

次のコードは、Credentials ツールの使用例を示しています。他の言語の SDK の例については、「アクセス認証情報を使用して Alibaba Cloud 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)

方法 2: DSW インスタンスのローカルサービスに直接アクセスして認証情報を取得する

DSW インスタンスでは、ターミナルで次のコマンドを実行して、ローカルで自動的に注入されたサーバーに直接アクセスできます。

# インスタンス RAM ロールの一時的なアクセス認証情報を取得します。
curl $ALIBABA_CLOUD_CREDENTIALS_URI

以下は応答のサンプルです:

  • SecurityToken: インスタンス RAM ロールの一時トークン。

  • Expiration: インスタンス RAM ロールの一時的なアクセス認証情報の有効期限。

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

方法 3: インスタンス内のローカルファイルに直接アクセスして認証情報を取得する

DSW インスタンス内の指定されたパスにあるファイルにアクセスして、インスタンス RAM ロールの一時的なアクセス認証情報を取得できます。PAI はこのファイルを自動的に注入し、定期的に更新します。ファイルパスは /mnt/.alibabacloud/credentials です。ファイルの内容は次のとおりです:

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

ステップ 3: インスタンス RAM ロールを使用して他の Alibaba Cloud サービスにアクセスする

例 1: インスタンス RAM ロールを使用して MaxCompute にアクセスする

  1. 次のコマンドを実行して、Credentials ツールと ODPS SDK をインストールします。

    # Credentials ツールをインストールします。
    pip install alibabacloud_credentials
    # ODPS SDK をインストールします。
    pip install odps
  2. インスタンス RAM ロールの一時的な認証情報を使用して MaxCompute にアクセスし、特定のプロジェクト内のテーブルのリストを取得します。さまざまなリージョンの MaxCompute エンドポイントの詳細については、「エンドポイント」をご参照ください。

    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}", # これをプロジェクト名に置き換えてください。
                 endpoint="{odps_endpoint}"# これをプロジェクトが配置されているリージョンのエンドポイントに置き換えてください。
                )
    
        for t in o.list_tables():
            print(t)

例 2: インスタンス RAM ロールを使用して Object Storage Service (OSS) にアクセスする

  1. 次のコマンドを実行して、Credentials ツールと OSS SDK をインストールします。

    # Credentials ツールをインストールします。
    pip install alibabacloud_credentials
    # OSS SDK をインストールします。
    pip install oss2
  2. インスタンス RAM ロールの一時的な認証情報を使用して OSS にアクセスし、指定されたバケット内の 10 個のファイルをリストします。さまざまなリージョンの OSS エンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

    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 バケットが配置されているリージョンのエンドポイントに置き換えてください。
                         '{oss_bucket}'# これを OSS バケット名に置き換えてください。
                        )
    
    for b in islice(oss2.ObjectIterator(bucket), 10):
        print(b.key)

例 3: インスタンス RAM ロールを使用して DLC にアクセスする

  1. 次のコマンドを実行して、Credentials ツール、OpenAPI SDK、および DLC SDK をインストールします。

    # Credentials ツールをインストールします。
    pip install alibabacloud_credentials
    # Alibaba Cloud 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 クライアントを初期化します。
    credentialsClient = CredClient()
    config = Config(credential=credentialsClient)
    config.endpoint = '{dlc_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])

FAQ

Q: カスタムロールを選択すると、PassRoleFailedError でインスタンスの作成に失敗します。どうすれば解決できますか?

RAM コンソールにログインして、ロールが存在するかどうかを確認します。

  • ロールが存在しない場合は、インスタンス RAM ロールを既存のロールに変更します。

  • ロールが存在する場合は、Alibaba Cloud アカウントのオーナーに連絡して、RAM ユーザーにロールを使用する権限を付与してください。権限ポリシーは次のとおりです。${RoleName} を RAM ロールの名前に置き換えてください。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "acs:ram::*:role/${RoleName}" // RAMロールの名前で置き換えてください。
        }
      ]
    }

Q: カスタムロールを選択すると、AssumeRoleFailedError でインスタンスの作成に失敗します。どうすれば解決できますか?

このエラーは通常、ロールに信頼ポリシーが設定されていないために発生します。この問題を解決するには、次の手順を実行します:

  1. RAM 管理者として RAM コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  3. [ロール] ページで、ターゲット RAM ロールの名前をクリックします。

  4. [信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックします。

  5. 信頼ポリシーの内容を変更し、[OK] をクリックします。

    たとえば、ロールの元の信頼ポリシーは次のとおりです:

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