Azure Machine Learning レジストリを使ったネットワーク分離
この記事では、Azure Virtual Network とプライベート エンドポイントを使って、Azure Machine Learning レジストリをセキュリティで保護する方法について説明します。
Azure 上のプライベート エンドポイントは、仮想ネットワーク (VNet) 内のプライベート IP アドレスを介して Azure サービスにアクセスできるようにすることで、ネットワーク分離を実現します。 VNet は、Azure リソース間の接続をセキュリティで保護し、機密データがパブリック インターネットに露出するのを防ぎます。
プライベート エンドポイントでネットワーク分離を使うと、ネットワーク トラフィックがパブリック インターネットを経由するのを防ぎ、Azure Machine Learning レジストリ サービスを仮想ネットワークに導入できます。 プライベート エンドポイントを使う場合、すべてのネットワーク トラフィックは Azure Private Link 経由で発生します。
前提条件
- Azure Machine Learning レジストリ。 作成するには、レジストリを作成して管理する方法に関する記事の手順を実行してください。
- 次の記事に関する知識:
Azure Machine Learning レジストリのセキュリティ保護
注意
わかりやすくするために、ワークスペース、それに関連付けられたリソース、その属する仮想ネットワークを、セキュリティで保護されたワークスペース構成と呼びます。 ここでは、既存の構成の一部として Azure Machine Learning レジストリを追加する方法について説明します。
次の図は、基本的なネットワーク構成と、Azure Machine Learning レジストリがそこにどのように収まるかを示しています。 既に Azure Machine Learning ワークスペースを使っていて、セキュリティで保護されたワークスペース構成があり、すべてのリソースが仮想ネットワークの一部である場合、既存の仮想ネットワークから Azure Machine Learning レジストリとその関連リソース (ストレージと ACR) にプライベート エンドポイントを作成できます。
セキュリティで保護されたワークスペース構成がない場合は、Azure portal でセキュリティで保護されたワークスペースを作成する方法に関する記事、Bicep テンプレート、または Terraform テンプレートを使用して作成できます。
制限事項
ネットワーク分離で Azure Machine Learning レジストリを使用している場合は、Azure Machine Learning スタジオで "モデル" 資産を表示できます。 他の種類の資産を表示することはできません。 スタジオを使用して、Azure Machine Learning レジストリまたはその下の資産に対して操作を実行することはできません。 代わりに、Azure Machine Learning CLI または SDK を使用してください。
シナリオ: ワークスペース構成をセキュリティで保護し、Azure Machine Learning レジストリはパブリックである
このセクションでは、ワークスペース構成はセキュリティで保護しながら、パブリック レジストリを使っている場合のシナリオと必要なネットワーク構成について説明します。
ローカル ファイルからレジストリに資産を作成する
レジストリの資産を作成するために使う ID (たとえば、データ サイエンティストの Microsoft Entra ユーザー ID) には、Azure ロールベースのアクセス制御で AzureML レジストリ ユーザー、所有者、または共同作成者ロールを割り当てる必要があります。 詳細については、「Azure Machine Learning へのアクセスの管理」の記事を参照してください。
ワークスペースからレジストリへ資産を共有する
Note
現在、Azure Machine Learning ワークスペースから Azure Machine Learning レジストリへのコンポーネントの共有はサポートされていません。
データ流出保護のため、資産を含むストレージ アカウントがパブリック アクセスを無効にしている場合、セキュリティで保護されたワークスペースからパブリック レジストリに資産を共有することはできません。 ワークスペースからレジストリへの資産共有を有効にするには、次の手順を実行します。
- ワークスペースにアタッチされているストレージ アカウントの [ネットワーク] セクションに移動します (レジストリへの資産の共有を許可する場所から)
- [パブリック ネットワーク アクセス] を [選択した仮想ネットワークと IP アドレスから有効] に設定します
- 下にスクロールして、[リソース インスタンス] セクションに移動します。 [リソースの種類] として Microsoft.MachineLearningServices/registries を選択し、[インスタンス名] を、ワークスペースとの共有を有効にする Azure Machine Learning レジストリ リソースの名前に設定します。
- ネットワーク構成に従って、残りの設定を確認してください。
ワークスペースでレジストリの資産を使う
操作例:
- レジストリの資産を使うジョブを送信する。
- パイプラインでレジストリのコンポーネントを使う。
- コンポーネントでレジストリの環境を使う。
セキュリティで保護されたワークスペースに対してレジストリの資産を使うには、レジストリへの送信アクセスを構成する必要があります。
レジストリのモデルをワークスペースにデプロイする
セキュリティで保護されたマネージド オンライン エンドポイントにレジストリのモデルをデプロイするには、デプロイに egress_public_network_access=disabled
を設定しておく必要があります。 Azure Machine Learning は、エンドポイントのデプロイ時に、レジストリに必要なプライベート エンドポイントを作成します。 詳細については、セキュリティで保護されたマネージド オンライン エンドポイントの作成に関する記事を参照してください。
任意の Azure Machine Learning レジストリにアクセスするための送信ネットワーク構成
サービス タグ | プロトコルとポート | 目的 |
---|---|---|
AzureMachineLearning |
TCP: 443、877、18881 UDP: 5831 |
Azure Machine Learning service の使用。 |
Storage.<region> |
TCP: 443 | コンピューティング クラスターとコンピューティング インスタンスの Azure Storage アカウントに格納されたデータにアクセスします。 この送信を使用してデータを抜き取ることができます。 詳細については、「データ流出防止」を参照してください。 |
MicrosoftContainerRegistry.<region> |
TCP: 443 | Microsoft が提供する Docker イメージにアクセスします。 |
AzureContainerRegistry.<region> |
TCP: 443 | 環境用の Docker イメージにアクセスします。 |
シナリオ: ワークスペース構成をセキュリティで保護し、プライベート エンドポイントを使って Azure Machine Learning レジストリを仮想ネットワークに接続する
このセクションでは、ワークスペース構成はセキュリティで保護し、プライベート エンドポイントを使って Azure Machine Learning レジストリを仮想ネットワークに接続しているシナリオと必要なネットワーク構成について説明します。
Azure Machine Learning レジストリには、ストレージ/ACR サービス インスタンスが関連付けられています。 これらのサービス インスタンスは、構成をセキュリティで保護するためにプライベート エンドポイントを使って VNet に接続することもできます。 詳細については、プライベート エンドポイントの作成方法に関するセクションを参照してください。
レジストリで使う Azure Storage アカウントと Azure Container Registry を見つける方法
Azure Machine Learning レジストリが使うストレージ アカウントと ACR は、Azure サブスクリプションの管理対象リソース グループの下に作成されます。 管理対象リソース グループの名前は、azureml-rg-<name-of-your-registry>_<GUID>
のパターンに従います。 GUID はランダムに生成された文字列です。 たとえば、レジストリの名前が "contosoreg" である場合、管理対象リソース グループの名前は azureml-rg-contosoreg_<GUID>
になります。
Azure portal で azureml_rg-<name-of-your-registry>
を検索することで、このリソース グループを見つけることができます。 レジストリのすべてのストレージと ACR リソースは、このリソース グループの下にあります。
ローカル ファイルからレジストリに資産を作成する
注意
関連付けられた ACR がパブリック アクセスを無効にしているプライベート レジストリに環境資産を作成することはサポートされていません。 回避策として、Azure Machine Learning ワークスペースに環境を作成し、Azure Machine Learning レジストリに共有できます。
プライベート エンドポイントを使ってレジストリを接続している VNet にクライアントを接続する必要があります。
セキュリティで保護された方法でレジストリに接続する
VNet の背後で保護されているワークスペースに接続するには、次の方法のいずれかを使います。
Azure VPN ゲートウェイ - オンプレミスのネットワークをプライベート接続を介して VNet に接続します。 接続は、パブリック インターネットを介して行われます。 使用できる VPN ゲートウェイには、次の 2 種類があります。
ExpressRoute - オンプレミスのネットワークをプライベート接続を介してクラウドに接続します。 接続は、接続プロバイダーを使用して行われます。
Azure Bastion - このシナリオでは、VNet 内に Azure 仮想マシン (ジャンプ ボックスと呼ばれることもある) を作成します。 次に、Azure Bastion を使用して VM に接続します。 Bastion を使用すると、ローカル Web ブラウザーから RDP または SSH セッションを使用して VM に接続できます。 続いて、開発環境としてジャンプ ボックスを使用します。 これは VNet 内にあるため、レジストリに直接アクセスできます。
ワークスペースからレジストリへ資産を共有する
Note
現在、Azure Machine Learning ワークスペースから Azure Machine Learning レジストリへのコンポーネントの共有はサポートされていません。
データ流出防止のため、資産が含まれているストレージ アカウントでパブリック アクセスが無効になっている場合は、セキュリティで保護されたワークスペースからプライベート レジストリに資産を共有することができません。 ワークスペースからレジストリへの資産共有を有効にするには、次の手順を実行します。
- ワークスペースにアタッチされているストレージ アカウントの [ネットワーク] セクションに移動します (レジストリへの資産の共有を許可する場所から)
- [パブリック ネットワーク アクセス] を [選択した仮想ネットワークと IP アドレスから有効] に設定します
- 下にスクロールして、[リソース インスタンス] セクションに移動します。 [リソースの種類] として Microsoft.MachineLearningServices/registries を選択し、[インスタンス名] を、ワークスペースとの共有を有効にする Azure Machine Learning レジストリ リソースの名前に設定します。
- ネットワーク構成に従って、残りの設定を確認してください。
ワークスペースでレジストリの資産を使う
操作例:
- レジストリの資産を使うジョブを送信する。
- パイプラインでレジストリのコンポーネントを使う。
- コンポーネントでレジストリの環境を使う。
ワークスペースの VNet からレジストリ、ストレージ、ACR へのプライベート エンドポイントを作成します。 複数のレジストリに接続しようとしている場合は、各レジストリと、関連付けられたストレージと ACR に対してプライベート エンドポイントを作成します。 詳細については、プライベート エンドポイントの作成方法に関するセクションを参照してください。
レジストリのモデルをワークスペースにデプロイする
セキュリティで保護されたマネージド オンライン エンドポイントにレジストリのモデルをデプロイするには、デプロイに egress_public_network_access=disabled
を設定しておく必要があります。 Azure Machine Learning は、エンドポイントのデプロイ時に、レジストリに必要なプライベート エンドポイントを作成します。 詳細については、セキュリティで保護されたマネージド オンライン エンドポイントの作成に関する記事を参照してください。
プライベート エンドポイントを作成する方法
タブを使って、既存のレジストリにプライベート エンドポイントを追加するか、プライベート エンドポイントを持つ新しいレジストリを作成する手順を表示します。
Azure portal で [プライベート エンドポイント] を探し、[プライベート エンドポイント] エントリを選んで [プライベート リンク センター] に移動します。
[プライベート リンク センター] の概要ページで、[+ 作成] を選びます。
要求された情報を入力します。 [領域] フィールドで、お使いの Azure Virtual Network と同じリージョンを選びます。 [次へ] を選択します。
[リソース] タブで [リソースの種類] を選ぶときに
Microsoft.MachineLearningServices/registries
を選びます。 [リソース] フィールドを Azure Machine Learning のレジストリ名に設定し、[次へ] を選びます。[仮想ネットワーク] タブから Azure Machine Learning リソースの仮想ネットワークとサブネットを選びます。 [次へ] をクリックして続行します。
特定のプライベート DNS 統合要件がない限り、[DNS] タブは既定値のままにします。 [次へ] をクリックして続行します。
[確認および作成] タブで [作成] を選んでプライベート エンドポイントを作成します。
パブリック ネットワーク アクセスを無効に設定する場合は、次のコマンドを使います。 ストレージと ACR のパブリック ネットワーク アクセスも無効になっていることを確認します。
az ml registry update --set publicNetworkAccess=Disabled --name <name-of-registry>
レジストリで使う Azure Storage アカウントと Azure Container Registry を見つける方法
Azure Machine Learning レジストリが使うストレージ アカウントと ACR は、Azure サブスクリプションの管理対象リソース グループの下に作成されます。 管理対象リソース グループの名前は、azureml-rg-<name-of-your-registry>_<GUID>
のパターンに従います。 GUID はランダムに生成された文字列です。 たとえば、レジストリの名前が "contosoreg" である場合、管理対象リソース グループの名前は azureml-rg-contosoreg_<GUID>
になります。
Azure portal で azureml_rg-<name-of-your-registry>
を検索することで、このリソース グループを見つけることができます。 レジストリのすべてのストレージと ACR リソースは、このリソース グループの下にあります。
Azure Storage アカウント用のプライベート エンドポイントを作成する方法
レジストリに使うストレージ アカウントのプライベート エンドポイントを作成するには、以下の手順を実行します。
- Azure portal で [プライベート エンドポイント] を探し、[プライベート エンドポイント] エントリを選んで [プライベート リンク センター] に移動します。
- [プライベート リンク センター] の概要ページで、[+ 作成] を選びます。
- 要求された情報を入力します。 [領域] フィールドで、お使いの Azure Virtual Network と同じリージョンを選びます。 [次へ] を選択します。
- [リソース] タブで [リソースの種類] を選ぶときに
Microsoft.Storage/storageAccounts
を選びます。 [リソース] フィールドをストレージ アカウント名に設定します。 [サブリソース] を [BLOB] に設定し、[次へ] を選びます。 - [仮想ネットワーク] タブから Azure Machine Learning リソースの仮想ネットワークとサブネットを選びます。 [次へ] をクリックして続行します。
- 特定のプライベート DNS 統合要件がない限り、[DNS] タブは既定値のままにします。 [次へ] をクリックして続行します。
- [確認および作成] タブで [作成] を選んでプライベート エンドポイントを作成します。
データ流出防止
ユーザーが作成した Azure Machine Learning レジストリの場合、レジストリ、マネージド ストレージ アカウント、マネージド ACR にプライベート エンドポイントを使うことをお勧めします。
システム レジストリの場合、/services/Azure/MachineLearning
の別名を使って、ストレージ アカウントのサービス エンドポイント ポリシーを作成することをお勧めします。 詳細については、データ流出防止の構成に関する記事を参照してください。
レジストリの完全修飾ドメイン名を見つける方法
Note
Azure DNS によって再帰的に解決されるパブリック リソース固有の FQDN がないため、DNS が <registry-guid>.registry.<region>.privatelink.api.azureml.ms
という形式のレジストリ プライベート FQDN を解決できることを確認してください。
次の例は、レジストリの完全修飾ドメイン名 (FQDN) を取得するために検出 URL を使う方法を示しています。 検出 URL を呼び出す場合、要求ヘッダーに Azure アクセス トークンを指定する必要があります。 次の例は、アクセス トークンを取得し、検出 URL を呼び出す方法を示しています。
ヒント
検出 URL の形式は https://<region>.api.azureml.ms/registrymanagement/v1.0/registries/<registry_name>/discovery
です。この <region>
はレジストリがあるリージョン、<registry_name>
はレジストリの名前です。 URL を呼び出すには、GET 要求を行います。
GET https://<region>.api.azureml.ms/registrymanagement/v1.0/registries/<registry_name>/discovery
$region = "<region>"
$registryName = "<registry_name>"
$accessToken = (az account get-access-token | ConvertFrom-Json).accessToken
(Invoke-RestMethod -Method Get `
-Uri "https://$region.api.azureml.ms/registrymanagement/v1.0/registries/$registryName/discovery" `
-Headers @{ Authorization="Bearer $accessToken" }).registryFqdns
- REST API
注意
Azure REST API の使用の詳細については、Azure REST API リファレンスを参照してください。
Azure アクセス トークンを取得します。 次の Azure CLI コマンドを使ってトークンを取得できます。
az account get-access-token --query accessToken
Curl などの REST クライアントを使用して、探索 URL に対して GET 要求を行います。 前の手順で取得したアクセス トークンを認可に使います。 次の例では、
<region>
をレジストリがあるリージョン、<registry_name>
をレジストリの名前に置き換えます。<token>
を前の手順で取得したアクセス トークンに置き換えます。curl -X GET "https://<region>.api.azureml.ms/registrymanagement/v1.0/registries/<registry_name>/discovery" -H "Authorization: Bearer <token>" -H "Content-Type: application/json"