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

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

通常、データストアでは、資格情報ベースの認証を使用して、ストレージ サービスにアクセスするためのアクセス許可があることが確認されます。 サブスクリプション ID やトークン認可などの接続情報は、ワークスペースに関連付けられたキー コンテナーに格納されます。 ID ベースのデータ アクセスを使用するデータストアを作成するときは、Azure アカウント (Azure Active Directory トークン) を使用して、ストレージ サービスにアクセスするためのアクセス許可があることが確認されます。 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 によって、データ アクセス認証用の Azure Active Directory トークンの入力が求められます。 このアプローチにより、ストレージ レベルでのデータ アクセス管理が可能になり、資格情報が機密として保持されます。

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

注意

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

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

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

前提条件

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

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

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

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

注意

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

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 (Azure Active Directory) を使用しない場合は、ワークスペースのマネージド システム ID (MSI) アクセス許可を付与して、データストアを作成することもできます。 これを行うには、ストレージ アカウントへの所有者アクセス許可を持ち、データ登録 メソッドに grant_workspace_access= True パラメーターを追加する必要があります。

リモート コンピューティング先でモデルをトレーニングしており、トレーニング用データにアクセスする場合は、ストレージ サービスから、「ストレージ BLOB データ閲覧者」以上のロールがコンピューティング ID に付与されている必要があります。 コンピューティング クラスターでマネージド 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 がデータ アクセス認証に使用されます。 Azure Active Directory トークンは使用されません。 このシナリオでは、コンピューティングのマネージド ID に、ストレージ サービスから「ストレージ BLOB データ閲覧者」以上のロールが付与されていることを確認します。 詳細については、コンピューティング クラスターでのマネージド ID の設定に関する説明を参照してください。

次のステップ