Data Science Workshop (DSW) インスタンスから他のクラウドリソースにアクセスする場合、AccessKeyペアを設定してIDを検証する必要があります。 Resource Access Management (RAM) ロールをDSWインスタンスに関連付けて、長期的なAccessKeyペアを設定することなく、Security Token Service (STS) の一時的な資格情報を使用してDSWインスタンスから他のクラウドリソースにアクセスできます。 これにより、キー漏れのリスクが軽減されます。 このトピックでは、信頼できるエンティティがAlibaba CloudサービスであるRAMロールを作成し、DSWインスタンスを使用する権限をロールに付与し、インスタンスRAMロールを使用してSTSの一時的な資格情報を取得する方法について説明します。
背景情報
インスタンスRAMロールは、信頼できるエンティティがAlibaba CloudサービスであるRAMロールです。 クラウドサービスは、インスタンスRAMロールを引き受けて、他のクラウドリソースにアクセスできます。 RAMロールの詳細については、RAMロールの概要トピックの「RAMロールとは」を参照してください。
次のセクションでは、インスタンスRAMロールに基づく一時的なアクセス資格情報を使用してIDの検証とアクセス制御を実行する利点について説明します。
セキュリティと機密性
インスタンス内で資格情報を管理する必要はありません。 長期的なAccessKeyペアの代わりにSTSの一時的な資格情報を使用して、キーリークのリスクを減らすことができます。
便利な管理
インスタンスRAMロールの権限ポリシーを変更して、より便利で洗練された方法でDSWインスタンス内のクラウドリソースへのアクセスを制御できます。
制限事項
DSWインスタンスは、1つのRAMロールにのみ関連付けることができます。
手順1: DSWインスタンスのRAMロールの設定
シナリオ1: PAIのデフォルトロールをインスタンスに関連付ける
Platform for AI (PAI) のデフォルトのロールには、PAIサービス、MaxCompute、およびObject Storage Service (OSS) にアクセスする権限のみがあります。 このロールを使用して、詳細な権限管理を実装できます。 PAIのデフォルトロールによって発行された一時的な資格情報を使用する場合、PAIサービスおよびMaxComputeテーブルにアクセスするときに、DSWインスタンス所有者と同じ権限が付与されます。 OSSにアクセスする場合、現在のワークスペースのデフォルトのストレージパスとして設定されているバケットにのみアクセスできます。
PAIのデフォルトロールをインスタンスに関連付けて、追加のRAMロールを作成することなく、基本的な開発リソースにアクセスできる一時的なアクセス資格情報を取得できます。
PAIのデフォルトロールをインスタンスに関連付けた後、次のシナリオでAccessKeyペアを設定する必要はありません。
PAI SDKを使用して、現在のワークスペースにトレーニングタスクを送信します。
DLC SDKを使用して、現在のワークスペースにトレーニングタスクを送信します。
ODPS SDKを使用して、インスタンス所有者が実行権限を持つMaxComputeプロジェクトにタスクを送信します。
OSS SDKを使用して、現在のワークスペースのデフォルトのストレージパスであるバケット内のデータにアクセスします。
web統合開発環境 (IDE) でTongyi Lingmaサービスを使用します。
シナリオ1: カスタムロールをインスタンスに関連付ける
RAMコンソールにログインし、RAMロールを作成します。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。
下表にパラメーター示します。
[信頼できるエンティティ]: Alibaba Cloudサービス
ロールタイプ: 通常のサービスロール
信頼できるサービスの選択: AIプラットフォーム
インスタンスRAMロールに権限を付与します。
システムポリシーまたはカスタムポリシーをRAMロールにアタッチして、リソースにアクセスまたは管理するための関連する権限をRAMロールに付与できます。 詳細については、「手順3: 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ユーザーを使用する場合は、Alibaba Cloudアカウント所有者に連絡して、インスタンスRAMロールを使用する権限を取得します。
次のセクションでは、権限ポリシーの例を示します。
${RoleName}
をDSWインスタンスのRAMロールの名前に置き換えます。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
DSWインスタンスを作成し、インスタンスRAMロールをインスタンスに関連付けます。 詳細については、「DSWインスタンスの作成」をご参照ください。
シナリオ3: インスタンスをRAMロールに関連付けない
インスタンスがワークスペースでパブリックに設定されている場合、権限の漏洩を防ぐためにインスタンスをRAMロールに関連付けないことを推奨します。 インスタンスを作成するとき、またはインスタンスの設定を変更するときに、[詳細情報] セクションの [インスタンスRAMロール] パラメーターを [ロールを関連付けない] に設定できます。
インスタンスのRAMロール設定の更新
データサイエンスワークショップ (DSW) ページに移動します。
PAI コンソールにログインします。
[概要] ページの上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションペインで、[ワークスペース] をクリックします。 [ワークスペース] ページで、ワークスペースの名前をクリックします。
ワークスペースページの左側のナビゲーションウィンドウで、モデルトレーニング > データサイエンスワークショップ (DSW) を選択して、DSWページに移動します。
DSWインスタンスの [操作] 列で [設定の変更] をクリックします。
[詳細情報] セクションで、インスタンスRAMロールを設定します。
説明更新された実行中のインスタンスは、次のシナリオで再起動されます。[インスタンスRAMロール] パラメーターが [PAIのデフォルトロール] または [カスタムロール] から [ロールを関連付けない] 、または [ロールを関連付けない] から [PAIのデフォルトロール] または [カスタムロール] に変更されます。 設定を更新する前に、必ずインスタンスデータを保存してください。
[確認]をクリックします。
手順2: インスタンスRAMロールを使用して一時的な資格情報を取得する
次のいずれかの方法を使用して、RAMロールに関連付けられているDSWインスタンスから一時的な資格情報を取得できます。
方法1: Alibaba Cloud Credentialsツールの使用
資格情報ツールは、インスタンスの作成時に自動的に挿入されるインスタンスのオンプレミスサービスを呼び出して、定期的に更新されるSTSの一時的な資格情報を取得します。
資格情報ツールを使用してインスタンスRAMロールの資格情報を取得するには、次のコマンドを実行してAlibaba Cloud資格情報ツールをインストールします。 Pythonのサンプルコマンド:
pip install alibabacloud_credentials
次のセクションでは、資格情報ツールを使用するためのサンプルコードを示します。 他のプログラミング言語でSDKを使用する方法の詳細については、「アクセス資格情報を使用してAPI操作を呼び出すためのベストプラクティス」の「サンプルコード」セクションを参照してください。
from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
credentialsConfig = CredConfig(
type='credentials_uri' # Optional. If you did not configure other access methods for the default credential chain, you do not need to specify the parameter. The Credentials SDK obtains the temporary credential by using the URI.
)
credentialsClient = CredClient(CredConfig)
方法2: DSWインスタンスのオンプレミスサービスへのアクセス
DSWインスタンスを使用する場合、[ターミナル] タブで次のコマンドを実行して、オンプレミスサービスに自動的に挿入されるサーバーにアクセスできます。
# Obtain the temporary credential of the instance RAM role.
curl $ALIBABA_CLOUD_CREDENTIALS_URI
次のセクションでは、応答のサンプルを示します。 パラメーター:
SecurityToken: インスタンスRAMロールの一時トークン。
有効期限: インスタンスRAMロールの一時的な資格情報の有効期間。
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
方法3: DSWインスタンスのオンプレミスファイルへのアクセス
DSWインスタンス内の指定されたパスのファイルにアクセスして、インスタンスRAMロールの一時的な資格情報を取得できます。 ファイルは自動的に挿入され、定期的に更新されます。 ファイルのパスは /mnt/.alibabacloud/credentials
です。 サンプルファイルの内容:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
手順3: インスタンスRAMロールを使用して他のクラウドサービスにアクセスする
例1: インスタンスRAMロールを使用したMaxComputeへのアクセス
次のコマンドを実行して、CredentialsツールとODPS SDKをインストールします。
# Install the Credentials tool. pip install alibabacloud_credentials # Install the ODPS SDK. pip install odps
インスタンスRAMロールの一時的な資格情報を使用して、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}", # Replace the value with your project name. endpoint="{odps_endpoint}"# Replace the value with the endpoint of the region in which your project resides. ) for t in o.list_tables(): print(t)
例2: インスタンスRAMロールを使用したOSSへのアクセス
次のコマンドを実行して、資格情報ツールとOSS SDKをインストールします。
# Install the Credentials tool. pip install alibabacloud_credentials # Install the OSS SDK. pip install oss2
インスタンスRAMロールの一時的な資格情報を使用して、OSSにアクセスし、特定のバケット内の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}',# Replace the value with the endpoint of the region in which your OSS bucket resides. '{oss_bucket}'# Replace the value with the name of your OSS bucket. ) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key)
例3: インスタンスRAMロールを使用したDLCへのアクセス
次のコマンドを実行して、資格情報ツール、OpenAPI SDK、およびDLC SDKをインストールします。
# Install the Credentials tool. pip install alibabacloud_credentials # Install the Alibaba Cloud OpenAPI SDK. pip install alibabacloud-tea-util alibabacloud_tea_openapi # Install the PAI-DLC SDK. pip install alibabacloud_pai_dlc20201203
インスタンスRAMロールの一時的な資格情報を使用して、Deep Learning Containers (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 # Use the Credentials tool to initialize the DLC client. credentialsClient = CredClient() config = Config(credential=credentialsClient) config.endpoint = '{dlc_endpoint}' # Replace the value with the endpoint of the region in which your workspace resides. client = pai_dlc20201203Client(config) # Initialize the request and call the ListJobs API. list_jobs_request = pai_dlc_20201203_models.ListJobsRequest() list_jobs_request.workspace_id = '{workspace_id}' # Replace the value with the ID of your workspace. 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ロールを既存のロールに変更します。
ロールが存在する場合は、Alibaba Cloudアカウントに連絡して、RAMユーザーにロールを使用する権限を付与します。 次のセクションでは、サンプルポリシーを提供します。
${RoleName}
パラメーターをRAMロールの名前に置き換えます。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
インスタンスの作成中にカスタムロールを選択したときにAssumeRoleFailedErrorエラーが報告された場合はどうすればよいですか?
この問題は、信頼ポリシーがロールに対して構成されていないために発生します。 次の操作を実行します。
管理者としてRAMコンソールにログインします。
左側のナビゲーションウィンドウで、[アイデンティティ] > [ロール] を選択します。
[ロール] ページで、必要なRAMロールを見つけます。
[信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックします。
信頼ポリシーの内容を変更し、[信頼ポリシードキュメントの保存] をクリックします。
ロールのサンプル元の信頼ポリシー:
{ "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" }