SDK および CLI v1 を使用して Azure Machine Learning ワークスペース用にプライベート エンドポイントを構成する
適用対象:Azure CLI ml 拡張機能 v1Python SDK azureml v1
このドキュメントでは、Azure Machine Learning ワークスペース用にプライベート エンドポイントを構成する方法について説明します。 Azure Machine Learning 用の仮想ネットワークの作成については、仮想ネットワークの分離とプライバシーの概要に関する記事をご覧ください。
Azure Private Link では、プライベート エンドポイントを使用してワークスペースに接続できます。 プライベート エンドポイントは、仮想ネットワーク内にある一組のプライベート IP アドレスです。 これにより、ワークスペースへのアクセスが、プライベート IP アドレスでのみ行われるように制限できます。 プライベート エンドポイントを使用すると、データ流出のリスクを軽減できます。 プライベート エンドポイントの詳細については、Azure Private Link に関する記事を参照してください。
警告
プライベート エンドポイントを使用してワークスペースをセキュリティで保護しても、エンドツーエンドのセキュリティは保証されません。 ソリューションの個々のコンポーネントのすべてをセキュリティで保護する必要があります。 たとえば、ワークスペースでプライベート エンドポイントを使用していても、Azure ストレージ アカウントが VNet の内側にない場合、ワークスペースとストレージの間のトラフィックでは、セキュリティのために VNet は使用されません。
Azure Machine Learning で使用されるリソースのセキュリティ保護の詳細については、次の記事を参照してください。
前提条件
- プライベート エンドポイントを作成するには、既存の仮想ネットワークが必要です。
- プライベート エンドポイントを追加する前に、プライベート エンドポイントのネットワーク ポリシーを無効にします。
制限事項
プライベート エンドポイントで保護されたワークスペースのパブリック アクセスを有効にしていて、パブリック インターネット経由で Azure Machine Learning スタジオを使用する場合、デザイナーなどの一部の機能から自分のデータにアクセスできないことがあります。 この問題は、データが VNet の背後でセキュリティ保護されているサービスに格納されている場合に発生します。 たとえば、Azure Storage アカウントです。
Mozilla Firefox を使用している場合、ワークスペースのプライベート エンドポイントにアクセスしようとしたときに問題が発生することがあります。 この問題は、Mozilla Firefox の DNS over HTTPS に関連している可能性があります。 回避策として、Microsoft Edge または Google Chrome を使用することをお勧めします。
プライベート エンドポイントを使用しても、ワークスペースの削除やコンピューティング リソースの管理などの Azure コントロール プレーン (管理操作) には影響しません。 たとえば、コンピューティング先の作成、更新、削除などです。 これらの操作は、通常どおりパブリック インターネット経由で実行されます。 Azure Machine Learning Studio を使用するなどのデータ プレーン操作、API (公開されたパイプラインを含む)、または SDK では、プライベート エンドポイントが使用されます。
プライベート エンドポイントを使用してワークスペースにコンピューティング インスタンスまたはコンピューティング クラスターを作成するときは、コンピューティング インスタンスとコンピューティング クラスターがワークスペースと同じ Azure リージョンに存在する必要があります。
プライベート エンドポイントを使用して Azure Kubernetes Service クラスターを作成するとき、またはそれをワークスペースにアタッチするときは、クラスターがワークスペースと同じリージョンに存在する必要があります。
複数のプライベート エンドポイントで 1 つのワークスペースを使用するときは、プライベート エンドポイントの 1 つが、次の依存関係サービスと同じ VNet 内に存在する必要があります。
- ワークスペース用の既定のストレージを提供する Azure ストレージ アカウント
- ワークスペース用の Azure Key Vault
- ワークスペース用の Azure Container Registry。
たとえば、1 つの VNet ("サービス" VNet) には、依存関係サービスとワークスペース用のプライベート エンドポイントが含まれます。 この構成により、ワークスペースはサービスと通信できます。 別の VNet ("クライアント") には、ワークスペース用のプライベート エンドポイントのみが含まれ、クライアント開発用コンピューターとワークスペースの間の通信にのみ使用できます。
プライベート エンドポイントを使用するワークスペースを作成する
プライベート エンドポイントを使用してワークスペースを作成するには、次のいずれかの方法を使用します。 いずれの方法でも既存の仮想ネットワークが必要です。
ヒント
ワークスペース、プライベート エンドポイント、仮想ネットワークを同時に作成する場合は、「Azure Resource Manager テンプレートを使用して Azure Machine Learning のワークスペースを作成する」を参照してください。
Azure Machine Learning Python SDK には、PrivateEndpointConfig クラスが用意されています。これを Workspace.create() で使用すると、プライベート エンドポイントを使用してワークスペースを作成できます。 このクラスには、既存の仮想ネットワークが必要です。
適用対象: Python SDK azureml v1
from azureml.core import Workspace
from azureml.core import PrivateEndPointConfig
pe = PrivateEndPointConfig(name='myprivateendpoint', vnet_name='myvnet', vnet_subnet_name='default')
ws = Workspace.create(name='myworkspace',
subscription_id='<my-subscription-id>',
resource_group='myresourcegroup',
location='eastus2',
private_endpoint_config=pe,
private_endpoint_auto_approval=True,
show_output=True)
ワークスペースにプライベート エンドポイントを追加する
次のいずれかの方法を使用して、既存のワークスペースにプライベート エンドポイントを追加します。
警告
このワークスペースに関連付けられている既存のコンピューティング先があり、それらがプライベート エンドポイントが作成されたのと同じ仮想ネットワークの背後にない場合、それらは機能しません。
適用対象: Python SDK azureml v1
from azureml.core import Workspace
from azureml.core import PrivateEndPointConfig
pe = PrivateEndPointConfig(name='myprivateendpoint', vnet_name='myvnet', vnet_subnet_name='default')
ws = Workspace.from_config()
ws.add_private_endpoint(private_endpoint_config=pe, private_endpoint_auto_approval=True, show_output=True)
この例で使用されているクラスとメソッドの詳細については、PrivateEndpointConfig と Workspace.add_private_endpoint を参照してください。
プライベート エンドポイントを削除する
ワークスペースの 1 つまたはすべてのプライベート エンドポイントを削除できます。 プライベート エンドポイントを削除すると、エンドポイントが関連付けられていた VNet からワークスペースが削除されます。 プライベート エンドポイントを削除すると、ワークスペースがその VNet 内のリソースにアクセスできなくなったり、その VNet 内のリソースがワークスペースにアクセスできなくなったりする可能性があります。 たとえば、VNet とパブリック インターネットとの間でアクセスできなくなるような場合です。
警告
ワークスペースのプライベート エンドポイントを削除しても、パブリックにアクセスできるようにはなりません。 ワークスペースをパブリックにアクセスできるようにするには、「パブリック アクセスを有効にする」セクションの手順を使用します。
プライベート エンドポイントを削除するには、次の情報のようにします。
プライベート エンドポイントを削除するには、Workspace.delete_private_endpoint_connection を使用します。 次の例では、プライベート エンドポイントを削除する方法を示します。
適用対象: Python SDK azureml v1
from azureml.core import Workspace
ws = Workspace.from_config()
# get the connection name
_, _, connection_name = ws.get_details()['privateEndpointConnections'][0]['id'].rpartition('/')
ws.delete_private_endpoint_connection(private_endpoint_connection_name=connection_name)
パブリック アクセスを有効にする
状況によっては、VNet ではなくパブリック エンドポイント経由で、セキュリティで保護された自分のワークスペースにだれかが接続できるようにすることが必要になる場合があります。 または、VNet からワークスペースを削除し、パブリック アクセスを再び有効にしたいことがあります。
重要
パブリック アクセスを有効にしても、存在するプライベート エンドポイントは削除されません。 プライベート エンドポイントが接続している VNet の内側にあるコンポーネント間のすべての通信は、引き続きセキュリティで保護されます。 これにより、プライベート エンドポイント経由のプライベート アクセスに加えて、そのワークスペースのみへのパブリック アクセスが可能になります。
警告
ワークスペースがプライベート エンドポイントを使用して他のリソースと通信している間に、パブリック エンドポイントを介して接続する場合:
- Studio の一部の機能では、データへのアクセスに失敗します。 この問題は、データが VNet の背後でセキュリティ保護されているサービスに格納されている場合に発生します。 たとえば、Azure Storage アカウントです。
- コンピューティング インスタンスでの Jupyter、JupyterLab、RStudio、または Posit Workbench (旧称 RStudio Workbench) の使用 (ノートブックの実行を含む) はサポートされていません。
パブリック アクセスを有効にするには、次の手順のようにします。
ヒント
構成できるプロパティは 2 つあります。
allow_public_access_when_behind_vnet
- Python SDK と CLI v2 で使用されますpublic_network_access
- CLI と Python SDK v2 で使用されます。各プロパティにより、もう一方がオーバーライドされます。 たとえば、public_network_access
を設定すると、以前のallow_public_access_when_behind_vnet
の設定がオーバーライドされます。
Microsoft では、ワークスペースへのパブリック アクセスを有効または無効にするために public_network_access
を使用することをお勧めします。
パブリック アクセスを有効にするには、Workspace.update を使用し、allow_public_access_when_behind_vnet=True
を設定します。
適用対象: Python SDK azureml v1
from azureml.core import Workspace
ws = Workspace.from_config()
ws.update(allow_public_access_when_behind_vnet=True)
ワークスペースに安全に接続する
VNet の背後で保護されているワークスペースに接続するには、次の方法のいずれかを使用します。
Azure VPN ゲートウェイ - オンプレミスのネットワークをプライベート接続を介して VNet に接続します。 接続は、パブリック インターネットを介して行われます。 使用できる VPN ゲートウェイには、次の 2 種類があります。
ExpressRoute - オンプレミスのネットワークをプライベート接続を介してクラウドに接続します。 接続は、接続プロバイダーを使用して行われます。
Azure Bastion - このシナリオでは、VNet 内に Azure 仮想マシン (ジャンプ ボックスと呼ばれることもある) を作成します。 次に、Azure Bastion を使用して VM に接続します。 Bastion を使用すると、ローカル Web ブラウザーから RDP または SSH セッションを使用して VM に接続できます。 続いて、開発環境としてジャンプ ボックスを使用します。 これは VNet 内にあるため、ワークスペースに直接アクセスできます。 ジャンプ ボックスの使用例については、チュートリアル: セキュリティで保護されたワークスペースの作成に関するページを参照してください。
重要
VPN ゲートウェイまたは ExpressRoute を使用する場合は、オンプレミスのリソースと VNet 内のリソース間での名前解決の仕組みを計画する必要があります。 詳細については、カスタム DNS サーバーの使用に関する記事を参照してください。
ワークスペースへの接続に問題がある場合は、「セキュリティで保護されたワークスペース接続のトラブルシューティング」を参照してください。
複数のプライベート エンドポイント
Azure Machine Learning では 1 つのワークスペースに複数のプライベート エンドポイントを使用することがサポートされています。 複数のプライベート エンドポイントは、異なる環境を分離しておくときによく使用されます。 複数のプライベート エンドポイントを使用することで有効になるシナリオを次に示します。
別の VNet 内のクライアント開発環境。
別の VNet 内の Azure Kubernetes Service (AKS) クラスター。
別の VNet 内の他の Azure サービス。 たとえば、Azure Synapse と Azure Data Factory で、1 つの Microsoft マネージド仮想ネットワークを使用できます。 どの場合も、ワークスペース用のプライベート エンドポイントを、それらのサービスによって使用されるマネージド VNet に追加できます。 これらのサービスでマネージド仮想ネットワークを使用する方法の詳細については、次の記事を参照してください。
重要
Synapse のデータ流出防止は、Azure Machine Learning ではサポートされていません。
重要
ワークスペース用のプライベート エンドポイントが含まれる各 VNet は、ワークスペースで使用される Azure ストレージ アカウント、Azure Key Vault、Azure Container Registry にアクセスできる必要があります。 たとえば、各 VNet にサービス用のプライベート エンドポイントを作成します。
複数のプライベート エンドポイントを追加するには、「ワークスペースにプライベート エンドポイントを追加する」セクションで説明されているのと同じ手順を使用します。
シナリオ: 分離されたクライアント
Azure Machine Learning によって使用されているコンピューティング リソースに直接アクセスできないように、開発クライアントを分離する場合は、次の手順を使用します。
Note
これらの手順では、ワークスペース、Azure ストレージ アカウント、Azure Key Vault、Azure Container Registry が既にあるものとします。 既存の VNet に、これらの各サービスのプライベート エンドポイントがあります。
- クライアント用に別の VNet を作成します。 この VNet には、クライアントとして機能する Azure Virtual Machines や、VNet に接続するためにオンプレミスのクライアントによって使用される VPN Gateway が含まれている場合があります。
- ワークスペースによって使用される Azure ストレージ アカウント、Azure Key Vault、Azure Container Registry 用に、新しいプライベート エンドポイントを追加します。 これらのプライベート エンドポイントは、クライアント VNet に存在する必要があります。
- ワークスペースによって使用される別のストレージがある場合は、そのストレージ用に新しいプライベート エンドポイントを追加します。 プライベート エンドポイントは、クライアント VNet に存在し、プライベート DNS ゾーンの統合が有効にされている必要があります。
- ワークスペースに新しいプライベート エンドポイントを追加します。 このプライベート エンドポイントは、クライアント VNet に存在し、プライベート DNS ゾーンの統合が有効にされている必要があります。
- 記事「仮想ネットワークでスタジオを使用する」の手順を使用して、スタジオがストレージ アカウントにアクセスできるようにします。
次の図はこの構成を示したものです。 ワークロード VNet には、トレーニングとデプロイのためにワークスペースによって作成されたコンピューティングが含まれます。 クライアント VNet には、クライアントまたはクライアントの ExpressRoute と VPN の接続が含まれます。 どちらの VNet にも、ワークスペース、Azure ストレージ アカウント、Azure Key Vault、Azure Container Registry 用のプライベート エンドポイントが含まれます。
シナリオ: 分離された Azure Kubernetes Service
ワークスペースによって使用される分離された Azure Kubernetes Service を作成する場合は、次の手順を使用します。
Note
これらの手順では、ワークスペース、Azure ストレージ アカウント、Azure Key Vault、Azure Container Registry が既にあるものとします。 既存の VNet に、これらの各サービスのプライベート エンドポイントがあります。
- Azure Kubernetes Service インスタンスを作成します。 作成の間に、AKS によって AKS クラスターが含まれる VNet が作成されます。
- ワークスペースによって使用される Azure ストレージ アカウント、Azure Key Vault、Azure Container Registry 用に、新しいプライベート エンドポイントを追加します。 これらのプライベート エンドポイントは、クライアント VNet に存在する必要があります。
- ワークスペースによって使用される他のストレージがある場合は、そのストレージ用に新しいプライベート エンドポイントを追加します。 プライベート エンドポイントは、クライアント VNet に存在し、プライベート DNS ゾーンの統合が有効にされている必要があります。
- ワークスペースに新しいプライベート エンドポイントを追加します。 このプライベート エンドポイントは、クライアント VNet に存在し、プライベート DNS ゾーンの統合が有効にされている必要があります。
- AKS クラスターを Azure Machine Learning ワークスペースにアタッチします。 詳細については、「Azure Kubernetes Service クラスターを作成してアタッチする」を参照してください。
次の手順
Azure Machine Learning ワークスペースのセキュリティ保護の詳細については、「仮想ネットワークの分離とプライバシーの概要」を参照してください。
仮想ネットワークでカスタム DNS ソリューションの使用を計画している場合は、「カスタム DNS サーバーでワークスペースを使用する方法」を参照してください。