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

Platform For AI:RAMロールをDLCジョブに関連付ける

最終更新日:Nov 11, 2024

ディープラーニングコンテナ (DLC) ジョブで他のAlibaba Cloudサービスにアクセスする場合は、ID認証用のAccessKeyペアを設定する必要があります。 RAMロールをDLCジョブに関連付けると、AccessKeyペアを設定することなく、Security Token Service (STS) が提供する一時的なアクセス資格情報を使用して、DLCジョブ内の他のAlibaba Cloudサービスにアクセスできます。 これにより、AccessKeyペアのセキュリティが確保されます。 このトピックでは、RAMロールを作成し、RAMロールをDLCジョブに関連付ける方法について説明します。 このトピックでは、RAMロールを使用してSTSが提供する一時的なアクセス資格情報を取得する方法についても説明します。

メリット

信頼できるエンティティがAlibaba CloudサービスであるRAMロールを使用できます。 Alibaba Cloudサービスは、RAMロールを引き受けて、クロスサービスアクセスを実装できます。 RAMロールを使用してID認証とアクセス制御を実装することで、一時的なアクセス資格情報を取得できます。 この方法には次の利点があります。

  • セキュリティと機密性: DLCジョブで資格情報を管理する必要はありません。 AccessKeyペアの代わりにSTSが提供する一時的なアクセス資格情報を使用して、AccessKeyペアのリークのリスクを減らすことができます。

  • 便利な管理: DLCジョブに関連付けられているRAMロールに添付されているポリシーを変更して、DLCジョブ内のAlibaba Cloudサービスの各開発者のアクセス許可をより便利できめ細かい方法で管理できます。

制限事項

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

設定方法

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

RAMロールをDLCジョブに関連付ける

シナリオ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バケット内のデータにアクセスします。 現在のワークスペースのデフォルトのOSSストレージパスを設定する方法の詳細については、「ワークスペースのデフォルトのストレージパスの設定」をご参照ください。

  • 設定方法

    [ジョブの作成] ページで、[ロール情報] セクションの [インスタンスRAMロール] パラメーターに、[PAIのデフォルトロール] を選択します。 詳細については、「トレーニングジョブの送信」をご参照ください。image

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

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

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

  1. RAMコンソールにログインし、RAMロールを作成します。 詳細については、「信頼できるAlibaba CloudサービスのRAMロールの作成」をご参照ください。

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

    • [信頼できるエンティティ]: [Alibaba Cloudサービス] を選択します。

    • [ロールタイプ][通常のサービスロール] を選択します。

    • [信頼できるサービスの選択]: [AIのプラットフォーム] を選択します。

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

    システムポリシーまたはカスタムポリシーをRAMロールにアタッチできます。 これにより、RAMロールは関連リソースにアクセスまたは管理できます。 詳細については、「RAMロールの作成と必要なポリシーのロールへのアタッチ」の「手順3: 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ジョブに関連付けないことを推奨します。 DLCジョブを作成するときは、[ロール情報] セクションの [インスタンスRAMロール] パラメーターに [ロールを関連付けない] を選択します。 詳細については、「トレーニングジョブの送信」をご参照ください。image

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

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

方法1: Alibaba Cloud Credentialsツールの使用

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

DLCジョブを作成したら、次の主要な設定を完了します。 詳細については、「トレーニングジョブの送信」をご参照ください。

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

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

    説明

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

  • スクリプトファイルを設定します。

    この例では、Pythonスクリプトファイルが使用されます。 他のプログラミング言語のSDKのサンプルコードの詳細については、「サンプルコード」をご参照ください。 [Code Builds] パラメーターの [Online configuration] を選択するか、または [Local Upload] を選択してスクリプトファイルをオンプレミスマシンから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ジョブを作成するときに、Startup Commandパラメーターを次のコマンドに設定できます。 これにより、DLCジョブに自動的に挿入されるローカルサービスにアクセスして、一時的なアクセス資格情報を取得できます。 詳細については、「トレーニングジョブの送信」をご参照ください。

# Obtain a temporary access credential for the RAM role of an instance.
curl $ALIBABA_CLOUD_CREDENTIALS_URI

次の出力が返されます。

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

出力では、次のパラメータに注意してください。

  • SecurityToken: RAMロールの一時的なアクセス資格情報。

  • 有効期限: RAMロールの一時アクセス資格情報の有効期限。

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

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

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

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

DLCジョブを作成したら、次の主要な設定を完了します。 詳細については、「トレーニングジョブの送信」をご参照ください。

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

    [サードパーティライブラリ] パラメーターを [リストから選択] に設定し、次のサードパーティライブラリを入力してAlibaba Cloud CredentialsとMaxCompute SDKをインストールします。

    alibabacloud_credentials
    pyodps
    説明

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

  • スクリプトファイルを設定します。

    この例では、Pythonスクリプトファイルが使用されます。 [Code Builds] パラメーターの [Online configuration] を選択するか、または [Local Upload] を選択してスクリプトファイルをオンプレミスマシンから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}",  # Replace {odps_project} with the name of your project.
            endpoint="{odps_endpoint}"  # Replace {odps_endpoint} with the endpoint of the region where your project resides.
        )
    
        for t in o.list_tables():
            print(t)
    
  • 起動コマンドの設定

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

  • ロール情報の設定

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

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

DLCジョブを作成したら、次の主要な設定を完了します。 詳細については、「トレーニングジョブの送信」をご参照ください。

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

    [サードパーティライブラリ] パラメーターを [リストから選択] に設定し、次のサードパーティライブラリを入力してAlibaba Cloud CredentialsとOSS SDKをインストールします。

    alibabacloud_credentials
    oss2
    説明

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

  • スクリプトファイルを設定します。

    この例では、Pythonスクリプトファイルが使用されます。 [Code Builds] パラメーターの [Online configuration] を選択するか、または [Local Upload] を選択してスクリプトファイルをオンプレミスマシンから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}',  # Replace {oss_endpoint} with the endpoint of the region where your OSS bucket resides.
                         '{oss_bucket}'  # Replace {oss_bucket} with the name of your OSS bucket.
             )
    for b in islice(oss2.ObjectIterator(bucket), 10):
        print(b.key)
    
  • 起動コマンドの設定

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

  • ロール情報の設定

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

よくある質問

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

  • エラーメッセージは、[ramロールのアクセス許可の確認に失敗しました] または [サブユーザーのアクセス許可の確認に失敗しました] です。

    この問題を解決するには、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. 左側のナビゲーションウィンドウで、アイデンティティ > ロールを選択します。

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

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

    5. 信頼ポリシーの内容を変更し、信頼ポリシードキュメントの保存をクリックします。

      次のサンプルコードは、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"
      }