DLC ジョブが他のクラウドリソースにアクセスする際、認証のために AccessKey ペアを設定する必要があります。RAM ロールを関連付けることで、DLC ジョブは Security Token Service (STS) からの一時的な認証情報を使用して他のクラウドサービスにアクセスできるようになります。これにより長期的な AccessKey ペアが不要となり、キーの漏洩リスクが低減されます。本トピックでは、RAM ロールの作成、DLC への権限付与、および RAM ロールを使用した一時的なアクセス認証情報の取得方法について説明します。
メリット
RAM ロールは、クラウドサービスがサービス間アクセスを処理するために引き受けることができる信頼できるエンティティです。認証とアクセス制御に RAM ロールを使用すると、以下のメリットがあります。
-
セキュリティ:一時的な STS 認証情報が長期的な AccessKey ペアに取って代わるため、キーの漏洩リスクが低減されます。
-
制御と利便性:RAM ロールの権限ポリシーを変更することで、開発者のクラウドリソースへのアクセスを正確に制御できます。
制限事項
1 つの DLC ジョブに関連付けられる RAM ロールは 1 つだけです。
設定方法
DLC ジョブを作成する際に、RAM ロールを設定し、一時的な STS 認証情報を取得します。
DLC の RAM ロールの設定
PAI デフォルトロール
PAI デフォルトロール は、サービスロール AliyunPAIDLCDefaultRole に基づいています。このロールは、MaxCompute と Object Storage Service (OSS) のみにアクセスするためのきめ細かい権限を持っています。このロールから発行された一時的な認証情報は、MaxCompute テーブルにアクセスする際に Alibaba Cloud アカウント と同じ権限を持ちます。OSS にアクセスする際は、現在のワークスペースに設定されているデフォルト OSS バケットにのみアクセスできます。
PAI のデフォルトロールを付与した後、ジョブ内で一時的な認証情報を取得して基本的な開発リソースにアクセスできます。過剰な権限を付与したり、追加の RAM ロールを作成したりする必要はありません。
-
ユースケース
PAI のデフォルトロールが付与されている場合、以下のシナリオでは AccessKey ペアを設定する必要はありません。
-
ジョブの所有者が実行権限を持つ MaxCompute プロジェクトに、PyODPS SDK を使用してジョブを送信する場合。
-
OSS SDK を使用して、現在のワークスペースに設定されているデフォルト OSS バケット内のデータにアクセスする場合。
-
-
設定方法
DLC ジョブを作成する際、ロールと権限 セクションで RAM ロール として PAI デフォルトロール を選択し、[Visibility] を [Visible within the workspace] に設定します。
RAM ロールを設定した後、関連付けられた RAM ロールを使用して一時的なアクセス認証情報を取得する必要があります。
カスタムロール
PAI デフォルトロール からの一時的な認証情報の権限が要件を満たさない場合は、RAM ロールを作成し、その権限ポリシーをカスタマイズできます。手順は以下のとおりです。
-
RAM コンソールにログインし、RAM ロールを作成します。
以下の主要なパラメータを設定します。
-
信頼プリンシパルタイプ : クラウドサービス を選択します。
-
信頼プリンシパル名 : Machine Learning Platform for AI (PAI) を選択します。
-
-
作成した RAM ロールに権限を付与します。
RAM ロールにシステムポリシーまたはカスタムポリシーをアタッチして、その権限を定義します。たとえば、RAM ロールに AliyunOSSReadOnlyAccess ポリシーを付与して、OSS への読み取り専用アクセスを許可します。
RAM ユーザーの場合は、Alibaba Cloud アカウントの管理者に連絡して、RAM ロールを使用するための権限を RAM ユーザーに付与してもらう必要があります。詳細については、「RAM ユーザーの権限管理」をご参照ください。以下のコードは、カスタム権限ポリシーの例です。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }${RoleName} を、DLC ジョブに関連付けられている RAM ロールの名前に置き換えます。
-
DLC ジョブを送信し、RAM ロールを関連付けます。ロールと権限 セクションで、以下の主要なパラメータを設定します。他のパラメータについては、「トレーニングジョブの作成」をご参照ください。
パラメータ
説明
RAM ロール
カスタムロール を選択します。
RAM ロール
前の手順で作成した RAM ロールを選択します。一時的な認証情報は、クラウドサービスにアクセスする際に、このカスタムロールの権限を継承します。
RAM ロールを設定した後、関連付けられた RAM ロールを使用して一時的なアクセス認証情報を取得する必要があります。
ロールの関連付けなし
データへのアクセスに AccessKey ペアを使用する必要がない場合は、ロールを関連付けないことをお勧めします。DLC ジョブを作成する際、ロールと権限 セクションで、RAM ロール として ロールを関連付けない を選択します。Roles and Permissions セクションでは、Visibility を Visible to creator only に、Instance RAM Role を Do not associate role に設定します。
一時的なアクセス認証情報の取得
PAI のデフォルトロールまたはカスタムロールを DLC ジョブに割り当てた場合、以下のいずれかの方法で一時的な認証情報を取得できます。
認証情報ツールの使用
Alibaba Cloud Credentials ツールは、ジョブ作成時に自動的にインジェクションされるローカルサービスを呼び出すことで、STS から一時的な認証情報を取得します。認証情報は定期的に自動的に更新されます。
DLC ジョブを作成する際、以下の主要な設定を行います。
-
Alibaba Cloud Credentials ツールをインストールします。
サードパーティライブラリの設定 セクションで サードパーティライブラリ一覧 を選択し、テキストボックスに
alibabacloud_credentialsと入力して Alibaba Cloud Credentials ツールをインストールします。説明イメージにライブラリがプリインストールされている場合、この手順はスキップできます。
-
スクリプトファイルを設定します。
以下のコードは Python スクリプトの例です。他の SDK 言語の例については、「アクセス認証情報を使用した Alibaba Cloud OpenAPI へのアクセスのベストプラクティス」をご参照ください。コード設定 または マウント設定 オプションを使用して、スクリプトファイルを 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 ジョブを作成する際、開始コマンド フィールドで以下のコマンドを実行して、自動的にインジェクションされたローカルサービスから一時的な認証情報を取得します。
# インスタンス 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 ジョブを作成する際、以下の主要な設定を行います。
-
必要なライブラリをインストールします。
サードパーティライブラリの設定 セクションで、サードパーティライブラリ一覧 を設定して Alibaba Cloud Credentials ツールと ODPS SDK をインストールします。
alibabacloud_credentials pyodps説明イメージにこれらのライブラリがプリインストールされている場合、この手順はスキップできます。
-
スクリプトファイルを設定します。
以下のコードは Python スクリプトの例です。コード設定 または マウント設定 オプションを使用してスクリプトファイルを DLC 環境にアップロードし、
/mnt/data/などの マウントパス を設定します。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) -
起動コマンドを設定します。
開始コマンド をスクリプトを実行するコマンドに設定します。例:
python /mnt/data/xx.py。 -
ロール情報を設定します。
RAM ロール に PAI デフォルトロール を選択します。
OSS へのアクセス
DLC ジョブを作成する際、以下の主要な設定を行います。
-
必要なライブラリをインストールします。
サードパーティライブラリの設定 セクションで、サードパーティライブラリ一覧 を設定して Alibaba Cloud Credentials ツールと OSS SDK をインストールします。
alibabacloud_credentials oss2説明イメージにこれらのライブラリがプリインストールされている場合、この手順はスキップできます。
-
スクリプトファイルを設定します。
以下のコードは Python スクリプトの例です。コード設定 または マウント設定 オプションを使用してスクリプトファイルを DLC 環境にアップロードし、
/mnt/data/などの マウントパス を設定します。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) -
起動コマンドを設定します。
開始コマンド をスクリプトを実行するコマンドに設定します。例:
python /mnt/data/xx.py。 -
ロール情報を設定します。
RAM ロール に 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" }
-