Azure ネットワーク セキュリティを使用して MLOps ソリューションをセキュリティで保護する

Azure DevOps
Azure DNS
Azure Machine Learning
Azure Private Link
Azure Virtual Network

2015 年の Hidden Technical Debt in Machine Learning Systems (機械学習システムの隠れた技術負債) で初めて注目された機械学習 DevOps (MLOps) は急速に成長しています。 MLOps の市場は 2025 年までに 40 億ドルに達すると見込みです。 その一方で、MLOps ソリューションをセキュリティで保護することがより重要になっています。

この記事では、Azure Virtual Network、ネットワーク ピアリング、Azure Private Link、Azure DNS などの Azure のネットワーク セキュリティ機能を使用して MLOps ソリューションを保護する方法について説明します。 また、次の使用方法も紹介します。

  • Azure Pipelines で仮想ネットワーク内のリソースにアクセスする
  • 仮想ネットワーク内の Azure Container Registry および Azure Machine Learning コンピューティング インスタンスとクラスターの必要な構成。

最後に、この記事では、ネットワーク セキュリティ サービスを使用するためのコストについて説明します。

アーキテクチャ

MLOps プロセスのステージ (データの準備からモデルの監視まで) を表す図。

このアーキテクチャの Visio ファイル をダウンロードします。

データフロー

このアーキテクチャ図は、MLOps ソリューションのサンプルを示します。

  • AML VNET という名前の仮想ネットワークによって、Azure Machine Learning ワークスペースとその関連リソースが保護されます。

  • ジャンプ ホスト、Azure Bastion、セルフホステッド エージェントは、 BASTION VNET という名前の別の仮想ネットワークに属しています。 この配置は、Azure Machine Learning仮想ネットワーク内のリソースへのアクセスを必要とする別のソリューションをシミュレートします。

  • 仮想ネットワーク ピアリングとプライベート DNS ゾーンのサポートにより、Azure Pipelines をセルフホスト エージェントで実行し、Azure Machine Learning ワークスペースに公開されている Azure Machine Learning パイプラインをトリガーして、機械学習モデルのトレーニング、評価、登録を行うことができます。

  • 最後に、そのモデルが Azure Machine Learning コンピューティング クラスターまたは Azure Kubernetes Service クラスターでサポートされているオンライン エンドポイントまたはバッチ エンドポイントにデプロイされます。

コンポーネント

このサンプル MLOps ソリューションは、以下のコンポーネントで構成されています。

このサンプル シナリオでは、MLOps ソリューションの保護に次のサービスも使用します。

シナリオの詳細

MLOps は、Machine Learning、DevOps、データ エンジニアリングが交差するところに位置し、機械学習モデルを運用環境に効率的かつ確実にデプロイして保守することを目的とした一連のプラクティスです。

次の図は、簡略化された MLOps プロセス モデルを示しています。 このモデルでは、データの準備、モデルのトレーニング、モデルの評価、モデルの登録、モデルのデプロイ、監視を自動化する 1 つのソリューションを提供します。

MLOps プロセスのステージ (データの準備からモデルの監視まで) を表す図。

MLOps ソリューションを実装するときは、次のリソースをセキュリティで保護することをお勧めします。

  • DevOps パイプライン
  • 機械学習トレーニング データ
  • 機械学習パイプライン
  • 機械学習モデル

リソースをセキュリティで保護するために、次の方法を検討してください。

  • 認証と権限承認

  • ネットワークのセキュリティ

    • Virtual Network を使用して、環境をパブリック インターネットから部分的または完全に分離し、攻撃面とデータ流出の可能性を減らす。
      • Azure Machine Learning ワークスペースで、Azure Machine Learning CLI v1とAzure Machine Learning Python SDK v1 (v1 APIなど) をまだ使用している場合は、プライベート エンドポイントをワークスペースに追加して、ワークスペースまたはコンピューティング リソースに対する作成、読み取り、更新、削除 (CRUD) 操作を除くすべての操作をネットワークで分離します。
      • Azure Machine Learning ワークスペースの新機能を活用するには、Azure Machine Learning CLI v2 と Azure Machine Learning Python SDK v2 (v2 API など) を使用します。これらでは、ワークスペースでプライベート エンドポイントを有効にしても同じレベルのネットワーク分離が実現しません。 ただし、仮想ネットワークによって、トレーニング データと機械学習モデルは引き続き保護されます。 エンタープライズ ソリューションで v2 API を採用する前に、評価することをお勧めします。 詳細については、「Azure Resource Managerの新しいAPIプラットフォームとは」を参照してください。
  • データの暗号化

  • ポリシーと監視

    • ポリシーを適用するには、 Azure Policy と Microsoft Defender for Cloud を使用します。
    • Azure Monitor を使用して、さまざまなソースのデータ (メトリックやログなど) を収集し、分析、視覚化、アラート発信のための共通データ プラットフォームに集約する。

Azure Machine Learning ワークスペースは、Azure Machine Learning の最上位のリソースであり、MLOps ソリューションのコア コンポーネントです。 このワークスペースには、Azure Machine Learning を使用するときに作成する、すべての成果物を操作するための一元的な場所が用意されています。

新しいワークスペースを作成すると、そのワークスペースで使用する次の Azure リソースが自動的に作成されます。

  • Azure Application Insights
  • Azure Container Registry
  • Azure Key Vault
  • Azure Storage アカウント

考えられるユース ケース

このソリューションは、お客様が MLOps ソリューションを使用して、より安全な環境で機械学習モデルをデプロイおよび保守するシナリオに適しています。 お客様は、製造、電気通信、小売、医療など、さまざまな業界に存在する可能性があります。 たとえば次のような点です。

  • 小売店向けのビデオ監視システムで顧客の画像、データ、機械学習モデルの保護を支援する通信事業者。

  • コンピューター ビジョンを使用して部品の欠陥を検出するシステムで、工場と製品のデータと機械学習モデルを保護するために、より安全なソリューションを必要としているエンジン メーカー。

これらのシナリオやその他のシナリオ向けの MLOps ソリューションでは、Azure Machine Learning ワークスペース、Azure Blob Storage、Azure Kubernetes Service、Container Registry、およびその他の Azure サービスを使用する場合があります。

この例のすべてまたは一部を、Azure にデプロイされており、かつ Azure のセキュリティ機能を使用して関連リソースを保護する MLOps 環境が存在する、類似のシナリオで使用することができます。 このソリューションの元のお客様は、通信業界のお客様です。

考慮事項

これらの考慮事項には、適用するとワークロードの品質を向上させる一連の基本原則である Azure Well-Architected Framework の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。

セキュリティ

セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を高めます。 詳細については、「セキュリティの重要な要素の概要」を参照してください。

アーキテクチャ設計の時点から、MLOps ソリューションをセキュリティで保護する方法について検討してください。 開発環境ではセキュリティを大して必要としない可能性がありますが、ステージング環境と運用環境では重要です。

コストの最適化

コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、 コスト最適化の柱の概要に関する記事をご覧ください。

Virtual Network の構成は無料ですが、プライベート リンク、DNS ゾーン、仮想ネットワーク ピアリングなど、シナリオに必要なその他のサービスには料金が発生します。 次の表では、これらのサービスと、必要になる可能性があるその他のサービスの料金について説明します。

Azure サービス 価格
Virtual Network 無料。
Private Link プライベート エンドポイント リソース時間と、プライベート エンドポイント経由で処理されるデータに対してのみ支払います。
Azure DNS、プライベート ゾーン Azure でホストされている DNS ゾーンの数と、受信される DNS クエリの数に基づいて請求が発生します。
仮想ネットワーク ピアリング インバウンド トラフィックとアウトバウンド トラフィックは、ピアリングされたネットワークの両端で課金されます。
VPN Gateway ゲートウェイがプロビジョニングされ、利用可能になっている時間に基づいて料金が発生します。
ExpressRoute ExpressRoute と ExpressRoute ゲートウェイに対して料金が発生します。
Azure Bastion 請求には、SKU、スケール ユニット、データ転送レートに基づく時間単位の価格の組み合わせが関与します。

オペレーショナル エクセレンス

オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「オペレーショナル エクセレンスの重要な要素の概要」を参照してください。

継続的インテグレーションと継続的デリバリー (CI/CD) を合理化するために、ベスト プラクティスは、Terraform や Azure Resource Manager テンプレート、Azure DevOps、Azure Pipelines などのコードとしてのインフラストラクチャ (IaC) 用のツールとサービスを使用することです。

このシナリオのデプロイ

次のセクションでは、このサンプル シナリオでリソースをデプロイ、アクセス、セキュリティで保護する方法について説明します。

Virtual Network

MLOps 環境をセキュリティで保護する最初の手順は、Azure Machine Learning ワークスペースとそれに関連するリソースを保護できるようにすることです。 効果的な保護方法は、Virtual Network を使用することです。 Virtual Network は、Azure 内のプライベート ネットワークの基本的な構成要素です。 Virtual Network を使用すると、多くの種類の Azure リソースで、相互に、およびインターネットやオンプレミス ネットワークと、より安全に通信できます。

Azure Machine Learning ワークスペースとそれに関連するリソースを仮想ネットワークに配置すると、コンポーネントをパブリック インターネットに公開することなく、相互に通信できるようになります。 これにより、攻撃面が減り、データ流出の防止に役立ちます。

次の Terraform スニペットは、Azure Machine Learning 用のコンピューティング クラスターを作成し、それをワークスペースにアタッチして、仮想ネットワークのサブネットに配置する方法を示しています。

resource "azurerm_machine_learning_compute_cluster" "compute_cluster" {
  name                          = "my_compute_cluster"
  location                      = "eastasia"
  vm_priority                   = "LowPriority"
  vm_size                       = "Standard_NC6s_v3"
  machine_learning_workspace_id = azurerm_machine_learning_workspace.my_workspace.id
  subnet_resource_id            = azurerm_subnet.compute_subnet.id
  ssh_public_access_enabled     = false
  scale_settings {
    min_node_count                       = 0
    max_node_count                       = 3
    scale_down_nodes_after_idle_duration = "PT30S"
  }
  identity {
    type = "SystemAssigned"
  }
}

Private Link により、仮想ネットワーク内のプライベート エンドポイントを介して、Azure Machine Learning ワークスペースや Azure Storage などの Azure のサービスとしてのプラットフォーム (PaaS) オプション、および Azure でホストされている顧客所有のサービスとパートナー所有のサービスへのアクセスが可能になります。 プライベート エンドポイントとは、特定のリソースにのみ接続することでデータ流出を防止できるようにするネットワーク インターフェイスです。

このシナリオ例では、 アーキテクチャ図に示すように、Azure PaaSオプションに関連付けられ、Azure Machine Learning仮想ネットワーク内のサブネットによって管理される4つのプライベート エンドポイントがあります。 そのため、これらのサービスには、同じ仮想ネットワーク (Azure Machine Learning仮想ネットワーク) 内のリソースからのみアクセスできます。 これらのサービスは次のとおりです。

  • Azure Machine Learning ワークスペース
  • Azure Blob Storage
  • Azure Container Registry
  • Azure Key Vault

次の Terraform スニペットは、プライベート エンドポイントを使用して Azure Machine Learning ワークスペースにリンクする方法を示しています。結果として、仮想ネットワークにより保護が強化されています。 このスニペットでは、「AzureプライベートDNSゾーン」で説明されているプライベート DNSゾーンの使用も示しています。

resource "azurerm_machine_learning_workspace" "aml_ws" {
  name                    = "my_aml_workspace"
  friendly_name           = "my_aml_workspace"
  location                = "eastasia"
  resource_group_name     = "my_resource_group"
  application_insights_id = azurerm_application_insights.my_ai.id
  key_vault_id            = azurerm_key_vault.my_kv.id
  storage_account_id      = azurerm_storage_account.my_sa.id
  container_registry_id   = azurerm_container_registry.my_acr_aml.id

  identity {
    type = "SystemAssigned"
  }
}

# Configure private DNS zones

resource "azurerm_private_dns_zone" "ws_zone_api" {
  name                = "privatelink.api.azureml.ms"
  resource_group_name = var.RESOURCE_GROUP
}

resource "azurerm_private_dns_zone" "ws_zone_notebooks" {
  name                = "privatelink.notebooks.azure.net"
  resource_group_name = var.RESOURCE_GROUP
}

# Link DNS zones to the virtual network

resource "azurerm_private_dns_zone_virtual_network_link" "ws_zone_api_link" {
  name                  = "ws_zone_link_api"
  resource_group_name   = "my_resource_group"
  private_dns_zone_name = azurerm_private_dns_zone.ws_zone_api.name
  virtual_network_id    = azurerm_virtual_network.aml_vnet.id
}

resource "azurerm_private_dns_zone_virtual_network_link" "ws_zone_notebooks_link" {
  name                  = "ws_zone_link_notebooks"
  resource_group_name   = "my_resource_group"
  private_dns_zone_name = azurerm_private_dns_zone.ws_zone_notebooks.name
  virtual_network_id    = azurerm_virtual_network.aml_vnet.id
}

# Configure private endpoints

resource "azurerm_private_endpoint" "ws_pe" {
  name                = "my_aml_ws_pe"
  location            = "eastasia"
  resource_group_name = "my_resource_group"
  subnet_id           = azurerm_subnet.my_subnet.id

  private_service_connection {
    name                           = "my_aml_ws_psc"
    private_connection_resource_id = azurerm_machine_learning_workspace.aml_ws.id
    subresource_names              = ["amlworkspace"]
    is_manual_connection           = false
  }

  private_dns_zone_group {
    name                 = "private-dns-zone-group-ws"
    private_dns_zone_ids = [azurerm_private_dns_zone.ws_zone_api.id, azurerm_private_dns_zone.ws_zone_notebooks.id]
  }

  # Add the private link after configuring the workspace
  depends_on = [azurerm_machine_learning_compute_instance.compute_instance, azurerm_machine_learning_compute_cluster.compute_cluster]
}

azurerm_machine_learning_workspace の上記のコードでは、既定で v2 API プラットフォームが使用されます。 v1 APIを引き続き使用する場合、またはパブリック ネットワーク経由での通信の送信を禁止する会社のポリシーがある場合は、次のコード スニペットに示すように、 v1_legacy_mode_enabled パラメーターを有効にすることができます。 このパラメーターを有効にすると、ワークスペースに対して v2 API が無効になります。

resource "azurerm_machine_learning_workspace" "aml_ws" {
  ...
  public_network_access_enabled = false
  v1_legacy_mode_enabled  = true
}

Azure プライベート DNS ゾーン

Azure DNS は、信頼性が高く、より安全な DNS サービスを提供し、カスタムの DNS ソリューションを追加する必要なしで、仮想ネットワークでドメイン名を管理および解決します。 プライベート DNS ゾーンを使用すると、Azure で提供される名前ではなく、独自のカスタム ドメイン名を使用できます。 プライベート DNS ゾーンに対する DNS 解決は、それにリンクされている仮想ネットワークからのみ機能します。

このサンプル ソリューションでは、Azure Machine Learning ワークスペースと、Azure Storage、Azure Key Vault、Container Registry などの関連リソースにプライベート エンドポイントを使用します。 そのため、プライベート エンドポイントの IP アドレスを接続文字列の完全修飾ドメイン名 (FQDN) から解決するように、DNS 設定を構成する必要があります。

プライベート DNS ゾーンを仮想ネットワークにリンクして、特定のドメインを解決できます。

Private Link と Azure プライベート エンドポイント」の Terraform スニペットでは、「Azure サービス DNS ゾーン構成」で推奨されるゾーン名を使用して、次の 2 つのプライベート DNS ゾーンを作成します。

  • privatelink.api.azureml.ms
  • privatelink.notebooks.azure.net

仮想ネットワーク ピアリング

仮想ネットワーク ピアリングを使用すると、Azure Bastion仮想ネットワーク内のジャンプホスト仮想マシン (VM) またはセルフホステッド エージェントVMからAzure Machine Learning仮想ネットワーク内のリソースにアクセスできます。 接続において、2 つの仮想ネットワークは 1 つのネットワークとして機能します。 ピアリングされた仮想ネットワーク内の VM と Azure Machine Learning リソース間のトラフィックには、Azure のバックボーン インフラストラクチャが使用されます。 仮想ネットワーク間のトラフィックは、Azure のプライベート ネットワーク経由でルーティングされます。

次の Terraform スニペットは、Azure Machine ラーニング仮想ネットワークと Azure Bastion 仮想ネットワークの間の仮想ネットワーク ピアリングを設定します。

# Virtual network peering for AML VNET and BASTION VNET
resource "azurerm_virtual_network_peering" "vp_amlvnet_basvnet" {
  name                      = "vp_amlvnet_basvnet"
  resource_group_name       = "my_resource_group"
  virtual_network_name      = azurerm_virtual_network.amlvnet.name
  remote_virtual_network_id = azurerm_virtual_network.basvnet.id
  allow_virtual_network_access = true
  allow_forwarded_traffic      = true
}

resource "azurerm_virtual_network_peering" "vp_basvnet_amlvnet" {
  name                      = "vp_basvnet_amlvnet"
  resource_group_name       = "my_resource_group"
  virtual_network_name      = azurerm_virtual_network.basvnet.name
  remote_virtual_network_id = azurerm_virtual_network.amlvnet.id
  allow_virtual_network_access = true
  allow_forwarded_traffic      = true
}

仮想ネットワーク内のリソースにアクセスする

このシナリオのAzure Machine Learning仮想ネットワークのように、仮想ネットワーク内のAzure Machine Learning ワークスペースにアクセスするには、次のいずれかの方法を使用します。

  • Azure VPN Gateway
  • Azure ExpressRoute
  • Azure Bastion とジャンプ ホスト VM

詳細については、 ワークスペースへの接続に関するページを参照してください。

仮想ネットワーク内のリソースにアクセスする Azure Pipelines を実行する

Azure Pipelines では、他のユーザーが使用できるように、コード プロジェクトが自動的にビルドおよびテストされます。 Azure Pipelines では、CI/CD を組み合わせて、コードのテストとビルドを実行し、任意のターゲットに提供します。

Azure でホストされるエージェントとセルフホステッド エージェントの比較

このシナリオ例の MLOps ソリューションは、Azure Machine Learning パイプラインをトリガーし、関連するリソースにアクセスできる、2 つのパイプラインで構成されています。 Azure Machine Learning ワークスペースとそれに関連付けられているリソースは仮想ネットワーク内に存在するため、このシナリオでは、Azure Pipelines エージェントからそれらにアクセスする方法を提供する必要があります。 エージェントとは、Azure Pipelines のジョブを一度に 1 つずつ実行するインストール済みのエージェント ソフトウェアが備わったコンピューティング インフラストラクチャのことです。 アクセスを実装する方法は複数あります。

  • アーキテクチャ図に示すように、同じ仮想ネットワークまたはピアリング仮想ネットワークでセルフホステッド エージェントを使用します。

  • Azure でホストされているエージェントを使用し、ターゲットとなる Azure サービスのファイアウォール設定の許可リストに、それらの IP アドレスの範囲を追加します。

  • (VPN クライアントとして) Azure でホストされるエージェントと VPN Gateway を使用します。

これらの選択肢にはそれぞれ長所と短所があります。 次の表は、Azure でホストされるエージェントとセルフホステッド エージェントを比較したものです。

Azure でホストされるエージェント セルフホステッド エージェント
コスト 1 か月あたり 1 つの並列ジョブを 1,800 分まで無料で開始し、Azure でホストされる CI/CD 並列ジョブごとに料金が発生します。 1 か月あたりの 1 つの並列ジョブを時間制限なしで無料で開始し、追加のセルフホステッド CI/CD 並列ジョブごとに料金が発生します (時間制限なし)。 このオプションのほうが並列ジョブがより安価になります。
メンテナンス ユーザーの代わりに Microsoft によって管理されます。 ユーザーが保守を行うため、インストールするソフトウェアをより細かく管理できます。
ビルド時間 ビルドを開始するたびに完全に更新され、常に最初からビルドするため、より多くの時間がかかります。 すべてのファイルとキャッシュが保持されるため、時間を節約できます。

注意

現在の価格については、「Azure DevOps の料金」を参照してください。

このサンプル シナリオでは、表の比較とセキュリティや複雑さに関する考慮事項に基づいて、Azure Pipelines のセルフホステッド エージェントを使用して、仮想ネットワーク内の Azure Machine Learning パイプラインをトリガーします。

セルフホステッド エージェントを構成する際に、次のオプションがあります。

  • エージェントを Azure Virtual Machines にインストールする。

  • エージェントを Azure 仮想マシン スケール セットにインストールする。これは、需要に合わせて自動的にスケーリングできます。

  • エージェントを Docker コンテナーにインストールする。 このシナリオでは、機械学習モデルのトレーニングのためにエージェント内で Docker コンテナーを実行する必要がある場合があるため、このオプションは実現がやや困難です。

次のサンプル コードでは、Azure VM と拡張機能を作成することで、2 つのセルフホステッド エージェントをプロビジョニングします。

resource "azurerm_linux_virtual_machine" "agent" {
  ...
}

resource "azurerm_virtual_machine_extension" "update-vm" {
  count                = 2
  name                 = "update-vm${format("%02d", count.index)}"
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.1"
  virtual_machine_id   = element(azurerm_linux_virtual_machine.agent.*.id, count.index)

  settings = <<SETTINGS
    {
        "script": "${base64encode(templatefile("../scripts/terraform/agent_init.sh", {
          AGENT_USERNAME      = "${var.AGENT_USERNAME}",
          ADO_PAT             = "${var.ADO_PAT}",
          ADO_ORG_SERVICE_URL = "${var.ADO_ORG_SERVICE_URL}",
          AGENT_POOL          = "${var.AGENT_POOL}"
        }))}"
    }
SETTINGS
}

前のコード ブロックに示したとおり、この Terraform スクリプトでは、次のコード ブロックに示すように agent_init.sh を呼び出して、顧客の要件に従ってエージェント ソフトウェアと必要なライブラリをエージェント VM にインストールします。

#!/bin/sh
# Install other required libraries 
...

# Creates directory and downloads Azure DevOps agent installation files
# Find more agent versions at https://github.com/microsoft/azure-pipelines-agent/releases
AGENT_VERSION="3.240.1"
sudo mkdir /myagent 
cd /myagent
sudo wget https://vstsagentpackage.azureedge.net/agent/${AGENT_VERSION}/vsts-agent-linux-x64-${AGENT_VERSION}.tar.gz
sudo tar zxvf ./vsts-agent-linux-x64-${AGENT_VERSION}.tar.gz
sudo chmod -R 777 /myagent

# Unattended installation
sudo runuser -l ${AGENT_USERNAME} -c '/myagent/config.sh --unattended  --url ${ADO_ORG_SERVICE_URL} --auth pat --token ${ADO_PAT} --pool ${AGENT_POOL}'

cd /myagent
#Configure as a service
sudo ./svc.sh install ${AGENT_USERNAME}
#Start service
sudo ./svc.sh start

仮想ネットワーク内で Container Registry を使用する

仮想ネットワーク内の Azure Machine Learning ワークスペースをセキュリティで保護するには、いくつかの前提条件があります。 詳細については、「前提条件」を参照してください。 Container Registry は、Azure Machine Learning ワークスペースを使用してモデルをトレーニングおよびデプロイする際に必要なサービスです。

このシナリオ例では、セルフホステッド エージェントが仮想ネットワーク内のコンテナー レジストリにアクセスできるようにするために、仮想ネットワーク ピアリングを使用し、プライベート DNS ゾーン privatelink.azurecr.ioを Azure Bastion 仮想ネットワークにリンクする仮想ネットワーク リンクを追加します。 次の Terraform スニペットは、その実装を示しています。

# Azure Machine Learning Container Registry is for private access 
# by the Azure Machine Learning workspace
resource "azurerm_container_registry" "acr" {
  name                     = "my_acr"
  resource_group_name      = "my_resource_group"
  location                 = "eastasia"
  sku                      = "Premium"
  admin_enabled            = true
  public_network_access_enabled = false
}

resource "azurerm_private_dns_zone" "acr_zone" {
  name                     = "privatelink.azurecr.io"
  resource_group_name      = "my_resource_group"
}

resource "azurerm_private_dns_zone_virtual_network_link" "acr_zone_link" {
  name                  = "link_acr"
  resource_group_name   = "my_resource_group"
  private_dns_zone_name = azurerm_private_dns_zone.acr_zone.name
  virtual_network_id    = azurerm_virtual_network.amlvnet.id
}

resource "azurerm_private_endpoint" "acr_ep" {
  name                = "acr_pe"
  resource_group_name = "my_resource_group"
  location            = "eastasia"
  subnet_id           = azurerm_subnet.aml_subnet.id

  private_service_connection {
    name                           = "acr_psc"
    private_connection_resource_id = azurerm_container_registry.acr.id
    subresource_names              = ["registry"]
    is_manual_connection           = false
  }

  private_dns_zone_group {
    name                 = "private-dns-zone-group-app-acr"
    private_dns_zone_ids = [azurerm_private_dns_zone.acr_zone.id]
  }
}

また、このサンプル シナリオでは、Azure Machine Learning ワークスペースのシステム割り当てマネージド ID の共同作成者ロールが、コンテナー レジストリに確実に付与されます。

仮想ネットワークでコンピューティング クラスターまたはコンピューティング インスタンスを使用する

仮想ネットワーク内の Azure Machine Learning コンピューティング クラスターまたはコンピューティング インスタンスには、サブネットに対して特定の規則を持つネットワーク セキュリティ グループ (NSG) が必要です。 これらのルールの一覧については、「制限事項」を参照してください。

また、コンピューティング クラスターまたはインスタンスの場合、パブリック IP アドレスを削除することが可能になっています。これにより、MLOps ソリューションでのコンピューティング リソースの保護が向上します。 詳細については、「コンピューティング インスタンスの [No public IP] (パブリック IP なし)」を参照してください。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

  • Gary Wang | プリンシパル ソフトウェア エンジニア

その他の共同作成者:

パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。

次のステップ