仮想ネットワークを使用して Azure Machine Learning トレーニング環境をセキュリティで保護する
適用対象: Python SDK azure-ai-ml v2 (現行)
ヒント
この記事の手順ではなく、Azure Machine Learning のマネージド仮想ネットワークを使用できます。 マネージド仮想ネットワークを使用すると、Azure Machine Learning はワークスペースとマネージド コンピューティングのネットワーク分離のジョブを処理します。 また、ワークスペースに必要なリソース (Azure Storage アカウントなど) のプライベート エンドポイントを追加することもできます。 詳しくは、ワークスペースのマネージド ネットワーク分離に関する記事をご覧ください。
Azure Machine Learning のコンピューティング インスタンス、サーバーレス コンピューティング、およびコンピューティング クラスターを使用して、Azure Virtual Network 内のモデルを安全にトレーニングできます。 環境を計画する際に、パブリック IP アドレスあり、またはなしのコンピューティング インスタンス/クラスターまたはサーバーレス コンピューティングを構成できます。 この 2 つの一般的な違いは次のとおりです。
- パブリック IP なし: 同じネットワーク リソース要件がないため、コストが削減されます。 インターネットからの受信トラフィックの要件を削除して、セキュリティを向上します。 ただし、必要なリソース (Microsoft Entra ID、Azure Resource Manager など) への送信アクセスを有効にするために、追加の構成変更が必要です。
- パブリック IP: 既定で動作しますが、Azure ネットワーク リソースが増えるため、コストが高くなります。 パブリック インターネットを経由する Azure Machine Learning service からの受信通信が必要です。
次の表に、これらの構成の違いを示します。
構成 | パブリック IP あり | パブリック IP なし |
---|---|---|
受信トラフィック | AzureMachineLearning サービス タグ。 |
なし |
送信トラフィック | 既定では、制限なしでパブリック インターネットにアクセスできます。 ネットワーク セキュリティ グループまたはファイアウォールを使用して、アクセスする対象を制限できます。 |
既定では、Azure によって提供される既定の送信アクセスを使って、パブリック ネットワークにアクセスできます。 インターネット上の必要なリソースに送信トラフィックをルーティングする必要がある場合は、代わりに Virtual Network NAT ゲートウェイまたはファイアウォールを使うことをお勧めします。 |
Azure ネットワーク リソース | パブリック IP アドレス、ロード バランサー、ネットワーク インターフェイス | なし |
また、Azure Databricks または HDInsight を使用して仮想ネットワーク内のモデルをトレーニングすることもできます。
重要
この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 プレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。
- Virtual Network の概要
- ワークスペース リソースをセキュリティで保護する
- 推論環境をセキュリティで保護する
- スタジオの機能を有効にする
- カスタム DNS を使用する
- ファイアウォールを使用する
安全なワークスペースの作成に関するチュートリアルについては、「チュートリアル: 安全なワークスペースを作成する」、「Bicep テンプレート」、または「Teraform テンプレート」を参照してください。
この記事では、仮想ネットワークで次のトレーニング コンピューティング リソースをセキュリティで保護する方法について説明します。
- Azure Machine Learning コンピューティング クラスター
- Azure Machine Learning コンピューティング インスタンス
- Azure Machine Learning サーバーレス コンピューティング
- Azure Databricks
- 仮想マシン
- HDInsight クラスター
前提条件
一般的な仮想ネットワークのシナリオと全体的な仮想ネットワーク アーキテクチャについては、ネットワーク セキュリティの概要に関するページを参照してください。
コンピューティング リソースで使用する既存の仮想ネットワークとサブネット。 この VNet は、Azure Machine Learning ワークスペースと同じサブスクリプションにある必要があります。
- ワークスペースとトレーニング ジョブで使用されるストレージ アカウントは、コンピューティング インスタンス、サーバーレス コンピューティング、およびクラスターに使用するものと同じ Azure リージョンに配置することをお勧めします。 それらが同じ Azure リージョンにない場合、データ転送コストが発生し、ネットワーク待機時間が増える可能性があります。
- VNet 内の
*.instances.azureml.net
および*.instances.azureml.ms
への WebSocket 通信が許可されていることを確認します。 WebSocket は、コンピューティング インスタンスでは Jupyter によって使用されます。
仮想ネットワーク内の既存のサブネット。 このサブネットは、コンピューティング インスタンス、クラスター、およびサーバーレス コンピューティングのノードの作成時に使用されます。
- サブネットが他の Azure サービスに委任されていないことを確認します。
- サブネットに十分な空き IP アドレスが含まれていることを確認します。 コンピューティング インスタンスごとに 1 つの IP アドレスが必要です。 コンピューティング クラスター内の "ノード" ごと、およびサーバーレス コンピューティング ノードごとに、1 つの IP アドレスが必要です。
独自の DNS サーバーがある場合は、DNS 転送を使用して、コンピューティング インスタンスおよびクラスターの完全修飾ドメイン名 (FQDN) を解決することをお勧めします。 詳細については、Azure Machine Learning でのカスタム DNS の使用に関する記事を参照してください。
リソースを仮想ネットワークまたはサブネットにデプロイするには、ご利用のユーザー アカウントが、Azure ロールベースのアクセス制御 (Azure RBAC) で次のアクションへのアクセス許可を保持している必要があります。
- 仮想ネットワーク リソースの "Microsoft.Network/*/read"。 このアクセス許可は、Azure Resource Manager (ARM) テンプレートのデプロイには必要ありません。
- 仮想ネットワーク リソース上の "Microsoft.Network/virtualNetworks/join/action"。
- サブネット リソース上の "Microsoft.Network/virtualNetworks/subnets/join/action"。
ネットワークでの Azure RBAC の詳細については、ネットワークの組み込みロールに関するページを参照してください
制限事項
仮想ネットワークでのコンピューティング クラスター/インスタンスおよびサーバーレス コンピューティングのデプロイは、Azure Lighthouse ではサポートされていません。
トレーニング中にコンピューティング インスタンスと既定のストレージ アカウント間の "プライベート" ネットワーク通信用にポート 445 を開く必要があります。 たとえば、コンピューティングが 1 つの VNet にあり、ストレージ アカウントが別の VNet にある場合は、ストレージ アカウント VNet に対してポート 445 をブロックしないでください。
ワークスペースとは異なる VNet/リージョン内のコンピューティング クラスター
重要
別のリージョン/VNet に "コンピューティング インスタンス" を作成することはできません。作成できるのは "コンピューティング クラスター" のみです。
ワークスペース仮想ネットワークとは異なるリージョンの Azure 仮想ネットワークにコンピューティング クラスターを作成するために、2 つの VNet 間の通信を有効にするオプションがいくつかあります。
- VNet ピアリングを使用します。
- コンピューティング クラスターを含むことになる仮想ネットワーク内にワークスペース用のプライベート エンドポイントを追加します。
重要
選択した方法に関係なく、コンピューティング クラスター用の VNet も作成する必要があります。Azure Machine Learning がお客様の代わりにこれを作成することはありません。
また、既定のストレージ アカウント、Azure Container Registry、Azure Key Vault がコンピューティング クラスター用の VNet にアクセスすることを許可する必要もあります。 これを行うには複数の方法があります。 たとえば、コンピューティング クラスター用の VNet 内の各リソースにプライベート エンドポイントを作成したり、VNet ピアリングを使用してワークスペース VNet がコンピューティング クラスター VNet にアクセスできるようにしたりできます。
シナリオ: VNet ピアリング
Azure 仮想ネットワークを使用するようにワークスペースを構成します。 詳細については、「ワークスペース リソースのセキュリティ保護」を参照してください。
コンピューティング クラスター用に使用する 2 つ目の Azure 仮想ネットワークを作成します。 これはワークスペース用に使用するものとは異なる Azure リージョンに配置できます。
2 つの VNet 間で VNet ピアリングを構成します。
ヒント
VNet ピアリングの状態が接続済みになるのを待ってから続きを行います。
privatelink.api.azureml.ms
DNS ゾーンを変更して、コンピューティング クラスター用の VNet へのリンクを追加します。 このゾーンは Azure Machine Learning ワークスペースによって、ワークスペースがプライベート エンドポイントを使用して VNet に参加するときに作成されます。新しい仮想ネットワーク リンクを DNS ゾーンに追加します。 これは次のいずれかの方法で行うことができます。
- Azure portal から DNS ゾーンに移動し、[仮想ネットワーク リンク] を選択します。 次に、[+ 追加] を選択し、コンピューティング クラスター用に作成した VNet を選択します。
- Azure CLI から、
az network private-dns link vnet create
コマンドを使用します。 詳細については、「az network private-dns link vnet create」を参照してください。 - Azure PowerShell から、
New-AzPrivateDnsVirtualNetworkLink
コマンドを使用します。 詳細については、「New-AzPrivateDnsVirtualNetworkLink」を参照してください。
privatelink.notebooks.azure.net
DNS ゾーンに対して前の手順とサブ手順を繰り返します。両方の VNet からのアクセスを許可するように、次の Azure リソースを構成します。
- ワークスペースの既定のストレージ アカウント。
- ワークスペース用の Azure Container Registry。
- ワークスペース用の Azure Key Vault。
ヒント
VNet へのアクセスを許可するようにこれらのサービスを構成する方法は複数あります。 たとえば、両方の VNet 内に各リソース用のプライベート エンドポイントを作成できます。 または両方の VNet からのアクセスを許可するようにリソースを構成することができます。
VNet を使用する場合に通常行うようにコンピューティング クラスターを作成します。ただしコンピューティング クラスター用に作成した VNet を選択します。 VNet が別のリージョンにある場合は、コンピューティング クラスターの作成時にそのリージョンを選択します。
警告
リージョンを設定するときに、それがワークスペースやデータストアとは異なるリージョンであると、ネットワーク待機時間とデータ転送コストが増大する可能性があります。 待ち時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
シナリオ: プライベート エンドポイント
Azure 仮想ネットワークを使用するようにワークスペースを構成します。 詳細については、「ワークスペース リソースのセキュリティ保護」を参照してください。
コンピューティング クラスター用に使用する 2 つ目の Azure 仮想ネットワークを作成します。 これはワークスペース用に使用するものとは異なる Azure リージョンに配置できます。
コンピューティング クラスターを含むことになる仮想ネットワーク内にワークスペース用の新しいプライベート エンドポイントを作成します。
Azure portal を使用して新しいプライベート エンドポイントを追加するには、ワークスペースを選択した後に、[ネットワーク] を選択します。 [プライベート エンドポイント接続] と [+ プライベート エンドポイント] を選択し、フィールドを使用して新しいプライベート エンドポイントを作成します。
- [リージョン] を選択する場合は、ご使用の仮想ネットワークと同じリージョンを選択します。
- [リソースの種類] を選択する場合は、Microsoft.MachineLearningServices/workspaces を使用します。
- [リソース] を実際のワークスペース名に設定します。
- [仮想ネットワーク] と [サブネット] を、コンピューティング クラスター用に作成した VNet とサブネットに設定します。
最後に、 [作成] を選択してプライベート エンドポイントを作成します。
Azure CLI を使用して新しいプライベート エンドポイントを追加するには、
az network private-endpoint create
を使用します。 このコマンドの使用例については、「Azure Machine Learning ワークスペース用のプライベート エンドポイントの構成」を参照してください。
VNet を使用する場合に通常行うようにコンピューティング クラスターを作成します。ただしコンピューティング クラスター用に作成した VNet を選択します。 VNet が別のリージョンにある場合は、コンピューティング クラスターの作成時にそのリージョンを選択します。
警告
リージョンを設定するときに、それがワークスペースやデータストアとは異なるリージョンであると、ネットワーク待機時間とデータ転送コストが増大する可能性があります。 待機時間とコストは、クラスターの作成時や、クラスターでのジョブの実行時に発生する可能性があります。
パブリック IP なしのコンピューティング インスタンス/クラスターまたはサーバーレス コンピューティング
重要
この情報は、Azure Virtual Network を使用している場合にのみ有効です。 マネージド仮想ネットワークを使用している場合、コンピューティング リソースを Azure Virtual Network にデプロイすることはできません。 マネージド仮想ネットワークの使用の詳細については、マネージド ネットワークを使用したマネージド コンピューティングに関するページを参照してください。
重要
プレビューにオプトインせずにパブリック IP なしで構成されたコンピューティング インスタンスまたはコンピューティング クラスターを使用している場合は、2023 年 1 月 20 日 (この機能が一般提供される時点) より後に、それらを削除して再作成する必要があります。
パブリック IP なしのプレビューを以前に使用していた場合は、一般提供用に要件が変更されたため、どのトラフィックで受信と送信を許可するかについても変更が必要になる可能性があります。
- 送信要件 - 2 つの追加の送信。これらは、コンピューティング インスタンスおよびクラスターの管理にのみ使用されます。 これらのサービス タグの宛先は、Microsoft によって所有されています。
- UDP ポート 5831 の
AzureMachineLearning
サービス タグ。 - TCP ポート 443 の
BatchNodeManagement
サービス タグ。
- UDP ポート 5831 の
次の構成は、「前提条件」セクションに記載されている内容への追加であり、パブリック IP なしで構成されたコンピューティング インスタンス/クラスターの作成に固有の内容です。 これらは、サーバーレス コンピューティングにも適用されます。
コンピューティング リソースが VNet から Azure Machine Learning サービスと通信するには、ワークスペースのプライベート エンドポイントを使用する必要があります。 詳細については、「Azure Machine Learning ワークスペース用にプライベート エンドポイントを構成する」を参照してください。
VNet で、次のサービス タグまたは完全修飾ドメイン名 (FQDN) への送信トラフィックを許可します。
サービス タグ Protocol Port Notes AzureMachineLearning
TCP
UDP443/8787/18881
5831Azure Machine Learning service との通信。 BatchNodeManagement.<region>
ANY 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。 コンピューティング インスタンスとコンピューティング クラスターは、Azure Batch サービスを使用して実装されます。Storage.<region>
TCP 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 このサービス タグは、Azure Batch によって使用される Azure Storage アカウントとの通信に使用されます。重要
Storage.<region>
への送信アクセスは、ワークスペースからのデータの流出に利用されるおそれがあります。 サービス エンドポイント ポリシーを使用すると、この脆弱性を軽減できます。 詳細については、Azure Machine Learning のデータ流出防止に関する記事を参照してください。FQDN Protocol Port Notes <region>.tundra.azureml.ms
UDP 5831 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。graph.windows.net
TCP 443 Microsoft Graph API との通信。 *.instances.azureml.ms
TCP 443/8787/18881 Azure Machine Learning との通信。 *.<region>.batch.azure.com
ANY 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。*.<region>.service.batch.azure.com
ANY 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。*.blob.core.windows.net
TCP 443 Azure Blob Storage との通信。 *.queue.core.windows.net
TCP 443 Azure Queue Storage との通信。 *.table.core.windows.net
TCP 443 Azure Table Storage との通信。 既定では、パブリック IP なしで構成されているコンピューティング インスタンスまたはクラスターは、インターネットに送信アクセスできません。 そこからインターネットにアクセス "できる" 場合は、Azure の既定の送信アクセスが原因であり、ユーザーにはインターネットへの送信を許可する NSG があります。 ただし、既定の送信アクセスを使うことはお勧めしません。 インターネットへの送信アクセスが必要な場合は、代わりに、ファイアウォールとアウトバウンド規則、または NAT ゲートウェイとネットワーク サービス グループを使って、送信トラフィックを許可することをお勧めします。
Azure Machine Learning で使用される送信トラフィックの詳細については、次の記事を参照してください。
Azure Firewallで使用できるサービス タグの詳細については、「仮想ネットワーク サービス タグ」の記事を参照してください。
パブリック IP アドレスなしでコンピューティング インスタンスまたはクラスターを作成するには、次の情報を利用してください。
az ml compute create
コマンドで、次の値を置き換えます。
rg
: コンピューティングが作成されるリソース グループ。ws
: Azure Machine Learning ワークスペースの名前。yourvnet
: Azure 仮想ネットワーク。yoursubnet
: コンピューティングに使うサブネット。AmlCompute
またはComputeInstance
:AmlCompute
を指定すると、"コンピューティング クラスター" が作成されます。ComputeInstance
を使って "コンピューティング インスタンス" を作成します。
# create a compute cluster with no public IP
az ml compute create --name cpu-cluster --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type AmlCompute --set enable_node_public_ip=False
# create a compute instance with no public IP
az ml compute create --name myci --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type ComputeInstance --set enable_node_public_ip=False
次の情報を使用して、指定のワークスペースに VNet でパブリック IP アドレスがないサーバーレス コンピューティング ノードを構成します。
重要
パブリック IP サーバーレス コンピューティングを使用せず、ワークスペースで IP 許可一覧を使用している場合は、送信プライベート エンドポイントをワークスペースに追加する必要があります。 サーバーレス コンピューティングはワークスペースと通信する必要がありますが、パブリック IP が構成されていない場合は、インターネット アクセスに Azure Default Outbound を使用します。 この送信のパブリック IP は動的であり、IP 許可一覧に追加することはできません。 ワークスペースに対して送信プライベート エンドポイントを作成することで、ワークスペースにバインドされたサーバーレス コンピューティングからのトラフィックが、IP 許可一覧をバイパスできるようになります。
- Azure CLI
- Python SDK
-
[ スタジオ](#tab/azure-studio)
ワークスペースを作成します。
az ml workspace create -n <workspace-name> -g <resource-group-name> --file serverlesscomputevnetsettings.yml
name: testserverlesswithnpip
location: eastus
public_network_access: Disabled
serverless_compute:
custom_subnet: /subscriptions/<sub id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<vnet name>/subnets/<subnet name>
no_public_ip: true
ワークスペースの更新:
az ml workspace update -n <workspace-name> -g <resource-group-name> --file serverlesscomputevnetsettings.yml
serverless_compute:
custom_subnet: /subscriptions/<sub id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<vnet name>/subnets/<subnet name>
no_public_ip: true
パブリック IP ありのコンピューティング インスタンス/クラスターまたはサーバーレス コンピューティング
重要
この情報は、Azure Virtual Network を使用している場合にのみ有効です。 マネージド仮想ネットワークを使用している場合、コンピューティング リソースを Azure Virtual Network にデプロイすることはできません。 マネージド仮想ネットワークの使用の詳細については、マネージド ネットワークを使用したマネージド コンピューティングに関するページを参照してください。
次の構成は、「前提条件」セクションに記載されている内容への追加であり、パブリック IP ありのコンピューティング インスタンス/クラスターの作成に固有の内容です。 これらは、サーバーレス コンピューティングにも適用されます。
複数のコンピューティング インスタンス/クラスターを 1 つの仮想ネットワークに配置する場合は、1 つまたは複数のリソースのクォータの増加を要求する必要がある場合があります。 Machine Learning コンピューティング インスタンスまたはクラスターにより、仮想ネットワークが含まれているリソース グループにネットワーク リソースが自動的に割り当てられます。 サービスにより、各コンピューティング インスタンスまたはクラスターについて次のリソースが割り当てられます。
ネットワーク セキュリティ グループ (NSG) は自動的に作成されます。 この NSG を使って、
AzureMachineLearning
サービス タグからのポート 44224 での受信 TCP トラフィックを許可します。重要
コンピューティング インスタンスとコンピューティング クラスターは、必要なルールが設定された NSG を自動的に作成します。
サブネット レベルに別の NSG がある場合、サブネット レベルの NSG のルールが、自動的に作成された NSG のルールと競合しないようにする必要があります。
NSG でネットワーク トラフィックがどのようにフィルター処理されるかについては、「ネットワーク セキュリティ グループによってネットワーク トラフィックをフィルター処理する方法」を参照してください。
1 つのロード バランサー
コンピューティング クラスターでは、クラスターが 0 ノードにスケールダウンするたびにこれらのリソースが削除され、スケールアップすると作成されます。
コンピューティング インスタンスでは、これらのリソースはインスタンスが削除されるまで保持されます。 インスタンスを停止しても、リソースは削除されません。
重要
これらのリソースは、サブスクリプションのリソース クォータによって制限されます。 仮想ネットワーク リソース グループがロックされている場合、コンピューティング クラスターやインスタンスの削除が失敗します。 コンピューティング クラスターやインスタンスが削除されるまで、ロード バランサーを削除することはできません。 また、ネットワーク セキュリティ グループの作成を禁止する Azure Policy の割り当てがないことも確認してください。
お使いの VNet で、
AzureMachineLearning
サービス タグからのポート 44224 での受信 TCP トラフィックを許可します。重要
コンピューティング インスタンス/クラスターには、作成時に IP アドレスが動的に割り当てられます。 このアドレスは作成前には分からず、作成プロセスの一環として受信アクセスが必要であるため、ファイアウォールで静的に割り当てることはできません。 代わりに、VNet でファイアウォールを使用している場合は、この受信トラフィックを許可するようにユーザー定義ルートを作成する必要があります。
お使いの VNet で、次のサービス タグに対する送信トラフィックを許可します。
サービス タグ Protocol Port Notes AzureMachineLearning
TCP
UDP443/8787/18881
5831Azure Machine Learning service との通信。 BatchNodeManagement.<region>
ANY 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。 コンピューティング インスタンスとコンピューティング クラスターは、Azure Batch サービスを使用して実装されます。Storage.<region>
TCP 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 このサービス タグは、Azure Batch によって使用される Azure Storage アカウントとの通信に使用されます。重要
Storage.<region>
への送信アクセスは、ワークスペースからのデータの流出に利用されるおそれがあります。 サービス エンドポイント ポリシーを使用すると、この脆弱性を軽減できます。 詳細については、Azure Machine Learning のデータ流出防止に関する記事を参照してください。FQDN Protocol Port Notes <region>.tundra.azureml.ms
UDP 5831 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。graph.windows.net
TCP 443 Microsoft Graph API との通信。 *.instances.azureml.ms
TCP 443/8787/18881 Azure Machine Learning との通信。 *.<region>.batch.azure.com
ANY 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。*.<region>.service.batch.azure.com
ANY 443 <region>
は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。*.blob.core.windows.net
TCP 443 Azure Blob Storage との通信。 *.queue.core.windows.net
TCP 443 Azure Queue Storage との通信。 *.table.core.windows.net
TCP 443 Azure Table Storage との通信。
パブリック IP アドレスを使って VNet にコンピューティング インスタンスまたはクラスターを作成するには、次の情報を利用してください。
- Azure CLI
- Python SDK
-
[ スタジオ](#tab/azure-studio)
az ml compute create
コマンドで、次の値を置き換えます。
rg
: コンピューティングが作成されるリソース グループ。ws
: Azure Machine Learning ワークスペースの名前。yourvnet
: Azure 仮想ネットワーク。yoursubnet
: コンピューティングに使うサブネット。AmlCompute
またはComputeInstance
:AmlCompute
を指定すると、"コンピューティング クラスター" が作成されます。ComputeInstance
を使って "コンピューティング インスタンス" を作成します。
# create a compute cluster with a public IP
az ml compute create --name cpu-cluster --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type AmlCompute
# create a compute instance with a public IP
az ml compute create --name myci --resource-group rg --workspace-name ws --vnet-name yourvnet --subnet yoursubnet --type ComputeInstance
次の情報を使用して、指定のワークスペースに VNet でパブリック IP アドレスがあるサーバーレス コンピューティング ノードを構成します。
- Azure CLI
- Python SDK
-
[ スタジオ](#tab/azure-studio)
ワークスペースを作成します。
az ml workspace create -n <workspace-name> -g <resource-group-name> --file serverlesscomputevnetsettings.yml
name: testserverlesswithvnet
location: eastus
serverless_compute:
custom_subnet: /subscriptions/<sub id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<vnet name>/subnets/<subnet name>
no_public_ip: false
ワークスペースの更新:
az ml workspace update -n <workspace-name> -g <resource-group-name> --file serverlesscomputevnetsettings.yml
serverless_compute:
custom_subnet: /subscriptions/<sub id>/resourceGroups/<resource group>/providers/Microsoft.Network/virtualNetworks/<vnet name>/subnets/<subnet name>
no_public_ip: false
Azure Databricks
- 仮想ネットワークは Azure Machine Learning のワークスペースと同じサブスクリプションとリージョンになければなりません。
- 仮想ネットワークでワークスペースの Azure Storage アカウントもセキュリティで保護される場合、それらは Azure Databricks クラスターと同じ仮想ネットワークに存在する必要があります。
- Azure Databricks によって使用される
__ databricks-private__ および__ databricks-public__ サブネットに加えて、仮想ネットワーク用に作成された__ 既定の__ サブネットも必要です。 - Azure Databricks は、仮想ネットワークとの通信にプライベート エンドポイントを使用しません。
仮想ネットワークでの Azure Databricks の使用に関する具体的な情報については、「
仮想マシンまたは HDInsight クラスター
このセクションでは、ワークスペースのある仮想ネットワークで仮想マシンまたは Azure HDInsight クラスターを使用する方法について説明します。
VM または HDInsight クラスターを作成する
重要
Azure Machine Learning では、Ubuntu を実行する仮想マシンのみがサポートされています。
Azure portal または Azure CLI を使用して VM または HDInsight クラスターを作成し、そのクラスターを Azure の仮想ネットワークに配置します。 詳細については、次の記事を参照してください。
[ Azure Virtual Network を使用した Azure HDInsight の拡張](../hdinsight/hdinsight-plan-virtual-network-deployment.md)
ネットワーク ポートを構成する
Azure Machine Learning で VM またはクラスターの SSH ポートと通信できるようにするために、ネットワーク セキュリティ グループ用のソース エントリを構成します。 SSH ポートは、通常はポート 22 です。 このソースからのトラフィックを許可するには、次の操作を実行します。
__ [ソース]__ ボックスの一覧で、__ [サービス タグ]__ を選択します。__ [ソース サービス タグ]__ ボックスの一覧で、__ [AzureMachineLearning]__ を選択します。[ソース ポート範囲] ボックスの一覧で、* を選択します。
__ [宛先]__ ボックスの一覧で__ [すべて]__ を選択します。__ [宛先ポート範囲]__ ボックスの一覧で__ [22]__ を選択します。__ [プロトコル]__ で__ [すべて]__ を選択します。[アクション] で、 [許可] を選択します。
ネットワーク セキュリティ グループの既定のアウトバウンド規則を保持します。 詳細については、「セキュリティ グループ」の既定のセキュリティ規則をご覧ください。
既定のアウトバウンド規則を使用せずに仮想ネットワークのアウトバウンド アクセスを制限する場合は、「
VM または HDInsight クラスターをアタッチする
VM または HDInsight クラスターをお客様の Azure Machine Learning のワークスペースにアタッチします。 詳細については、「モデルのトレーニングとデプロイのためのコンピューティング リソースを管理する」を参照してください。
モデルのトレーニングに必要なパブリック インターネット アクセス
重要
この記事の前のセクションでは、コンピューティング リソースの作成に必要な構成について説明していますが、このセクションの構成情報は、これらのリソースをモデルのトレーニングに使用するために必要です。
Azure Machine Learning は、パブリック インターネットへの受信アクセスと送信アクセスの両方が必要です。 次の表に、必要なアクセスの概要と、その目的を示します。 .region
で終わるサービス タグでは、region
を、ご利用のワークスペースを含む Azure リージョンに置き換えます。 Storage.westus
の例を次に示します。
ヒント
「必須」のタブには、必要な受信および送信の構成が一覧表示されます。 「状況」のタブには、有効にする構成によっては必要になる、省略可能な受信と送信の構成が一覧表示されます。
方向 | プロトコルおよび ports |
サービス タグ | 目的 |
---|---|---|---|
送信 | TCP: 80、443 | AzureActiveDirectory |
Microsoft Entra ID 使用した認証。 |
送信 | TCP: 443、18881 UDP: 5831 |
AzureMachineLearning |
Azure Machine Learning service の使用。 ノートブックで Python Intellisense にポート 18881 が使用されます。 Azure Machine Learning コンピューティング インスタンスの作成、更新、削除には、ポート 5831 が使用されます。 |
送信 | ANY: 443 | BatchNodeManagement.region |
Azure Machine Learning コンピューティング インスタンス/クラスターの Azure Batch バックエンドとの通信。 |
送信 | TCP: 443 | AzureResourceManager |
Azure Machine Learning、Azure CLI、Azure Machine Learning SDK を使用した Azure リソースの作成。 |
送信 | TCP: 443 | Storage.region |
コンピューティング クラスターとコンピューティング インスタンスの Azure Storage アカウントに格納されたデータにアクセスします。 この送信でのデータ流出の防止については、「データ流出防止」を参照してください。 |
送信 | TCP: 443 | AzureFrontDoor.FrontEnd * 21Vianet によって運営される Microsoft Azure では不要。 |
Azure Machine Learning スタジオ用のグローバル エントリ ポイント。 AutoML のイメージと環境を格納します。 この送信でのデータ流出の防止については、「データ流出防止」を参照してください。 |
送信 | TCP: 443 | MicrosoftContainerRegistry.region このタグには AzureFrontDoor.FirstParty タグへの依存関係があることに注意してください |
Microsoft が提供する Docker イメージにアクセスします。 Azure Kubernetes Service の Azure Machine Learning ルートのセットアップ。 |
ヒント
サービス タグの代わりに IP アドレスが必要な場合、次のいずれかのオプションを使用します。
- Azure IP 範囲とサービス タグから一覧をダウンロードします。
- Azure CLI の az network list-service-tags コマンドを使用します。
- Azure PowerShell の Get-AzNetworkServiceTag コマンドを使用します。
IP アドレスは定期的に変わる可能性があります。
機械学習プロジェクトで必要なパッケージをインストールするために、Visual Studio Code サイトと Microsoft 以外のサイトへの送信トラフィックを許可する必要がある場合があります。 次の表に、機械学習に一般的に使用されるリポジトリを示します。
ホスト名 | 目的 |
---|---|
anaconda.com *.anaconda.com |
既定のパッケージをインストールするために使用されます。 |
*.anaconda.org |
リポジトリ データを取得するために使用されます。 |
pypi.org |
既定のインデックスからの依存関係 (存在する場合) を一覧表示するために使用されます。ユーザー設定によってこのインデックスが上書きされることはありません。 インデックスが上書きされる場合は、*.pythonhosted.org も許可する必要があります。 |
cloud.r-project.org |
R 開発用の CRAN パッケージをインストールするときに使用されます。 |
*.pytorch.org |
PyTorch に基づくいくつかのサンプルによって使用されます。 |
*.tensorflow.org |
Tensorflow に基づくいくつかのサンプルによって使用されます。 |
code.visualstudio.com |
Visual Studio Code デスクトップをダウンロードしてインストールするために必要です。 これは Visual Studio Code Web では必要ありません。 |
update.code.visualstudio.com *.vo.msecnd.net |
セットアップ スクリプトを通じてコンピューティング インスタンスにインストールされている Visual Studio Code サーバー ビットを取得するために使用されます。 |
marketplace.visualstudio.com vscode.blob.core.windows.net *.gallerycdn.vsassets.io |
Visual Studio Code 拡張機能をダウンロードしてインストールするために必要です。 これらのホストにより、Visual Studio Code 用の Azure ML 拡張機能で提供されるコンピューティング インスタンスへのリモート接続が有効になります。 詳細については、「Visual Studio Code で Azure Machine Learning コンピューティング インスタンスに接続する」を参照してください。 |
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* |
コンピューティング インスタンスにインストールされている Websocket サーバー ビットを取得するために使用されます。 Websocket サーバーは、Visual Studio Code クライアント (デスクトップ アプリケーション) から、コンピューティング インスタンスで実行されている Visual Studio Code サーバーに要求を送信するために使用されます。 |
注意
Azure Machine Learning VS Code 拡張機能を使用する場合、リモート コンピューティング インスタンスには、拡張機能に必要なパッケージのインストールにパブリック リポジトリへのアクセスが必要です。 コンピューティング インスタンスがこれらのパブリック リポジトリまたはインターネットにアクセスするためにプロキシを必要とする場合、コンピューティング インスタンスの ~/.bashrc
ファイルで HTTP_PROXY
および HTTPS_PROXY
環境変数を設定およびエクスポートする必要があります。 このプロセスは、カスタム スクリプトを使用してプロビジョニング時に自動化できます。
Azure Machine Learning で Azure Kubernetes Service (AKS) を使用する場合は、AKS VNet への次のトラフィックを許可します。
- 「Azure Kubernetes Service (AKS) でエグレス トラフィックを制限する」で説明されている AKS の受信または送信の一般的な要件。
- mcr.microsoft.com への送信。
- AKS クラスターにモデルをデプロイする場合は、「ML モデルを Kubernetes Service にデプロイする」記事のガイダンスを使用してください。
ファイアウォール ソリューションの使用に関する詳細については、Azure Machine Learning でのファイアウォールの使用に関するページを参照してください。
次の手順
この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。