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

Platform For AI:DSWインスタンスのRAMロールの設定

最終更新日:Nov 11, 2024

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サービスを使用します。

image

シナリオ1: カスタムロールをインスタンスに関連付ける

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

    下表にパラメーター示します。

    • [信頼できるエンティティ]: Alibaba Cloudサービス

    • ロールタイプ: 通常のサービスロール

    • 信頼できるサービスの選択: AIプラットフォーム

  2. インスタンス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}"
        }
      ]
    }
  3. DSWインスタンスを作成し、インスタンスRAMロールをインスタンスに関連付けます。 詳細については、「DSWインスタンスの作成」をご参照ください。

    image

シナリオ3: インスタンスをRAMロールに関連付けない

インスタンスがワークスペースでパブリックに設定されている場合、権限の漏洩を防ぐためにインスタンスをRAMロールに関連付けないことを推奨します。 インスタンスを作成するとき、またはインスタンスの設定を変更するときに、[詳細情報] セクションの [インスタンスRAMロール] パラメーターを [ロールを関連付けない] に設定できます。

image

インスタンスのRAMロール設定の更新

  1. データサイエンスワークショップ (DSW) ページに移動します。

    1. PAI コンソールにログインします。

    2. [概要] ページの上部のナビゲーションバーで、リージョンを選択します。

    3. 左側のナビゲーションペインで、[ワークスペース] をクリックします。 [ワークスペース] ページで、ワークスペースの名前をクリックします。

    4. ワークスペースページの左側のナビゲーションウィンドウで、モデルトレーニング > データサイエンスワークショップ (DSW) を選択して、DSWページに移動します。

  2. DSWインスタンスの [操作] 列で [設定の変更] をクリックします。

  3. [詳細情報] セクションで、インスタンスRAMロールを設定します。

    説明

    更新された実行中のインスタンスは、次のシナリオで再起動されます。[インスタンスRAMロール] パラメーターが [PAIのデフォルトロール] または [カスタムロール] から [ロールを関連付けない] 、または [ロールを関連付けない] から [PAIのデフォルトロール] または [カスタムロール] に変更されます。 設定を更新する前に、必ずインスタンスデータを保存してください。

  4. [確認]をクリックします。

手順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へのアクセス

  1. 次のコマンドを実行して、CredentialsツールとODPS SDKをインストールします。

    # Install the Credentials tool.
    pip install alibabacloud_credentials
    # Install the ODPS SDK.
    pip install odps
  2. インスタンス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へのアクセス

  1. 次のコマンドを実行して、資格情報ツールとOSS SDKをインストールします。

    # Install the Credentials tool.
    pip install alibabacloud_credentials
    # Install the OSS SDK.
    pip install oss2
  2. インスタンス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へのアクセス

  1. 次のコマンドを実行して、資格情報ツール、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
  2. インスタンス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エラーが報告された場合はどうすればよいですか?

この問題は、信頼ポリシーがロールに対して構成されていないために発生します。 次の操作を実行します。

  1. 管理者としてRAMコンソールにログインします。

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

  3. [ロール] ページで、必要なRAMロールを見つけます。

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

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

    ロールのサンプル元の信頼ポリシー:

    {
      "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"
    }