SDK v1 での ID ベースのデータ アクセスを使用してストレージに接続する

この記事では、Azure Machine Learning SDK for Python で ID ベースのデータ アクセスと Azure Machine Learning データストアを使用して、Azure 上のストレージ サービスに接続する方法について説明します。

通常、データストアは、資格情報ベースの認証を使って、ストレージ サービスにアクセスするためのアクセス許可があることを確認します。 データストアは、サブスクリプション ID やトークン認可などの接続情報を、ワークスペースに関連付けられたキー コンテナーに格納します。 ID ベースのデータ アクセスを使うデータストアを作成する場合、ストレージ サービスへのアクセス許可があることを確認するために Azure アカウント (Microsoft Entra トークン) が使われます。 ID ベースのデータ アクセスのシナリオでは、認証の資格情報が保存されません。 ストレージ アカウント情報のみがデータストアに格納されます。

Azure Machine Learning スタジオ UI を使用して、ID ベースのデータ アクセスを行うデータストアを作成するには、Azure Machine Learning スタジオによるデータ接続に関するページを参照してください。

アクセス キーやサービス プリンシパルなど、資格情報ベースの認証を使用するデータストアを作成するには、Azure のストレージ サービスへの接続に関するページを参照してください。

Azure Machine Learning での ID ベースの データ アクセス

Azure Machine Learning では ID ベースのデータ アクセスを 2 つのシナリオで適用できます。 これらのシナリオは、機密データを扱っていて、より詳細なデータ アクセス管理が必要な場合の ID ベースのアクセスに適しています。

警告

ID ベースのデータ アクセスは、自動 ML 実験ではサポートされていません。

  • ストレージ サービスへのアクセス
  • プライベート データを使用した機械学習モデルのトレーニング

ストレージ サービスへのアクセス

Azure Machine Learning データストアまたは Azure Machine Learning データセットを使用した ID ベースのデータ アクセスを使用してストレージ サービスに接続できます。

認証資格情報はデータストアに保持されるため、ストレージ サービスにアクセスするためのアクセス許可を持っていることが保証されます。 これらの資格情報がデータストアを介して登録されると、ワークスペースの閲覧者ロールを持つすべてのユーザーがそれらを取得できます。 このようなアクセスのスケールは、組織によってはセキュリティ上の問題になる場合があります。 ワークスペースの閲覧者ロールの詳細についてご確認ください。

ID ベースのデータ アクセスを使用すると、データストアに資格情報を保持する代わりに、Azure Machine Learning によって、データ アクセス認証用の Microsoft Entra トークンの入力が求められます。 このアプローチにより、ストレージ レベルでのデータ アクセス管理が可能になり、資格情報のセキュリティが維持されます。

同じ動作が、次の場合にも当てはまります。

注意

資格情報ベースの認証を使用して格納される資格情報には、サブスクリプション ID、Shared Access Signature (SAS) トークン、ストレージ アクセス キー、サービス プリンシパル情報 (クライアント ID やテナント ID など) が含まれます。

プライベート データでのモデル トレーニング

特定の機械学習のシナリオには、プライベート データを使用したトレーニング モデルが含まれます。 このような場合、データ サイエンティストは、機密入力データを公開せずにトレーニング ワークフローを実行する必要があります。 このシナリオでは、トレーニング コンピューティングのマネージド ID を使ってデータ アクセスを認証します。 このアプローチを使用すると、ストレージ管理者は、トレーニング コンピューティングでトレーニング ジョブを実行するために使用されるマネージド ID に「ストレージ BLOB データ閲覧者」アクセス権を付与できます。 個々のデータ サイエンティストにアクセス権を付与する必要はありません。 詳細については、コンピューティング クラスターでのマネージド ID の設定に関する記事を参照してください。

前提条件

データストアの作成と登録

Azure 上のストレージ サービスをデータストアとして登録すると、特定のワークスペースにそのデータストアが自動的に作成および登録されます。 必要なアクセス許可の種類のガイダンスについては、「ストレージ アクセスのためのアクセス許可」を参照してください。 また、特別なアクセス許可を必要とせずに、名前を指定するだけで、接続先のストレージを手動で作成することもできます。

仮想ネットワークの内側にあるデータ ストレージに接続する方法の詳細については、「仮想ネットワークの使用」を参照してください。

次のコードでは、認証パラメーター (sas_tokenaccount_keysubscription_id、サービス プリンシパル client_id など) がないことに注意してください。 この省略は、Azure Machine Learning での認証に ID ベースのデータ アクセスが使われることを示します。 データストアの作成は通常、ノートブックまたはスタジオを使用して対話的に行われます。 データ アクセス認証には Microsoft Entra トークンが使われます。

Note

データストア名は、小文字、数字、アンダースコアのみで構成する必要があります。

Azure BLOB コンテナー

Azure BLOB コンテナーをデータストアとして登録するには、register_azure_blob_container() を使用します。

次のコードでは、credentialless_blob データストアを作成して ws ワークスペースに登録し、それが blob_datastore 変数に割り当てられます。 このデータストアは、ストレージ アカウント my-account-name の BLOB コンテナー my_container_name にアクセスします。

# Create blob datastore without credentials.
blob_datastore = Datastore.register_azure_blob_container(workspace=ws,
                                                      datastore_name='credentialless_blob',
                                                      container_name='my_container_name',
                                                      account_name='my_account_name')

Azure Data Lake Storage Gen1

Azure Data Lake Storage Gen1 に接続するデータストアを登録するには、register_azure_data_lake() を使用します。

次のコードでは、credentialless_adls1 データストアを作成して workspace ワークスペースに登録し、それが adls_dstore 変数に割り当てられます。 このデータストアは、adls_storage Azure Data Lake Storage アカウントにアクセスします。

# Create Azure Data Lake Storage Gen1 datastore without credentials.
adls_dstore = Datastore.register_azure_data_lake(workspace = workspace,
                                                 datastore_name='credentialless_adls1',
                                                 store_name='adls_storage')

Azure Data Lake Storage Gen2

Azure Data Lake Storage Gen2 に接続するデータストアを登録するには、register_azure_data_lake_gen2() を使用します。

次のコードでは、credentialless_adls2 データストアを作成して ws ワークスペースに登録し、それが adls2_dstore 変数に割り当てられます。 このデータストアは、ストレージ アカウント myadls2 の ファイル システム tabular にアクセスします。

# Create Azure Data Lake Storage Gen2 datastore without credentials.
adls2_dstore = Datastore.register_azure_data_lake_gen2(workspace=ws, 
                                                       datastore_name='credentialless_adls2', 
                                                       filesystem='tabular', 
                                                       account_name='myadls2')

Azure SQL データベース

Azure SQL データベースの場合は、register_azure_sql_database() を使用して、Azure SQL データベース ストレージに接続するデータストアを登録します。

次のコードでは、credentialless_sqldb データストアを作成して ws ワークスペースに登録し、それが変数 sqldb_dstore に割り当てられます。 このデータストアは、myserver SQL DB サーバーのデータベース mydb にアクセスします。

# Create a sqldatabase datastore without credentials
                                                       
sqldb_dstore = Datastore.register_azure_sql_database(workspace=ws,
                                                       datastore_name='credentialless_sqldb',
                                                       server_name='myserver',
                                                       database_name='mydb')                                                       
                                                   

ストレージ アクセスのためのアクセス許可

Azure 上のストレージ サービスに安全に接続できるようにするには、Azure Machine Learning では、対応するデータ ストレージにアクセスするためのアクセス許可が必要です。

警告

ストレージ アカウントへのクロス テナント アクセスはサポートされていません。 シナリオでクロス テナント アクセスが必要な場合、Azure Machine Learning データ サポート チームにメール amldatasupport@microsoft.com で連絡し、カスタム コード解決を要請してください。

ID ベースのデータ アクセスでは、次のストレージ サービスのみへの接続がサポートされます。

  • Azure Blob Storage
  • Azure Data Lake Storage Gen1
  • Azure Data Lake Storage Gen2
  • Azure SQL データベース

これらのストレージ サービスにアクセスするには、少なくともストレージ BLOB データ閲覧者としての、ストレージ アカウントへのアクセス権が必要です。 Azure portal を使用してアクセス レベルを変更できるのは、ストレージ アカウントの所有者だけです。

ユーザー ID (Microsoft Entra ID) を使用しない場合は、ワークスペースのマネージド システム ID (MSI) アクセス許可を付与して、データストアを作成することもできます。 これを行うには、ストレージ アカウントに対して所有者アクセス許可を持っている必要があります。また、データ登録メソッドに grant_workspace_access= True パラメーターを追加する必要があります。

リモート コンピューティング先でモデルをトレーニングしており、トレーニング用のデータにアクセスする場合、ストレージ サービスからコンピューティング ID に対して、少なくともストレージ BLOB データ閲覧者ロールが付与されている必要があります。 コンピューティング クラスターでマネージド ID を設定する方法を参照してください。

仮想ネットワークの使用

Azure Machine Learning の既定では、ファイアウォールの内側、または仮想ネットワーク内にあるストレージ アカウントとは通信できません。

特定の仮想ネットワークからのアクセスのみを許可するように、ストレージ アカウントを構成できます。 この構成では、データがネットワークの外に漏洩しないようにするため、さらに手順が必要になります。 この動作は、資格情報ベースのデータ アクセスの場合と同じです。 詳細については、仮想ネットワークのシナリオの構成方法に関するページを参照してください。

ストレージ アカウントに仮想ネットワークの設定がある場合は、それによって必要な ID の種類とアクセス許可が決まります。 たとえば、データのプレビューとプロファイルの場合は、仮想ネットワークの設定によって、データアクセスの認証に使用される ID の種類が決まります。

  • 特定の IP とサブネットのみに、ストレージへのアクセスが許可されている場合は、Azure Machine Learning がワークスペース MSI を使用して、データのプレビューとプロファイルを実行します。

  • ストレージが ADLS Gen 2 または Blob であり、仮想ネットワークの設定がある場合は、作成時に定義されたデータストアの設定に応じて、お客様が、ユーザー ID またはワークスペース MSI を使用できます。

  • 仮想ネットワークの設定が "信頼されたサービスの一覧にある Azure サービスが、このストレージアカウントにアクセスできる" である場合は、ワークスペース MSI が使用されます。

ストレージ内のデータを使用する

Azure Machine Learning でストレージ内のデータを操作する際は、Azure Machine Learning データセットのご使用をお勧めします。

重要

ID ベースのデータ アクセスを使用するデータセットは、自動 ML 実験ではサポートされていません。

データセットを使用すると、データを機械学習タスク (トレーニングなど) 用に遅延評価された使用可能なオブジェクトにパッケージ化できます。 また、データセットを使用すると、Azure Blob Storage や Azure Data Lake Storage などの Azure ストレージ サービスからコンピューティング先に任意の形式のファイルをダウンロードまたはマウントできます。

データセットを作成するには、ID ベースのデータ アクセスも使用するデータストアからのパスを参照します。

  • 基となるストレージ アカウントの種類が BLOB または ADLS Gen 2 の場合、ユーザー ID には BLOB 閲覧者ロールが必要です。
  • 基となるストレージが ADLS Gen 1 の場合、ストレージのアクセス制御リスト (ACL) を使ってアクセス許可を設定できます。

次の例では、blob_datastore が既に存在し、ID ベースのデータ アクセスが使用されています。

blob_dataset = Dataset.Tabular.from_delimited_files(blob_datastore,'test.csv') 

データストアの作成をスキップして、ストレージ URL からデータセットを直接作成することもできます。 現在、この機能では、Azure BLOB と Azure Data Lake Storage Gen1 および Gen2 のみがサポートされています。 ストレージ URL に基づいて作成する場合は、ユーザー ID のみが認証に必要です。

blob_dset = Dataset.File.from_files('https://myblob.blob.core.windows.net/may/keras-mnist-fashion/')

ID ベースのデータ アクセスを使って作成されたデータセットを使うトレーニング ジョブを送信すると、トレーニング コンピューティングのマネージド ID がデータ アクセス認証に使われます。 Microsoft Entra トークンが使用されていません。 このシナリオでは、コンピューティングのマネージド ID に、ストレージ サービスから「ストレージ BLOB データ閲覧者」以上のロールが付与されていることを確認します。 詳細については、コンピューティング クラスターでのマネージド ID の設定に関する説明を参照してください。

次のステップ