RAM ロールを DSW インスタンスに関連付けることで、インスタンスはロールの一時的な STS 認証情報を使用して他のクラウドリソースにアクセスできるようになります。これにより、長期的な AccessKey を設定する必要がなくなり、認証情報の漏洩リスクが軽減されます。
インスタンス RAM ロールとは
インスタンス RAM ロールは、DSW インスタンスに一時的なロールベースのアイデンティティを提供します。DSW インスタンスに RAM ロールが付与されると、次のことが可能になります。
-
インスタンス内のプロセスは、ローカルメタデータサービスまたは認証情報ファイルから短期間の STS 認証情報を自動的に取得できます。
-
この認証情報には、アタッチされた権限ポリシーで定義された権限が付与されており、OSS、MaxCompute、PAI-DLC などの承認されたクラウドサービスに安全にアクセスできます。
-
コードや設定ファイルに AccessKey を平文で保存することを完全に回避し、セキュリティおよびコンプライアンス要件を満たすことができます。
主なメリットは次のとおりです。
-
安全:長期的な AccessKey の代わりに、自動的に更新される短期間の STS 認証情報を使用するため、ハードコードされたキーや認証情報の漏洩リスクを排除できます。
-
管理が容易:RAM ロールポリシーを通じて権限管理を一元化できます。ポリシーの変更は、インスタンスの再起動やコードの更新なしに即座に反映されます。
-
ネイティブな信頼性:認証情報は Alibaba Cloud Security Token Service (STS) によって発行されるため、追加の認証ミドルウェアを必要とせず、デフォルトで信頼されます。
制限事項
1 つの DSW インスタンスに一度に関連付けられる RAM ロールは 1 つのみです。
操作手順
ステップ 1: RAM ロールの設定
DSW インスタンスの設定ページで、次の 3 つのロールオプションのいずれかを選択できます。
PAI デフォルトロール
Platform for AI (PAI) はデフォルトロールを提供します。このロールをインスタンスに付与すると、AccessKey を設定することなく、次のリソースに自動的にアクセスできるようになります。
-
ODPS SDK を使用して、インスタンス所有者が実行権限を持つ MaxCompute プロジェクトにジョブを送信できます。
-
OSS SDK を使用して、現在のワークスペースに設定されたデフォルトのストレージパスバケット内のデータにアクセスできます。
-
WebIDE で Tongyi Lingma サービスを使用できます。
-
PAI または PAI-DLC SDK を使用して、現在のワークスペースにトレーニングジョブを作成および送信できます。
カスタムロール
-
RAM コンソールにログインし、RAM ロールを作成します。詳細な手順については、「信頼できる Alibaba Cloud サービスの RAM ロールの作成」をご参照ください。
主要なパラメータを次のように設定します。
-
信頼されるエンティティタイプ: Alibaba Cloud サービス
-
信頼されるエンティティ名: [Platform for AI] (pai.aliyun.cs.com)
-
-
RAM ロールに権限を付与します。
[権限の追加] をクリックし、システムポリシーまたはカスタム権限ポリシーを RAM ロールにアタッチします。これにより、ロールに必要なリソースへのアクセスまたは操作を行う権限が付与されます。たとえば、AliyunOSSFullAccess ポリシーを追加します。詳細については、「ステップ 3: RAM ロールへの権限の付与」をご参照ください。
説明RAM ユーザーを使用して DSW インスタンスを操作する場合は、ルートアカウント管理者に次の権限ポリシーを作成し、お客様の RAM ユーザーにアタッチするよう依頼してください。このポリシーにより、RAM ユーザーがインスタンス RAM ロールを使用できるようになります。
次のコードは、必要な権限ポリシーを示しています。
${RoleName}を DSW インスタンス RAM ロールの名前に置き換えてください。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
関連付けなし
インスタンスがワークスペース内で公開されている場合、権限の漏洩を防ぐため、RAM ロールを関連付けないことを推奨します。 インスタンスを作成または設定を変更する際に、Advanced Information セクションで、Instance RAM Role を Does Not Associate Role に設定します。
RAM ロール設定の更新
-
DSW ページに移動します。
-
PAI コンソールにログインし、対象のリージョンとワークスペースを選択します。
-
左側のナビゲーションペインで、Model Training > Data Science Workshop (DSW) を選択して DSW ページに移動します。
-
-
DSW インスタンスの右側にあるChange Settingsをクリックします。
-
Roles and Permissions セクションで、インスタンス RAM ロールを設定します。
重要実行中のインスタンスの RAM ロールを Default Roles of PAI または Custom Roles から Does Not Associate Role に切り替えるか、Does Not Associate Role から Default Roles of PAI または Custom Roles に切り替えると、インスタンスはすぐに再起動されます。インスタンスが保存されていることを確認してください。
-
設定を完了したら、OK をクリックします。
ステップ 2: 一時的な認証情報の取得
RAM ロールをインスタンスに関連付けた後、いくつかの方法でその一時的な認証情報を取得し、クラウドサービスへのアクセスに使用できます。
Credentials ツール
Alibaba Cloud SDK の Credentials ツールの使用を推奨します。このツールは認証情報の取得と更新を自動的に処理するため、クラウドサービスへのアクセスのベストプラクティスとなります。
-
依存関係をインストールします (Python の例)。
pip install alibabacloud_credentials -
使用例:
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' # オプション。デフォルトの認証情報チェーンで他のアクセス方法を設定していない場合、type を明示的に指定する必要はありません。Credentials SDK は URI メソッドを使用して一時的な認証情報を取得します。 ) credentialsClient = CredClient(credentialsConfig)
他の言語の SDK の例については、「認証情報を使用して Alibaba Cloud OpenAPI にアクセスするためのベストプラクティス」をご参照ください。
ローカルサービス
DSW インスタンス内で、ターミナルで次のコマンドを実行し、ローカルに注入されたサービスから認証情報を取得します。
# インスタンス RAM ロールの一時的なアクセス認証情報を取得
curl $ALIBABA_CLOUD_CREDENTIALS_URI
次はレスポンスの例です。
-
SecurityToken:インスタンス RAM ロールの一時的なトークン。
-
Expiration:一時的なアクセス認証情報の有効期限。
{
"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"
}
ステップ 3: 他のクラウドサービスへのアクセス
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)
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)
PAI-DLC へのアクセス
-
次のコマンドを実行して、Credentials ツール、OpenAPI SDK、および PAI-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 にアクセスし、指定されたワークスペース内の PAI-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 ツールを使用して PAI-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])
よくある質問
PassRoleFailedError の解決
RAM コンソールにログインし、ロールが存在することを確認します。
-
ロールが存在しない場合は、インスタンス RAM ロールを既存のロールに変更してください。
-
ロールが存在する場合は、ルートアカウント管理者に、お客様の RAM ユーザーにこのロールを使用する権限を付与するよう依頼してください。必要な権限ポリシーは次のとおりです (${RoleName} を RAM ロールの名前に置き換えてください)。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
AssumeRoleFailedError の解決
このエラーは通常、ロールの信頼ポリシーが正しく設定されていない場合に発生します。次の手順に従って問題を解決してください。
-
RAM 管理者として RAM コンソールにログインします。
-
左側メニューで、[ID 管理] > [ロール] を選択します。
-
[ロール] ページで、対象の RAM ロールの名前をクリックします。
-
[信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックします。
-
信頼ポリシーを変更して、
pai.aliyun.cs.comをServiceプリンシパルに追加し、[OK] をクリックします。たとえば、元の信頼ポリシーが次のようになっている場合:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com" ] } } ], "Version": "1" }ポリシーを更新して
pai.aliyun.cs.comを含めます。{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com", "pai.aliyun.cs.com" ] } } ], "Version": "1" }