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 サービスを使用する。

シナリオ 2:カスタムロール
RAM コンソールにログインし、RAM ロールを作成します。詳細については、「信頼できる Alibaba Cloud サービス用の RAM ロールを作成する」をご参照ください。
主要なパラメーターを次のように設定します:
[信頼できるエンティティタイプ]: Alibaba Cloud サービス
[信頼できるサービス]: Platform For AI / PAI (pai.aliyun.cs.com)
作成したインスタンス 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ロールの名前で置き換えてください。 } ] }DSW インスタンスを作成し、インスタンス RAM ロールを関連付けます。詳細については、「DSW インスタンスを作成する」をご参照ください。

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

インスタンス RAM ロールの設定を更新する
DSW ページに移動します。
PAI コンソール にログオンします。
[概要] ページで、ターゲットリージョンを選択します。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。[ワークスペース] ページで、管理したいワークスペースの名前をクリックします。
ワークスペースページの左側のナビゲーションウィンドウで、[モデル開発とトレーニング] > [Data Science Workshop (DSW)] を選択して DSW ページに移動します。
DSW インスタンスの [設定の変更] をクリックします。
[ロールと権限] セクションで、インスタンス RAM ロールを設定できます。
説明実行中のインスタンスのインスタンス RAM ロールを [PAI デフォルトロール] または [カスタムロール] から [ロールを関連付けない] に変更した場合、または [ロールを関連付けない] から [PAI デフォルトロール] または [カスタムロール] に変更した場合、インスタンスはすぐに再起動します。続行する前に、インスタンスのデータを保存したことを確認してください。
設定が完了したら、[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 にアクセスする
次のコマンドを実行して、Credentials ツールと ODPS SDK をインストールします。
# Credentials ツールをインストールします。 pip install alibabacloud_credentials # ODPS SDK をインストールします。 pip install odpsインスタンス 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) にアクセスする
次のコマンドを実行して、Credentials ツールと OSS SDK をインストールします。
# Credentials ツールをインストールします。 pip install alibabacloud_credentials # OSS SDK をインストールします。 pip install oss2インスタンス 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 にアクセスする
次のコマンドを実行して、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インスタンス 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 でインスタンスの作成に失敗します。どうすれば解決できますか?
このエラーは通常、ロールに信頼ポリシーが設定されていないために発生します。この問題を解決するには、次の手順を実行します:
RAM 管理者として RAM コンソールにログインします。
左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。
[ロール] ページで、ターゲット RAM ロールの名前をクリックします。
[信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックします。
信頼ポリシーの内容を変更し、[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" }