仮想ネットワーク(v1)を使用して Azure Machine Learning ワークスペースをセキュリティで保護する
適用対象:Azure CLI ml 拡張機能 v1Python SDK azureml v1
この記事では、Azure Virtual Network 内の Azure Machine Learning ワークスペースとそれに関連付けられているリソースをセキュリティで保護する方法について説明します。
ヒント
この記事の手順ではなく、Azure Machine Learning のマネージド仮想ネットワークを使用できます。 マネージド仮想ネットワークを使用すると、Azure Machine Learning はワークスペースとマネージド コンピューティングのネットワーク分離のジョブを処理します。 また、ワークスペースに必要なリソース (Azure Storage アカウントなど) のプライベート エンドポイントを追加することもできます。 詳細については、「ワークスペース マネージド ネットワーク分離」を参照してください。
この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。
- Virtual Network の概要
- トレーニング環境をセキュリティで保護する
- 推論環境をセキュリティで保護する
- スタジオの機能を有効にする
- カスタム DNS を使用する
- ファイアウォールを使用する
- API プラットフォームのネットワーク分離
安全なワークスペースの作成に関するチュートリアルについては、「チュートリアル: セキュリティで保護されたワークスペースを作成する」、「Bicep テンプレート」、または「Teraform テンプレート」を参照してください。
この記事では、仮想ネットワークで次のワークスペース リソースを有効にする方法について説明します。
- Azure Machine Learning ワークスペース
- Azure Storage アカウント
- Azure Machine Learning データストアとデータセット
- 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 Container Registry が存在している必要があります。 サービス エンドポイントが使用される場合、ストレージ アカウントおよびコンピューティング ターゲットと同じ "仮想ネットワーク" および "サブネット" 内に存在する必要があります。
Azure Machine Learning ワークスペースに、Azure Machine Learning コンピューティング クラスターが含まれている必要があります。
制限事項
Azure Storage アカウント
Azure Machine Learning スタジオを使う予定で、ストレージ アカウントも VNet 内にある場合は、追加の検証要件があります。
- ストレージ アカウントにサービス エンドポイントを使っている場合、ワークスペースのプライベート エンドポイントとストレージのサービス エンドポイントが VNet の同じサブネット内に存在する必要があります。
- ストレージ アカウントにプライベート エンドポイントを使っている場合、ワークスペースのプライベート エンドポイントとストレージのプライベート エンドポイントが同じ VNet 内に存在する必要があります。 この場合、サブネットは違っていても構いません。
Azure Container Instances
Azure Machine Learning ワークスペースがプライベート エンドポイントで構成されている場合、VNet でのAzure Container Instances へのデプロイはサポートされていません。 代わりに、ネットワークの分離とマネージド オンライン エンドポイントを使用することを検討してください。
Azure Container Registry
ACR が仮想ネットワークの背後にある場合、Azure Machine Learning でそれを使用して Docker イメージを直接構築することはできません。 代わりに、コンピューティング クラスターを使用してイメージが構築されます。
重要
Docker イメージの作成に使用されるコンピューティング クラスターは、モデルのトレーニングとデプロイに使用されるパッケージ リポジトリにアクセスできる必要があります。 パブリック リポジトリへのアクセスを許可するネットワーク セキュリティ規則の追加、プライベート Python パッケージの使用、またはパッケージが既に含まれている カスタム Docker イメージ の使用が必要になる場合があります。
警告
仮想ネットワークと通信するために、お使いの 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 アドレスが必要な場合、次のいずれかのオプションを使用します。
- 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 Private Link では、プライベート エンドポイントを使用してワークスペースに接続できます。 プライベート エンドポイントは、仮想ネットワーク内にある一組のプライベート IP アドレスです。 これにより、ワークスペースへのアクセスが、プライベート IP アドレスでのみ行われるように制限できます。 プライベート エンドポイントを使用すると、データ流出のリスクを軽減できます。
ワークスペースのプライベート エンドポイントの構成の詳細については、プライベート エンドポイントの構成方法に関する記事を参照してください。
警告
プライベート エンドポイントを使用してワークスペースをセキュリティで保護しても、エンドツーエンドのセキュリティは保証されません。 ソリューションの個々のコンポーネントをセキュリティで保護するには、この記事の残りの手順と VNet シリーズの手順に従う必要があります。 たとえば、ワークスペースでプライベート エンドポイントを使用していても、Azure Storage アカウントが VNet の内側にない場合、ワークスペースとストレージの間のトラフィックでは、セキュリティのために VNet は使用されません。
Azure Storage アカウントをセキュリティで保護する
Azure Machine Learning では、プライベート エンドポイントまたはサービス エンドポイントを使用するようにストレージ アカウントを構成できます。
Azure portal で、Azure Storage アカウントストレージ アカウントを選択します。
「Azure Storage のプライベート エンドポイントを使用する」の情報を利用し、次のストレージ リソースのプライベート エンドポイントを追加します。
- BLOB
- [最近使ったファイル]
- キュー - Azure Machine Learning パイプラインで ParallelRunStep を使用する予定の場合にのみ必要です。
- テーブル - Azure Machine Learning パイプラインで ParallelRunStep を使用する予定の場合にのみ必要です。
ヒント
既定のストレージではないストレージ アカウントを構成するとき、追加するストレージ アカウントに相当するターゲット サブリソース タイプを選択します。
ストレージ リソースのプライベート エンドポイントを作成した後、ストレージ アカウントの [ネットワーク] の下で [ファイアウォールと仮想ネットワーク] タブを選択します。
[選択されたネットワーク] を選択し、[リソース インスタンス] の下で [リソースの種類] として
Microsoft.MachineLearningServices/Workspace
を選択します。 インスタンス名を使用してワークスペースを選択します。 詳細については、「システム割り当てマネージド ID に基づく信頼されたアクセス」を参照してください。ヒント
あるいは、 [信頼されたサービスの一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します] を選択し、信頼されたサービスからのアクセスをもっと広範囲で許可できます。 詳細については、Azure Storage ファイアウォールおよび仮想ネットワークの構成に関する記事を参照してください。
[保存] を選んで構成を保存します。
ヒント
プライベート エンドポイントを使用する場合は、匿名アクセスを無効にすることもできます。 詳細については、匿名アクセスの禁止に関するページをご覧ください。
Azure Key Vault をセキュリティで保護する
Azure Machine Learning では、関連付けられた Key Vault インスタンスを使用して、次の資格情報が格納されます。
- 関連付けられたストレージ アカウントの接続文字列
- Azure コンテナー リポジトリ インスタンスへのパスワード
- データ ストアへの接続文字列
Azure キー コンテナーは、プライベート エンドポイントまたはサービス エンドポイントのいずれかを使用するように構成できます。 仮想ネットワークの内側で、Azure Machine Learning 実験機能を Azure Key Vault で使用するには、次の手順を使用します。
ヒント
プライベート エンドポイントとサービスエンド ポイント、どちらを使用する場合でも、キー コンテナーは、ワークスペースのプライベート エンドポイントと同じネットワーク内にある必要があります。
Azure Key Vault でプライベート エンドポイントを使用する方法については、Azure Private Link への Key Vault の統合に関するページをご覧ください。
Azure Container Registry (ACR) の有効化
ヒント
ワークスペースの作成時に既存の Azure Container Registry を使用しなかった場合、それが存在しない可能性があります。 既定では、必要になるまで、ワークスペースによって ACR インスタンスが作成されることはありません。 強制的に作成するには、このセクションの手順を使用する前に、ワークスペースを使用してモデルをトレーニングまたはデプロイします。
プライベート エンドポイントを使用するように Azure Container Registry を構成できます。 次の手順を使用して、仮想ネットワーク内にあるときに ACR を使用するようにワークスペースを構成します。
次の方法のいずれかを使用して、お使いのワークスペースの Azure Container Registry の名前を見つけます。
適用対象: Azure CLI ml extension v1
Azure CLI 用の Machine Learning 拡張機能 v1 をインストールしている場合は、
az ml workspace show
コマンドを使用して、ワークスペースの情報を表示できます。az ml workspace show -w yourworkspacename -g resourcegroupname --query 'containerRegistry'
このコマンドでは
"/subscriptions/{GUID}/resourceGroups/{resourcegroupname}/providers/Microsoft.ContainerRegistry/registries/{ACRname}"
のような値が返されます。 文字列の最後の部分がワークスペースの Azure Container Registry の名前です。仮想ネットワークへのアクセスを制限するには、Azure Container Registry へのプライベート接続に関するページの手順に従います。 仮想ネットワークを追加するときに、Azure Machine Learning リソースの仮想ネットワークとサブネットを選択します。
ワークスペースの ACR を構成し、信頼されたサービスによるアクセスを許可します。
Azure Machine Learning コンピューティング クラスターを作成する。 このクラスターは、ACR が VNet の背後にある場合に Docker イメージをビルドするために使用されます。 詳細については、コンピューティング クラスターの作成に関するページを参照してください。
次のいずれかの方法を使用して、コンピューティング クラスターを使用して 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
ヒント
ACR が VNet の背後にある場合は、その ACR へのパブリック アクセスを無効にすることもできます。
データストアとデータセット
次の表に、検証をスキップする必要があるサービスの一覧を示します。
サービス | 検証をスキップする必要があるか |
---|---|
Azure BLOB ストレージ | はい |
Azure ファイル共有 | はい |
Azure Data Lake Store Gen1 | いいえ |
Azure Data Lake Store Gen2 | いいえ |
Azure SQL Database | はい |
PostgreSQL | はい |
注意
Azure Data Lake Store Gen1 および Azure Data Lake Store Gen2 では、既定で検証がスキップされるため、何の操作も必要ありません。
次のコード サンプルでは、新しい Azure BLOB データストアが作成され、skip_validation=True
が設定されます。
blob_datastore = Datastore.register_azure_blob_container(workspace=ws,
datastore_name=blob_datastore_name,
container_name=container_name,
account_name=account_name,
account_key=account_key,
skip_validation=True ) // Set skip_validation to true
データセットを使用する
次のデータセットの種類では、データセットの検証をスキップする構文は似ています。
- 区切りファイル
- JSON
- Parquet
- SQL
- ファイル
次のコードでは、新しい JSON データセットが作成され、validate=False
が設定されます。
json_ds = Dataset.Tabular.from_json_lines_files(path=datastore_paths,
validate=False)
Azure Monitor と Application Insights をセキュリティで保護する
Azure Monitor とワークスペースの Application Insights インスタンスのネットワーク分離を有効にするには、次の手順を使用します。
Azure Portal に Application Insights のリソースを開きます。 [概要] タブには、Workspace プロパティがある場合とない場合があります。 プロパティが ない 場合は、手順 2 を実行します。 ある 場合は、手順 3 に直接進むことができます。
ヒント
新しいワークスペースでは、既定でワークスペース ベースの Application Insights リソースが作成されます。 ワークスペースが最近作成された場合は、手順 2 を実行する必要はありません。
ワークスペースの Application Insights インスタンスをアップグレードします。 アップグレードの手順については、「ワークスペース ベースの Application Insights リソースに移行する」を参照してください。
Azure Monitor プライベート リンク スコープを作成し、手順 1 の Application Insights インスタンスをスコープに追加します。 これを行う手順については、Azure Monitor プライベート リンクの構成に関するページを参照してください。
ワークスペースに安全に接続する
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 スタジオまたは Python SDK から、ワークスペースの診断を実行することができます。 診断の実行後、検出された問題の一覧が返されます。 この一覧には、考えられる解決策へのリンクが含まれています。 詳細については、「ワークスペース診断の使用方法」を参照してください。
次のステップ
この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。