すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:DLC ジョブへの RAM ロールの関連付け

最終更新日:Mar 27, 2025

Deep Learning Containers(DLC)ジョブで他の Alibaba Cloud サービスにアクセスするには、身元認証のために AccessKey ペアを構成する必要があります。 RAM ロールを DLC ジョブに関連付けると、AccessKey ペアを構成することなく、セキュリティトークンサービス(STS)によって提供される一時的なアクセス認証情報を使用して、DLC ジョブで他の Alibaba Cloud サービスにアクセスできます。 これにより、AccessKey ペアのセキュリティが確保されます。 このトピックでは、RAM ロールの作成方法と、DLC ジョブへの RAM ロールの関連付け方法について説明します。 また、RAM ロールを使用して STS によって提供される一時的なアクセス認証情報を取得する方法についても説明します。

メリット

信頼できるエンティティが Alibaba Cloud サービスである RAM ロール を使用できます。 Alibaba Cloud サービスは、RAM ロールをアシュームしてサービス間のアクセスを実装できます。 RAM ロールを使用して一時的なアクセス認証情報を取得し、身元認証とアクセスの制御を実装できます。 この方法には、次のメリットがあります。

  • セキュリティと機密性: DLC ジョブで認証情報を管理する必要はありません。 AccessKey ペアの代わりに STS によって提供される一時的なアクセス認証情報を使用することで、AccessKey ペアの漏洩のリスクを軽減できます。

  • 便利な管理: DLC ジョブに関連付けられた RAM ロールにアタッチされたポリシーを変更することで、DLC ジョブの Alibaba Cloud サービスに対する各開発者のアクセス許可を、より便利で詳細に管理できます。

制限事項

DLC ジョブは 1 つの RAM ロールにのみ関連付けることができます。

構成方法

DLC ジョブの作成時に RAM ロールを DLC ジョブに関連付け、RAM ロールを使用して STS によって提供される一時的なアクセス認証情報を取得します。

DLC ジョブへの RAM ロールの関連付け

シナリオ 1:PAI のデフォルトロールを DLC ジョブに関連付ける

Platform for AI(PAI)のデフォルトロールは、通常のサービスロール AliyunPAIDLCDefaultRole が割り当てられている RAM ロールです。 デフォルトロールは、MaxCompute と Object Storage Service(OSS)へのアクセス許可のみを持ち、詳細なアクセスの制御をサポートしています。 MaxCompute テーブルにアクセスする場合、PAI のデフォルトロールを使用して提供される一時的なアクセス認証情報は、DLC インスタンスの所有者と同じ権限を持ちます。 OSS にアクセスする場合、一時的なアクセス認証情報を使用して、現在のワークスペースに構成されているデフォルトの OSS バケットにのみアクセスできます。

デフォルトロールを DLC ジョブに関連付けると、別の RAM ロールを作成することなく、DLC ジョブの基本的な開発リソースにアクセスするための一時的なアクセス認証情報を取得できます。

  • ユースケース

    PAI のデフォルトロールを DLC ジョブに関連付けた後、次のシナリオでは AccessKey ペアを構成する必要はありません。

    • MaxCompute SDK を使用して、ジョブの所有者が実行権限を持つ MaxCompute プロジェクトにジョブを送信する。

    • OSS SDK を使用して、現在のワークスペースに構成されている デフォルトの OSS バケット のデータにアクセスする。

  • 構成方法

    トレーニングジョブを送信する 際に、[ロールと権限] セクションの [インスタンス RAM ロール][PAI のデフォルトロール] を選択します。image

RAM ロールを DLC ジョブに関連付けた後、RAM ロールを使用して一時的なアクセス認証情報を取得する 必要があります。

シナリオ 2:カスタムロールを DLC ジョブに関連付ける

PAI のデフォルトロールを使用して取得した一時的なアクセス認証情報の権限が要件を満たしていない場合は、RAM ロールを作成し、その RAM ロールに権限を付与して、開発者がジョブでアクセスできる Alibaba Cloud リソースの範囲を制御できます。 次の手順を実行します。

  1. RAM コンソール にログインし、RAM ロールを作成する

    次の主要なパラメーターに注意してください。

    • [プリンシパルの種類]: [クラウドサービス] を選択します。

    • [プリンシパル名]: [platform For AI / PAI] を選択します。

  2. RAM ロールに権限を付与する。

    システムポリシーまたはカスタムポリシーをアタッチする ことができます。 これにより、RAM ロールは関連リソースにアクセスまたは管理できます。 たとえば、AliyunOSSReadOnlyAccess ポリシーを RAM ロールにアタッチできます。

    RAM ユーザーを使用している場合は、Alibaba Cloud アカウントの所有者に連絡して、現在の RAM ユーザーに RAM ロールを使用する権限を付与してもらいます。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。 ポリシードキュメントの例:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "ram:PassRole",
          "Resource": "acs:ram::*:role/${RoleName}"
        }
      ]
    }

    上記のポリシードキュメントの例の ${RoleName} を、DLC ジョブに関連付ける RAM ロールの名前に置き換えます。

  3. RAM ロールを DLC ジョブに関連付けて、DLC ジョブを送信します。 [ロールと権限] セクションでは、次の主要なパラメーターのみを構成する必要があります。 その他のパラメーターについては、「トレーニングジョブを送信する」をご参照ください。image

    パラメーター

    説明

    インスタンス RAM ロール

    [カスタムロール] を選択します。

    RAM ロール

    手順 1 で作成した RAM ロールを選択します。 RAM ロールを DLC ジョブに関連付けると、STS によって提供される一時的なアクセス認証情報を使用して、DLC ジョブの他の Alibaba Cloud サービスにアクセスするための RAM ロールの権限が付与されます。

RAM ロールを DLC ジョブに関連付けた後、RAM ロールを使用して一時的なアクセス認証情報を取得する 必要があります。

シナリオ 3:RAM ロールを DLC ジョブに関連付けない

AccessKey ペアを使用してデータにアクセスする必要がない場合は、RAM ロールを DLC ジョブに関連付けない ことをお勧めします。 トレーニングジョブを送信する 際に、[ロールと権限] セクションの [インスタンス RAM ロール][ロールを関連付けない] を選択します。image

DLC ジョブに関連付けられた RAM ロールを使用して一時的なアクセス認証情報を取得する

DLC ジョブを作成するときに、DLC ジョブを PAI のデフォルトロールまたはカスタムロールに関連付ける場合は、次の方法を使用して一時的なアクセス認証情報を簡単に取得します。

方法 1:Alibaba Cloud Credentials ツールを使用する

Alibaba Cloud Credentials ツール は、DLC ジョブの作成時に自動的に挿入されるローカルサービスを呼び出して、STS によって提供される一時的なアクセス認証情報を取得します。 この認証情報は定期的に更新されます。

トレーニングジョブを送信する 際に、次の主要な構成を完了します。

  • Alibaba Cloud Credentials ツールをインストールします。

    [ジョブの作成] ページで、[サードパーティライブラリ] パラメーターに [リストから選択] を選択し、[サードパーティライブラリ] フィールドに alibabacloud_credentials と入力して、Alibaba Cloud Credentials ツールをインストールします。

    説明

    サードパーティライブラリがイメージにプリインストールされている場合は、この構成をスキップできます。

  • スクリプトファイルを構成します。

    この例では、Python スクリプトファイルを使用しています。 その他のプログラミング言語の SDK のサンプルコードについては、「サンプルコード」をご参照ください。 [コードビルド] パラメーターに [オンライン構成] を選択するか、[ローカルアップロード] を選択して、オンプレミス マシンから 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)
    

方法 2:DLC ジョブのローカルサービスにアクセスする

トレーニングジョブを送信する 際に、[起動コマンド] パラメーターを次のコマンドに設定できます。 これにより、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: RAM ロールの一時的なアクセス認証情報の有効期限。

方法 3:DLC ジョブのローカルファイルにアクセスする

DLC コンテナーの指定されたパスにあるファイルにアクセスして、RAM ロールを使用して一時的なアクセス認証情報を取得します。 ファイルは PAI によって自動的に挿入され、定期的に更新されます。 ファイルのパスは /mnt/.alibabacloud/credentials です。 次のサンプルコードは、ファイルの内容の例を示しています。

{
	"AccessKeyId": "STS.N*********7",
	"AccessKeySecret": "3***************d",
	"SecurityToken": "DFE32G*******"
	"Expiration": "2024-05-21T10:39:29Z"
}

例 1:DLC ジョブに関連付けられた RAM ロールを使用して MaxCompute にアクセスする

トレーニングジョブを送信する 際に、次の主要な構成を完了します。

  • Alibaba Cloud Credentials ツールをインストールします。

    [サードパーティライブラリ] パラメーターを [リストから選択] に設定し、次のサードパーティライブラリを入力して、Alibaba Cloud Credentials と MaxCompute 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}",  # {odps_project} をプロジェクトの名前に置き換えます。
            endpoint="{odps_endpoint}"  # {odps_endpoint} をプロジェクトが存在するリージョンのエンドポイントに置き換えます。
        )
    
        for t in o.list_tables():
            print(t)
    
  • 起動コマンドを構成する

    [起動コマンド] を、スクリプトを実行するコマンドに設定します。 たとえば、python /mnt/data/xx.py です。

  • [ロール情報] を構成する

    [インスタンス RAM ロール][PAI のデフォルトロール] を選択します。

例 2:DLC ジョブに関連付けられた RAM ロールを使用して OSS にアクセスする

トレーニングジョブを送信する 際に、次の主要な構成を完了します。

  • Alibaba Cloud Credentials ツールをインストールします。

    [サードパーティライブラリ] パラメーターを [リストから選択] に設定し、次のサードパーティライブラリを入力して、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_endpoint} を OSS バケットが存在するリージョンのエンドポイントに置き換えます。
                         '{oss_bucket}'  # {oss_bucket} を OSS バケットの名前に置き換えます。
             )
    for b in islice(oss2.ObjectIterator(bucket), 10):
        print(b.key)
    
  • 起動コマンドを構成する

    [起動コマンド] を、スクリプトを実行するコマンドに設定します。 たとえば、python /mnt/data/xx.py です。

  • [ロール情報] を構成する

    [インスタンス RAM ロール][PAI のデフォルトロール] を選択します。

FAQ

ジョブの作成中にカスタムロールを DLC ジョブに関連付けるときにエラーが発生した場合はどうすればよいですか?

  • エラーメッセージは check permission for ram role failed または check permission for sub user failed です。

    この問題を解決するには、RAM コンソール にログインして、RAM ロールが存在するかどうかを確認します。

    • RAM ロールが存在しない場合は、RAM ロールを既存のロールに変更します。

    • RAM ロールが存在する場合は、Alibaba Cloud アカウントの所有者に連絡して、現在の RAM ユーザーに 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 ロールに信頼ポリシーを構成するには、次の手順を実行します。

    1. RAM コンソール に管理権限を持つ RAM ユーザーとしてログインします。

    2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

    3. [ロール] ページで、作成した RAM ロールの名前をクリックします。

    4. [信頼ポリシー] タブで、[信頼ポリシーの編集] をクリックします。

    5. コードエディタで、信頼ポリシーの内容を変更し、[OK] をクリックします。

      次のサンプルコードは、RAM ロールの元のポリシードキュメントを示しています。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::aaa:root"
              ],
              "Service": [
                "xxx.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }

      次のサンプルコードは、RAM ロールの新しいポリシードキュメントを示しています。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::aaa:root"
              ],
              "Service": [
                "xxx.aliyuncs.com",
                "pai.aliyuncs.com" 
              ]
            }
          }
        ],
        "Version": "1"
      }