仮想ネットワークを使用して Azure Machine Learning ワークスペースをセキュリティで保護する

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

ヒント

Microsoft では、この記事の手順ではなく、Azure Machine Learning のマネージド仮想ネットワークの使用をお勧めしています。 マネージド仮想ネットワークを使用すると、Azure Machine Learning はワークスペースとマネージド コンピューティングのネットワーク分離のジョブを処理します。 また、ワークスペースに必要なリソース (Azure Storage アカウントなど) のプライベート エンドポイントを追加することもできます。 詳しくは、ワークスペースのマネージド ネットワーク分離に関する記事をご覧ください。

この記事では、Azure Virtual Network 内の Azure Machine Learning ワークスペースとそれに関連付けられているリソースをセキュリティで保護する方法について説明します。

この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。

セキュリティで保護されたワークスペースの作成に関するチュートリアルについては、「チュートリアル: セキュリティで 保護されたワークスペースを作成する」または「チュートリアル: テンプレートを使用してセキュリティで保護されたワークスペースを作成する」を参照してください。

この記事では、仮想ネットワークで次のワークスペース リソースを有効にする方法について説明します。

  • Azure Machine Learning ワークスペース
  • Azure Storage アカウント
  • Azure Key Vault
  • Azure Container Registry

前提条件

  • 一般的な仮想ネットワークのシナリオと全体的な仮想ネットワーク アーキテクチャについては、ネットワーク セキュリティの概要に関するページを参照してください。

  • ベスト プラクティスについては、「Azure Machine Learning のエンタープライズ セキュリティに関するベスト プラクティス」の記事を参照してください。

  • コンピューティング リソースで使用する既存の仮想ネットワークとサブネット。

    警告

    VNet の IP アドレス範囲に 172.17.0.0/16 を使用しないでください。 これは Docker ブリッジ ネットワークで使用される既定のサブネット範囲であり、VNet に使用するとエラーが発生します。 仮想ネットワークに接続する内容によっては、他の範囲も競合する可能性があります。 たとえば、オンプレミス ネットワークを VNet に接続する予定で、オンプレミス ネットワークでも 172.16.0.0/16 の範囲が使用されている場合です。 最終的には、ネットワーク インフラストラクチャーを計画するのはユーザーの責任です。

  • リソースを仮想ネットワークまたはサブネットにデプロイするには、ご利用のユーザー アカウントが、Azure ロールベースのアクセス制御 (Azure RBAC) で次のアクションへのアクセス許可を保持している必要があります。

    • 仮想ネットワーク リソースの "Microsoft.Network/*/read"。 このアクセス許可は、Azure Resource Manager (ARM) テンプレートのデプロイには必要ありません。
    • 仮想ネットワーク リソース上の "Microsoft.Network/virtualNetworks/join/action"。
    • サブネット リソース上の "Microsoft.Network/virtualNetworks/subnets/join/action"。

    ネットワークでの Azure RBAC の詳細については、ネットワークの組み込みロールに関するページを参照してください

Azure Container Registry

  • Azure Container Registry が Premium バージョンである必要があります。 アップグレードの詳細については、「SKU の変更」を参照してください。

  • Azure Container Registry で プライベート エンドポイントを使用している場合は、トレーニングまたは推論に使用されるストレージ アカウントおよびコンピューティング ターゲットと同じ 仮想ネットワーク 内にあることをお勧めします。 ただし、ピアリングされた仮想ネットワーク内に配置することもできます。

    サービス エンドポイントが使用される場合、ストレージ アカウントおよびコンピューティング ターゲットと同じ "仮想ネットワーク" および "サブネット" 内に存在する必要があります。

  • Azure Machine Learning ワークスペースに、Azure Machine Learning コンピューティング クラスターが含まれている必要があります。

制限事項

Azure ストレージ アカウント

  • Azure Machine Learning スタジオ を使う予定で、ストレージ アカウントも 仮想ネットワーク 内にある場合は、追加の検証要件があります:

    • ストレージ アカウントが サービス エンドポイント を使っている場合、ワークスペースのプライベート エンドポイントとストレージのサービス エンドポイントが 仮想ネットワーク の同じサブネット内に存在する必要があります。
    • ストレージ アカウントが プライベート エンドポイント を使っている場合、ワークスペースのプライベート エンドポイントとストレージのプライベート エンドポイントが同じ 仮想ネットワーク 内に存在する必要があります。 この場合、サブネットは違っていても構いません。

Azure Container Instances

Azure Machine Learning ワークスペースがプライベート エンドポイントを使用して構成されている場合、仮想ネットワーク 内の Azure Container Instances へのデプロイはサポートされていません。 代わりに、ネットワークの分離とマネージド オンライン エンドポイントを使用することを検討してください。

Azure Container Registry

Azure Machine Learning ワークスペースまたは何らかのリソースがプライベート エンドポイントを使って構成されている場合、AzureML 環境イメージのビルド用にユーザーが管理するコンピューティング クラスターの設定が必要になる場合があります。 既定のシナリオでは、サーバーレス コンピューティングが利用されており、現在は、AzureML ワークスペースに関連付けられているリソースに対するネットワーク制限のないシナリオが想定されています。

重要

Docker イメージの作成に使用されるコンピューティング クラスターは、モデルのトレーニングとデプロイに使用されるパッケージ リポジトリにアクセスできる必要があります。 パブリック リポジトリへのアクセスを許可するネットワーク セキュリティ規則の追加、プライベート Python パッケージの使用、またはパッケージが既に含まれているカスタム Docker イメージ (SDK v1) の使用が必要になる場合があります。

警告

仮想ネットワークと通信するために、お使いの Azure Container Registry によって使用されているのがプライベート エンドポイントまたはサービス エンドポイントの場合、Azure Machine Learning コンピューティング クラスターでマネージド ID を使用することはできません。

Azure Monitor

警告

Azure Monitor では、Azure Private Link を使用した VNet への接続がサポートされます。 ただし、Azure Monitor では、オープン Private Link モードを使用する必要があります。 詳細については、「Private Link のアクセス モード: Private Only と Open」を参照してください。

必要なパブリック インターネット アクセス

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 アドレスが必要な場合、次のいずれかのオプションを使用します。

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 Private Link では、プライベート エンドポイントを使用してワークスペースに接続できます。 プライベート エンドポイントは、仮想ネットワーク内にある一組のプライベート IP アドレスです。 これにより、ワークスペースへのアクセスが、プライベート IP アドレスでのみ行われるように制限できます。 プライベート エンドポイントを使用すると、データ流出のリスクを軽減できます。

ワークスペースのプライベート エンドポイントの構成の詳細については、プライベート エンドポイントの構成方法に関する記事を参照してください。

警告

プライベート エンドポイントを使用してワークスペースをセキュリティで保護しても、エンドツーエンドのセキュリティは保証されません。 ソリューションの個々のコンポーネントをセキュリティで保護するには、この記事の残りの手順と VNet シリーズの手順に従う必要があります。 たとえば、ワークスペースでプライベート エンドポイントを使用していても、Azure Storage アカウントが VNet の内側にない場合、ワークスペースとストレージの間のトラフィックでは、セキュリティのために VNet は使用されません。

Azure Storage アカウントをセキュリティで保護する

Azure Machine Learning では、プライベート エンドポイントまたはサービス エンドポイントを使用するようにストレージ アカウントを構成できます。

  1. Azure portal で、Azure Storage アカウントストレージ アカウントを選択します。

  2. Azure Storage のプライベート エンドポイントを使用する」の情報を利用し、次のストレージ リソースのプライベート エンドポイントを追加します。

    プライベート エンドポイント構成ページのスクリーンショット。BLOB オプションとファイル オプションを確認できます。

    ヒント

    既定のストレージではないストレージ アカウントを構成するとき、追加するストレージ アカウントに相当するターゲット サブリソース タイプを選択します。

  3. ストレージ リソースのプライベート エンドポイントを作成した後、ストレージ アカウントの [ネットワーク] の下で [ファイアウォールと仮想ネットワーク] タブを選択します。

  4. [選択されたネットワーク] を選択し、[リソース インスタンス] の下で [リソースの種類] として Microsoft.MachineLearningServices/Workspace を選択します。 インスタンス名を使用してワークスペースを選択します。 詳細については、「システム割り当てマネージド ID に基づく信頼されたアクセス」を参照してください。

    ヒント

    あるいは、 [信頼されたサービスの一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します] を選択し、信頼されたサービスからのアクセスをもっと広範囲で許可できます。 詳細については、Azure Storage ファイアウォールおよび仮想ネットワークの構成に関する記事を参照してください。

    プライベート エンドポイントの使用時の Azure portal 内の Azure Storage ページの [ネットワーク] 領域

  5. [保存] を選んで構成を保存します。

ヒント

プライベート エンドポイントを使用する場合は、匿名アクセスを無効にすることもできます。 詳細については、匿名アクセスの禁止に関するページをご覧ください。

Azure Key Vault をセキュリティで保護する

Azure Machine Learning では、関連付けられた Key Vault インスタンスを使用して、次の資格情報が格納されます。

  • 関連付けられたストレージ アカウントの接続文字列
  • Azure コンテナー リポジトリ インスタンスへのパスワード
  • データ ストアへの接続文字列

Azure キー コンテナーは、プライベート エンドポイントまたはサービス エンドポイントのいずれかを使用するように構成できます。 仮想ネットワークの内側で、Azure Machine Learning 実験機能を Azure Key Vault で使用するには、次の手順を使用します。

ヒント

キー コンテナーはワークスペースと同じ VNet 内に配置することをお勧めします が、ピアリングされた VNet 内に配置することもできます。

Azure Key Vault でプライベート エンドポイントを使用する方法については、Azure Private Link への Key Vault の統合に関するページをご覧ください。

Azure Container Registry (ACR) の有効化

ヒント

ワークスペースの作成時に既存の Azure Container Registry を使用しなかった場合、それが存在しない可能性があります。 既定では、必要になるまで、ワークスペースによって ACR インスタンスが作成されることはありません。 強制的に作成するには、このセクションの手順を使用する前に、ワークスペースを使用してモデルをトレーニングまたはデプロイします。

プライベート エンドポイントを使用するように Azure Container Registry を構成できます。 次の手順を使用して、仮想ネットワーク内にあるときに ACR を使用するようにワークスペースを構成します。

  1. 次の方法のいずれかを使用して、お使いのワークスペースの Azure Container Registry の名前を見つけます。

    適用対象: Azure CLI ML 拡張機能 v2 (現行)

    Azure CLI 用の Machine Learning 拡張機能 v2 をインストールしている場合は、az ml workspace show コマンドを使用して、ワークスペースの情報を表示できます。 v1 の拡張機能では、この情報は返されません。

    az ml workspace show -n yourworkspacename -g resourcegroupname --query 'container_registry'
    

    このコマンドでは "/subscriptions/{GUID}/resourceGroups/{resourcegroupname}/providers/Microsoft.ContainerRegistry/registries/{ACRname}" のような値が返されます。 文字列の最後の部分がワークスペースの Azure Container Registry の名前です。

  2. 仮想ネットワークへのアクセスを制限するには、Azure Container Registry へのプライベート接続に関するページの手順に従います。 仮想ネットワークを追加するときに、Azure Machine Learning リソースの仮想ネットワークとサブネットを選択します。

  3. ワークスペースの ACR を構成し、信頼されたサービスによるアクセスを許可します。

  4. Azure Machine Learning コンピューティング クラスターを作成する。 このクラスターは、ACR が 仮想ネットワーク の背後にある場合に Docker イメージをビルドするために使用されます。 詳細については、コンピューティング クラスターの作成に関するページを参照してください。

  5. 次のいずれかの方法を使用して、コンピューティング クラスターを使用して Docker イメージをビルドするようにワークスペースを構成します。

    重要

    イメージ ビルドにコンピューティング クラスターを使用する場合は、次の制限事項が適用されます。

    • CPU SKU のみがサポートされています。
    • パブリック IP アドレスなしで構成されたコンピューティング クラスターを使用する場合は、クラスターがパブリック インターネットにアクセスするための何らかの方法を指定する必要があります。 Microsoft Container Registry に保存されているイメージ、Pypi にインストールされているパッケージ、Conda などにアクセスする場合は、インターネット アクセスが必要です。インターネットにアクセスするためにパブリック IP に到達するには、ユーザー定義ルーティング (UDR) を構成する必要があります。 たとえば、ファイアウォールのパブリック IP を使用したり、パブリック IP で Virtual Network NAT を使用したりすることができます。 詳細については、「VNet で安全にトレーニングする方法」を参照してください。

    ビルド コンピューティングは、az ml workspace update コマンドを使用して設定できます。 このコマンドは、Machine Learning の v1 と v2 の両方の Azure CLI 拡張機能に共通です。 次のコマンドで、myworkspace をワークスペース名に、myresourcegroup をワークスペースを含むリソース グループに、mycomputecluster をコンピューティング クラスター名に置き換えます。

    az ml workspace update --name myworkspace --resource-group myresourcegroup --image-build-compute mycomputecluster
    

ヒント

コンピューティング クラスターを使用するようにイメージ ビルド コンピューティングを構成したものの、この判断を撤回したい場合は、image-build-compute の参照を空のままにして同じコマンドを実行してください。

  az ml workspace update --name myworkspace --resource-group myresourcegroup --image-build-compute ''

ヒント

ACR が VNet の背後にある場合は、その ACR へのパブリック アクセスを無効にすることもできます。

Azure Monitor と Application Insights をセキュリティで保護する

Azure Monitor とワークスペースの Application Insights インスタンスのネットワーク分離を有効にするには、次の手順を使用します。

  1. Azure portal に Application Insights のリソースを開きます。 [概要] タブには、Workspace プロパティがある場合とない場合があります。 プロパティが ない 場合は、手順 2 を実行します。 ある 場合は、手順 3 に直接進むことができます。

    ヒント

    新しいワークスペースでは、既定でワークスペース ベースの Application Insights リソースが作成されます。 ワークスペースが最近作成された場合は、手順 2 を実行する必要はありません。

  2. ワークスペースの Application Insights インスタンスをアップグレードします。 アップグレードの手順については、「ワークスペース ベースの Application Insights リソースに移行する」を参照してください。

  3. Azure Monitor プライベート リンク スコープを作成し、手順 1 の Application Insights インスタンスをスコープに追加します。 詳細については、「Azure Monitor プライベート リンクを構成する」 を参照してください。

ワークスペースに安全に接続する

VNet の背後で保護されているワークスペースに接続するには、次の方法のいずれかを使用します。

  • Azure VPN ゲートウェイ - オンプレミスのネットワークをプライベート接続を介して VNet に接続します。 接続は、パブリック インターネットを介して行われます。 使用できる VPN ゲートウェイには、次の 2 種類があります。

    • ポイント対サイト: 各クライアント コンピューターは、VPN クライアントを使用して VNet に接続します。
    • サイト間: VPN デバイスにより、VNet がオンプレミス ネットワークに接続されます。
  • ExpressRoute - オンプレミスのネットワークをプライベート接続を介してクラウドに接続します。 接続は、接続プロバイダーを使用して行われます。

  • Azure Bastion - このシナリオでは、VNet 内に Azure 仮想マシン (ジャンプ ボックスと呼ばれることもある) を作成します。 次に、Azure Bastion を使用して VM に接続します。 Bastion を使用すると、ローカル Web ブラウザーから RDP または SSH セッションを使用して VM に接続できます。 続いて、開発環境としてジャンプ ボックスを使用します。 これは VNet 内にあるため、ワークスペースに直接アクセスできます。 ジャンプ ボックスの使用例については、チュートリアル: セキュリティで保護されたワークスペースの作成に関するページを参照してください。

重要

VPN ゲートウェイまたは ExpressRoute を使用する場合は、オンプレミスのリソースと VNet 内のリソース間での名前解決の仕組みを計画する必要があります。 詳細については、カスタム DNS サーバーの使用に関する記事を参照してください。

ワークスペースへの接続に問題がある場合は、「セキュリティで保護されたワークスペース接続のトラブルシューティング」を参照してください。

ワークスペース診断

Azure Machine Learning スタジオまたは Python SDK から、ワークスペースの診断を実行することができます。 診断の実行後、検出された問題の一覧が返されます。 この一覧には、考えられる解決策へのリンクが含まれています。 詳細については、「ワークスペース診断の使用方法」を参照してください。

ワークスペースへのパブリック アクセス

重要

これは Azure Machine Learning でサポートされている構成ですが、Microsoft では推奨していません。 運用環境で使用する前に、セキュリティ チームでこの構成を確認する必要があります。

場合によっては、パブリック ネットワークからワークスペースへのアクセスを許可する必要がある場合があります (「ワークスペースに安全に接続する」 セクションで詳しく説明されている方法を使用して VNet 経由で接続する必要はありません)。 パブリック インターネット経由のアクセスは、TLS を使用してセキュリティで保護されます。

ワークスペースへのパブリック ネットワーク アクセスを有効にするには、次の手順を使用します。

  1. ワークスペースのプライベート エンドポイントを構成した後、ワークスペースへのパブリック アクセスを有効にします
  2. パブリックインターネット経由で接続するクライアントの IP アドレスとの通信を許可するようにAzure Storage ファイアウォールを構成します。 クライアントに静的 IP がない場合は、許可されている IP アドレスの変更が必要になる場合があります。 たとえば、データ サイエンティストの 1 人が自宅で作業していて、仮想ネットワーク への VPN 接続を確立できない場合です。

次のステップ

この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。