DLC job が他のクラウドリソースにアクセスする場合、認証のために AccessKey ペアを設定する必要があります。RAM ロールを関連付けることで、DLC job は Security Token Service (STS) からの一時的な認証情報を使用して他のクラウドサービスにアクセスできるようになり、長期的な AccessKey ペアが不要になり、キー漏洩のリスクが軽減されます。このトピックでは、RAM ロールの作成、DLC への権限付与、および RAM ロールを使用した一時的なアクセス認証情報の取得方法について説明します。
メリット
RAM ロールは、クラウドサービスがクロスサービスアクセスを処理するために引き受けることができる信頼できるエンティティです。認証とアクセスの制御に RAM ロールを使用すると、次のメリットがあります。
-
セキュリティ:一時的な STS 認証情報が長期的な AccessKey ペアに取って代わり、キー漏洩のリスクを軽減します。
-
コントロールと利便性:RAM ロールの権限ポリシーを変更することで、開発者のクラウドリソースへのアクセスを正確に制御できます。
制限事項
1 つの DLC job に関連付けることができる RAM ロールは 1 つだけです。
設定方法
DLC job を作成する際に、RAM ロールを設定し、一時的な STS 認証情報を取得します。
DLC の RAM ロールの設定
PAI のデフォルトロール
PAI のデフォルトロールは、サービスロール AliyunPAIDLCDefaultRole に基づいています。MaxCompute と Object Storage Service (OSS) のみにアクセスするための詳細な権限を持っています。このロールから発行された一時的な認証情報は、MaxCompute テーブルにアクセスする際に Alibaba Cloud アカウントと同じ権限を持ちます。OSS にアクセスする場合、現在のワークスペースに設定されているデフォルトの OSS バケットにのみアクセスできます。
PAI のデフォルトロールを付与した後、過剰な権限を付与したり、追加の RAM ロールを作成したりすることなく、ジョブ内で一時的な認証情報を取得して、基本的な開発リソースにアクセスできます。
-
利用シーン
PAI のデフォルトロールが付与されている場合、次のシナリオでは AccessKey ペアを設定する必要はありません。
-
PyODPS SDK を使用して、ジョブの所有者が実行権限を持つ MaxCompute プロジェクトにジョブを送信する。
-
OSS SDK を使用して、現在のワークスペースに設定されているデフォルトの OSS バケット内のデータにアクセスする。
-
-
設定方法
DLC job を作成するとき、Roles and Permissions セクションで、Instance RAM Role として Default Roles of PAI を選択します。 [ロールと権限] セクションで、[可視性] を [ワークスペース内に表示] に設定し、[インスタンス RAM ロール] を [PAI のデフォルトロール] に設定します。
RAM ロールを設定した後、関連付けられた RAM ロールを使用して一時的なアクセス認証情報を取得する必要があります。
カスタムロール
PAI のデフォルトロールからの一時的な認証情報の権限が要件を満たさない場合は、RAM ロールを作成し、その権限ポリシーをカスタマイズできます。次の手順に従ってください。
-
RAM コンソールにログインし、RAM ロールを作成します。
次の主要なパラメーターを設定します。
-
Principal Type:クラウドサービスを選択します。
-
Principal Name: Machine Learning Platform for AI (PAI) を選択します。
-
-
作成した RAM ロールに権限を付与します。
RAM ロールにシステムポリシーまたはカスタムポリシーをアタッチして、その権限を定義します。たとえば、AliyunOSSReadOnlyAccess ポリシーを RAM ロールに付与して、OSS への読み取り専用アクセスを許可します。
RAM ユーザーの場合は、Alibaba Cloud アカウントの管理者に連絡して、RAM ロールを使用するための権限を RAM ユーザーに付与してもらいます。詳細については、「RAM ユーザー権限の管理」をご参照ください。次のコードは、カスタム権限ポリシーの例です。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }${RoleName} を DLC job に関連付けられた RAM ロールの名前に置き換えます。
-
DLC job を送信し、RAM ロールを関連付けます。 Roles and Permissions セクションで、次の主要なパラメーターを設定します。 その他のパラメーターについては、「トレーニングジョブの作成」をご参照ください。
パラメーター
説明
Instance RAM Role
Custom Role を選択します。
RAM ロール
前の手順で作成した RAM ロールを選択します。一時的な認証情報は、クラウドサービスにアクセスする際に、このカスタムロールの権限を継承します。
RAM ロールを設定した後、関連付けられた RAM ロールを使用して一時的なアクセス認証情報を取得する必要があります。
関連付けられたロールなし
AccessKey ペアを使用してデータにアクセスする必要がない場合は、ロールを関連付けないことをお勧めします。DLC job を作成する際に、Roles and Permissions セクションで、Instance RAM Role として Does Not Associate Role を選択します。[ロールと権限] セクションで、[可視性] を [作成者のみに表示] に設定し、[インスタンス RAM ロール] を [ロールを関連付けない] に設定します。
一時的なアクセス認証情報の取得
PAI のデフォルトロールまたはカスタムロールを DLC job に割り当てる場合、次のいずれかの方法で一時的な認証情報を取得できます。
認証情報ツールの使用
Alibaba Cloud Credentials ツールは、ジョブの作成時に自動的に挿入されるローカルサービスを呼び出すことで、STS から一時的な認証情報を取得します。認証情報は定期的に自動でリフレッシュされます。
DLC job を作成する際、次の主要な設定を完了します。
-
Alibaba Cloud Credentials ツールをインストールします。
Third-party Library Settings セクションで、Third-party Libraries を選択し、テキストボックスに alibabacloud_credentials と入力して Alibaba Cloud 認証情報ツールをインストールします。
説明ライブラリがイメージにプリインストールされている場合は、このステップをスキップできます。
-
スクリプトファイルを設定します。
次のコードは Python スクリプトの例です。他の SDK 言語のその他の例については、「アクセス認証情報を使用して Alibaba Cloud OpenAPI にアクセスするためのベストプラクティス」をご参照ください。Source Code Repositories または Mount Configuration オプションを使用して、スクリプトファイルを DLC 環境にアップロードできます。
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' ) credentialsClient = CredClient(credentialsConfig)
ローカルサービスへのアクセス
DLC ジョブを作成する際、Startup Command フィールドで次のコマンドを実行して、自動的にインジェクトされたローカルサービスから一時的な認証情報を取得します。
# インスタンス RAM ロールの一時的なアクセス認証情報を取得します。
curl $ALIBABA_CLOUD_CREDENTIALS_URI
次の例は、サンプル出力を示しています。
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
フィールドの説明:
-
SecurityToken:RAM ロールの一時的なセキュリティトークン。
-
Expiration:一時的な認証情報の有効期限。
ローカルファイルへのアクセス
DLC コンテナ内で、指定されたパスのファイルを読み取って、RAM ロールの一時的な認証情報を取得します。このファイルは PAI によって自動的に挿入され、定期的にリフレッシュされます。ファイルパスは /mnt/.alibabacloud/credentials です。次のコードはファイルの内容を示しています。
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
例
ODPS へのアクセス
DLC job を作成する際、次の主要な設定を完了します。
-
必須ライブラリをインストールします。
Third-party Library Settings セクションで、Third-party Libraries を設定して、Alibaba Cloud Credentials ツールと ODPS SDK をインストールします。
alibabacloud_credentials pyodps説明これらのライブラリがイメージにプリインストールされている場合は、このステップをスキップできます。
-
スクリプトファイルを設定します。
以下のコードは、Python スクリプトの例です。Source Code Repositories または Mount Configurations オプションを使用して、スクリプトファイルを DLC 環境にアップロードし、
/mnt/data/などの Mount Path を設定できます。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) -
起動コマンドを設定します。
Startup Command に、スクリプトを実行するコマンドを設定します。例:
python /mnt/data/xx.py。 -
ロール情報を設定します。
Instance RAM Role には、Default Roles of PAI を選択します。
OSS へのアクセス
DLC job を作成する際、次の主要な設定を完了します。
-
必須ライブラリをインストールします。
Third-party Library Settings セクションで、Third-party Libraries を設定して Alibaba Cloud Credentials ツールと OSS SDK をインストールします。
alibabacloud_credentials oss2説明これらのライブラリがイメージにプリインストールされている場合は、このステップをスキップできます。
-
スクリプトファイルを設定します。
次のコードは、Python スクリプトの例です。Source Code Repositories または Mount Configurations オプションを使用して、スクリプトファイルを DLC 環境にアップロードし、
/mnt/data/などの Mount Path を設定できます。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) -
起動コマンドを設定します。
Startup Commandに、スクリプトを実行するコマンドを設定します。例:
python /mnt/data/xx.py。 -
ロール情報を設定します。
Instance RAM Role には、Default Roles of PAI を選択します。
よくある質問
カスタムロール選択時のエラー
-
エラーメッセージ:check permission for ram role failed または check permission for RAM user failed。
RAM コンソールにログインして、ロールが存在することを確認できます。
-
ロールが存在しない場合は、インスタンス RAM ロールを既存のロールに変更します。
-
ロールが存在する場合は、Alibaba Cloud アカウントの管理者に連絡して、RAM ユーザーにロールを使用する権限を付与してもらいます。詳細については、「RAM ユーザー権限の管理」をご参照ください。以下は、カスタム権限ポリシーのサンプルです。
${RoleName}をご利用の RAM ロールの名前に置き換えてください。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
-
-
エラーメッセージ:Failed to assume role for user。
このエラーは通常、ロールに信頼ポリシーが設定されていないために発生します。次の手順に従って信頼ポリシーを追加してください。
-
RAM 管理者として RAM コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
ロール ページで、対象の 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" }
-