Zabezpieczanie rozwiązań MLOps przy użyciu zabezpieczeń sieci platformy Azure

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

Metodyka DevOps (MLOps) uczenia maszynowego (MLOps), po raz pierwszy wyróżniona w temacie Hidden Technical Debt in Machine Learning Systems in Machine Learning Systems (Ukryty dług techniczny w systemach uczenia maszynowego w 2015 r.), szybko rośnie. Oczekuje się, że rynek MLOps osiągnie 4 miliardy dolarów do 2025 roku. W międzyczasie praca nad zabezpieczeniem rozwiązań MLOps staje się coraz ważniejsza.

W tym artykule opisano, jak chronić rozwiązania MLOps przy użyciu funkcji zabezpieczeń sieci platformy Azure, takich jak usługa Azure Virtual Network, komunikacja równorzędna sieci, usługa Azure Private Link i usługa Azure DNS. W tym artykule przedstawiono również sposób używania następujących funkcji:

  • Usługa Azure Pipelines w celu uzyskania dostępu do zasobów w sieci wirtualnej
  • Wymagane konfiguracje usługi Azure Container Registry i wystąpień obliczeniowych i klastrów usługi Azure Machine Learning w sieci wirtualnej.

Na koniec w tym artykule opisano koszty korzystania z usług zabezpieczeń sieci.

Architektura

Diagram etapów procesu MLOps— od przygotowywania danych do monitorowania modelu.

Pobierz plik programu Visio z tą architekturą.

Przepływ danych

Diagram architektury przedstawia przykładowe rozwiązanie MLOps.

  • Sieć wirtualna o nazwie AML VNET pomaga chronić obszar roboczy usługi Azure Machine Learning i skojarzone z nim zasoby.

  • Host przesiadkowy, usługa Azure Bastion i agenci self-hosted należą do innej sieci wirtualnej o nazwie SIEĆ wirtualna BASTION. To rozwiązanie symuluje posiadanie innego rozwiązania, które wymaga dostępu do zasobów w sieci wirtualnej usługi Azure Machine Learning.

  • Dzięki obsłudze komunikacji równorzędnej sieci wirtualnych i prywatnych stref DNS usługa Azure Pipelines może wykonywać na własnych agentach hosta i wyzwalać potoki usługi Azure Machine Learning opublikowane w obszarze roboczym usługi Azure Machine Learning w celu trenowania, oceniania i rejestrowania modeli uczenia maszynowego.

  • Na koniec model jest wdrażany w punktach końcowych online lub punktach końcowych wsadowych obsługiwanych przez zasoby obliczeniowe usługi Azure Machine Learning lub klastry usługi Azure Kubernetes Service.

Składniki

Przykładowe rozwiązanie MLOps składa się z następujących składników:

W tym przykładowym scenariuszu użyto również następujących usług, aby chronić rozwiązanie MLOps:

Szczegóły scenariusza

Metodyka MLOps to zestaw praktyk na skrzyżowaniu uczenia maszynowego, metodyki DevOps i inżynierii danych, który ma na celu niezawodne i wydajne wdrażanie i konserwowanie modeli uczenia maszynowego w środowisku produkcyjnym.

Na poniższym diagramie przedstawiono uproszczony model procesów MLOps. Ten model oferuje rozwiązanie, które automatyzuje przygotowywanie danych, trenowanie modelu, ocenę modelu, rejestrację modelu, wdrażanie modelu i monitorowanie.

Diagram etapów procesu MLOps— od przygotowywania danych do monitorowania modelu.

Podczas implementowania rozwiązania MLOps warto zabezpieczyć te zasoby:

  • Potoki DevOps
  • Dane szkoleniowe uczenia maszynowego
  • Potoki uczenia maszynowego
  • Modele uczenia maszynowego

Aby ułatwić zabezpieczanie zasobów, rozważ następujące metody:

  • Uwierzytelnianie i autoryzacja

  • Bezpieczeństwo sieci

    • Użyj sieci wirtualnej, aby częściowo lub w pełni odizolować środowisko od publicznego Internetu, aby zmniejszyć obszar ataków i potencjał eksfiltracji danych.
      • Jeśli w obszarze roboczym usługi Azure Machine Learning nadal używasz interfejsu wiersza polecenia usługi Azure Machine Learning w wersji 1 i zestawu SDK języka Python usługi Azure Machine Learning w wersji 1 (na przykład interfejs API w wersji 1), dodaj prywatny punkt końcowy do obszaru roboczego, aby zapewnić izolację sieci dla wszystkich elementów z wyjątkiem operacji tworzenia, odczytu, aktualizowania i usuwania (CRUD) w obszarze roboczym lub zasobach obliczeniowych.
      • Aby skorzystać z nowych funkcji obszaru roboczego usługi Azure Machine Learning, użyj interfejsu wiersza polecenia usługi Azure Machine Learning w wersji 2 i zestawu SDK języka Python usługi Azure Machine Learning w wersji 2 (na przykład interfejs API w wersji 2), w którym włączenie prywatnego punktu końcowego w obszarze roboczym nie zapewnia tego samego poziomu izolacji sieci. Jednak sieć wirtualna nadal pomoże chronić dane szkoleniowe i modele uczenia maszynowego. Zalecamy ocenę interfejsu API w wersji 2 przed wdrożeniem go w rozwiązaniach dla przedsiębiorstw. Aby uzyskać więcej informacji, zobacz Co to jest nowa platforma interfejsu API w usłudze Azure Resource Manager.
  • Szyfrowanie danych

  • Zasady i monitorowanie

    • Użyj usługi Azure Policy i Microsoft Defender dla Chmury, aby wymusić zasady.
    • Usługa Azure Monitor umożliwia zbieranie i agregowanie danych (takich jak metryki i dzienniki) z różnych źródeł do wspólnej platformy danych na potrzeby analizy, wizualizacji i alertów.

Obszar roboczy usługi Azure Machine Learning to zasób najwyższego poziomu dla usługi Azure Machine Learning i podstawowy składnik rozwiązania MLOps. Obszar roboczy zapewnia scentralizowane miejsce do pracy ze wszystkimi artefaktami tworzonymi podczas korzystania z usługi Azure Machine Learning.

Podczas tworzenia nowego obszaru roboczego automatycznie tworzy następujące zasoby platformy Azure, które są używane przez obszar roboczy:

  • Azure Application Insights
  • Azure Container Registry
  • Azure Key Vault
  • Konto magazynu platformy Azure

Potencjalne przypadki użycia

To rozwiązanie pasuje do scenariuszy, w których klient używa rozwiązania MLOps do wdrażania i konserwacji modeli uczenia maszynowego w bardziej bezpiecznym środowisku. Klienci mogą pochodzić z różnych branż, takich jak produkcja, telekomunikacja, handel detaliczny, opieka zdrowotna itd. Na przykład:

  • Operator telekomunikacyjny pomaga chronić obrazy, dane i modele uczenia maszynowego klienta w swoim systemie monitorowania wideo dla sklepów detalicznych.

  • Producent silnika potrzebuje bezpieczniejszego rozwiązania, aby chronić modele danych i uczenia maszynowego swoich fabryk i produktów dla systemu, który używa przetwarzania obrazów do wykrywania wad w częściach.

Rozwiązania MLOps dla tych scenariuszy i innych mogą używać obszarów roboczych usługi Azure Machine Learning, Azure Blob Storage, Azure Kubernetes Service, Container Registry i innych usług platformy Azure.

Możesz użyć wszystkich lub części tego przykładu dla dowolnego podobnego scenariusza, który ma środowisko MLOps wdrożone na platformie Azure i korzysta z funkcji zabezpieczeń platformy Azure, aby chronić odpowiednie zasoby. Oryginalny klient tego rozwiązania znajduje się w branży telekomunikacyjnej.

Kwestie wymagające rozważenia

Te zagadnienia implementują filary platformy Azure Well-Architected Framework, która jest zestawem wytycznych, które zwiększają jakość obciążenia podczas stosowania. Aby uzyskać więcej informacji, zobacz Microsoft Azure Well-Architected Framework.

Zabezpieczenia

Bezpieczeństwo zapewnia więcej gwarancji przed celowymi atakami i nadużyciami cennych danych i systemów. Aby uzyskać więcej informacji, zobacz Lista kontrolna przeglądu projektu dotycząca zabezpieczeń.

Zastanów się, jak zabezpieczyć rozwiązanie MLOps, począwszy od projektu architektury. Środowiska deweloperskie mogą nie potrzebować znaczących zabezpieczeń, ale ważne jest w środowiskach przejściowych i produkcyjnych.

Optymalizacja kosztów

Optymalizacja kosztów dotyczy sposobów zmniejszenia niepotrzebnych wydatków i poprawy wydajności operacyjnej. Aby uzyskać więcej informacji, zobacz Lista kontrolna przeglądu projektu dotycząca optymalizacji kosztów.

Konfigurowanie sieci wirtualnej jest bezpłatne, ale są naliczane opłaty za inne usługi, których scenariusz może wymagać, takich jak łącza prywatne, strefy DNS i komunikacja równorzędna sieci wirtualnych. W poniższej tabeli opisano opłaty za te usługi i inne, które mogą być wymagane.

Usługa platformy Azure Cennik
Virtual Network Bez opłat.
Private Link Płacisz tylko za godziny zasobów prywatnego punktu końcowego i dane przetwarzane za pośrednictwem prywatnego punktu końcowego.
Azure DNS, strefa prywatna Rozliczenia są oparte na liczbie stref DNS hostowanych na platformie Azure i liczbie odebranych zapytań DNS.
Komunikacja równorzędna sieci wirtualnych Opłaty za ruch przychodzący i wychodzący są naliczane na obu końcach sieci połączonych za pomocą komunikacji równorzędnej.
VPN Gateway Opłaty są naliczane na podstawie czasu aprowizowania i dostępności bramy.
ExpressRoute Opłaty są naliczane za bramy usługi ExpressRoute i usługi ExpressRoute.
Azure Bastion Rozliczenia obejmują kombinację godzinowych cen opartych na jednostkach SKU, jednostkach skalowania i stawkach transferu danych.

Sprawność operacyjna

Doskonałość operacyjna obejmuje procesy operacyjne, które wdrażają aplikację i działają w środowisku produkcyjnym. Aby uzyskać więcej informacji, zobacz Lista kontrolna projektu dotycząca doskonałości operacyjnej.

Aby usprawnić ciągłą integrację i ciągłe dostarczanie (CI/CD), najlepszym rozwiązaniem jest użycie narzędzi i usług infrastruktury jako kodu (IaC), takich jak terraform lub szablony usługi Azure Resource Manager, Azure DevOps i Azure Pipelines.

Wdrażanie tego scenariusza

W poniższych sekcjach opisano sposób wdrażania, uzyskiwania dostępu i zabezpieczania zasobów w tym przykładowym scenariuszu.

Virtual Network

Pierwszym krokiem w zabezpieczaniu środowiska MLOps jest pomoc w ochronie obszaru roboczego usługi Azure Machine Learning i skojarzonych z nim zasobów. Efektywną metodą ochrony jest użycie sieci wirtualnej. Sieć wirtualna to podstawowy blok konstrukcyjny dla sieci prywatnej na platformie Azure. Usługa Virtual Network umożliwia bezpieczniejszą komunikację wielu typów zasobów platformy Azure ze sobą, Internetem i sieciami lokalnymi.

Umieszczenie obszaru roboczego usługi Azure Machine Learning i skojarzonych z nim zasobów w sieć wirtualną pomaga zapewnić, że składniki mogą komunikować się ze sobą bez uwidaczniania ich do publicznego Internetu. Dzięki temu zmniejsza obszar ataków i pomaga zapobiegać eksfiltracji danych.

Poniższy fragment kodu programu Terraform pokazuje, jak utworzyć klaster obliczeniowy dla usługi Azure Machine Learning, dołączyć go do obszaru roboczego i umieścić go w podsieci sieci wirtualnej.

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"
  }
}

Usługa Private Link umożliwia dostęp za pośrednictwem prywatnego punktu końcowego w sieci wirtualnej do opcji platformy Azure jako usługi (PaaS), takich jak obszar roboczy usługi Azure Machine Learning i usługa Azure Storage, a także do usług należących do klientów i usług należących do partnerów platformy Azure. Prywatny punkt końcowy to interfejs sieciowy, który łączy się tylko z określonymi zasobami, co pomaga chronić przed eksfiltracją danych.

W tym przykładowym scenariuszu istnieją cztery prywatne punkty końcowe powiązane z opcjami paaS platformy Azure i zarządzane przez podsieć w sieci wirtualnej usługi Azure Machine Learning, jak pokazano na diagramie architektury. W związku z tym te usługi są dostępne tylko dla zasobów w ramach tej samej sieci wirtualnej, sieci wirtualnej usługi Azure Machine Learning. Te usługi to:

  • Obszar roboczy usługi Azure Machine Learning
  • Azure Blob Storage
  • Azure Container Registry
  • Azure Key Vault

Poniższy fragment kodu programu Terraform pokazuje, jak za pomocą prywatnego punktu końcowego połączyć się z obszarem roboczym usługi Azure Machine Learning, który jest bardziej chroniony przez sieć wirtualną w rezultacie. Fragment kodu przedstawia również użycie prywatnej strefy DNS, która jest opisana w temacie Strefy Prywatna strefa DNS platformy Azure.

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]
}

Poprzedni kod domyślnie azurerm_machine_learning_workspace będzie używać platformy interfejsu API w wersji 2. Jeśli nadal chcesz użyć interfejsu API w wersji 1 lub zasady firmy, które uniemożliwiają wysyłanie komunikacji za pośrednictwem sieci publicznych, możesz włączyć v1_legacy_mode_enabled parametr, jak pokazano w poniższym fragmencie kodu. Po włączeniu ten parametr wyłącza interfejs API w wersji 2 dla obszaru roboczego.

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

Prywatne strefy DNS platformy Azure

Usługa Azure DNS zapewnia niezawodną, bezpieczniejszą usługę DNS do zarządzania i rozpoznawania nazw domen w sieci wirtualnej bez konieczności dodawania niestandardowego rozwiązania DNS. Korzystając z prywatnych stref DNS, można użyć niestandardowych nazw domen, a nie nazw udostępnianych przez platformę Azure. Rozpoznawanie nazw DNS w prywatnej strefie DNS działa tylko z sieci wirtualnych, które są z nią połączone.

To przykładowe rozwiązanie używa prywatnych punktów końcowych dla obszaru roboczego usługi Azure Machine Learning i skojarzonych z nim zasobów, takich jak Azure Storage, Azure Key Vault lub Container Registry. W związku z tym należy skonfigurować ustawienia DNS, aby rozpoznawać adresy IP prywatnych punktów końcowych z w pełni kwalifikowanej nazwy domeny (FQDN) parametry połączenia.

Możesz połączyć prywatną strefę DNS z siecią wirtualną, aby rozpoznać określone domeny.

Fragment kodu programu Terraform w usłudze Private Link i prywatny punkt końcowy platformy Azure tworzy dwie prywatne strefy DNS przy użyciu nazw stref zalecanych w konfiguracji strefy DNS usług platformy Azure:

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

Komunikacja równorzędna sieci wirtualnych

Komunikacja równorzędna sieci wirtualnych umożliwia dostęp do maszyn wirtualnych typu jump-host (VM) lub maszyn wirtualnych z własnym agentem w sieci wirtualnej usługi Azure Bastion do zasobów w sieci wirtualnej usługi Azure Machine Learning. W celach łączności obie sieci wirtualne działają jako jedna. Ruch między maszynami wirtualnymi i zasobami usługi Azure Machine Learning w równorzędnych sieciach wirtualnych korzysta z infrastruktury szkieletowej platformy Azure. Ruch między sieciami wirtualnymi jest kierowany przez sieć prywatną platformy Azure.

Poniższy fragment kodu programu Terraform konfiguruje komunikację równorzędną sieci wirtualnych między siecią wirtualną usługi Azure Machine Learning i siecią wirtualną usługi 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
}

Uzyskiwanie dostępu do zasobów w sieci wirtualnej

Aby uzyskać dostęp do obszaru roboczego usługi Azure Machine Learning w sieci wirtualnej, takiej jak sieć wirtualna usługi Azure Machine Learning w tym scenariuszu, użyj jednej z następujących metod:

  • Azure VPN Gateway
  • Azure ExpressRoute
  • Usługa Azure Bastion i maszyna wirtualna hosta szybkiego dostępu

Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia z obszarem roboczym.

Uruchamianie usługi Azure Pipelines, które uzyskują dostęp do zasobów w sieci wirtualnej

Usługa Azure Pipelines automatycznie kompiluje i testuje projekty kodu, aby udostępnić je innym. Usługa Azure Pipelines łączy ciągłą integrację/ciągłe wdrażanie w celu przetestowania i skompilowania kodu i wysłania go do dowolnego miejsca docelowego.

Agenci hostowani na platformie Azure a agenci hostowani samodzielnie

Rozwiązanie MLOps w tym przykładowym scenariuszu składa się z dwóch potoków, które mogą wyzwalać potoki usługi Azure Machine Learning i uzyskiwać dostęp do skojarzonych zasobów. Ponieważ obszar roboczy usługi Azure Machine Learning i skojarzony z nim zasób znajdują się w sieci wirtualnej, ten scenariusz musi zapewnić agentowi usługi Azure Pipelines dostęp do nich. Agent to infrastruktura obliczeniowa z zainstalowanym oprogramowaniem agenta, które uruchamia zadania usługi Azure Pipelines pojedynczo. Istnieje wiele sposobów implementowania dostępu:

  • Użyj własnych agentów w tej samej sieci wirtualnej lub sieci wirtualnej komunikacji równorzędnej, jak pokazano na diagramie architektury.

  • Użyj agentów hostowanych na platformie Azure i dodaj zakresy adresów IP do listy dozwolonych w ustawieniach zapory docelowych usług platformy Azure.

  • Użyj agentów hostowanych na platformie Azure (jako klientów sieci VPN) i usługi VPN Gateway.

Każda z tych opcji ma zalety i wady. W poniższej tabeli porównaliśmy agentów hostowanych na platformie Azure z własnymi agentami.

Agent hostowany na platformie Azure Własny agent
Koszty Rozpocznij bezpłatnie dla jednego zadania równoległego z 1800 minutami miesięcznie i opłatą za każde zadanie równoległe ciągłej integracji/ciągłego wdrażania na platformie Azure. Rozpocznij bezpłatnie dla jednego zadania równoległego z nieograniczonymi minutami miesięcznie i opłatą za każde dodatkowe zadanie równoległe ciągłej integracji/ciągłego wdrażania z nieograniczoną ilością minut. Ta opcja oferuje tańsze zadania równoległe.
Konserwacja Dbanie o Ciebie przez firmę Microsoft. Utrzymywane przez Ciebie z większą kontrolą nad instalowaniem oprogramowania, które chcesz.
Czas kompilacji Bardziej czasochłonne, ponieważ jest całkowicie odświeżane za każdym razem, gdy rozpoczynasz kompilację, i zawsze kompilujesz od podstaw. Oszczędza czas, ponieważ przechowuje wszystkie pliki i pamięci podręczne.

Uwaga

Aby uzyskać informacje o bieżących cenach, zobacz Cennik usługi Azure DevOps.

Na podstawie porównań w tabeli oraz zagadnień dotyczących zabezpieczeń i złożoności w tym przykładowym scenariuszu użyto własnego agenta dla usługi Azure Pipelines w celu wyzwolenia potoków usługi Azure Machine Learning w sieci wirtualnej.

Aby skonfigurować własnego agenta, dostępne są następujące opcje:

  • Zainstaluj agenta w usłudze Azure Virtual Machines.

  • Zainstaluj agentów w zestawie skalowania maszyn wirtualnych platformy Azure, które można skalować automatycznie w celu spełnienia wymagań.

  • Zainstaluj agenta w kontenerze platformy Docker. Ta opcja nie jest możliwa, ponieważ ten scenariusz może wymagać uruchomienia kontenera platformy Docker w ramach agenta na potrzeby trenowania modelu uczenia maszynowego.

Poniższy przykładowy kod aprowizuje dwóch własnych agentów przez utworzenie maszyn wirtualnych i rozszerzeń platformy Azure:

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
}

Jak pokazano w poprzednim bloku kodu, skrypt terraform wywołuje agent_init.sh, pokazany w poniższym bloku kodu, aby zainstalować oprogramowanie agenta i wymagane biblioteki na maszynie wirtualnej agenta zgodnie z wymaganiami klienta.

#!/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

Korzystanie z usługi Container Registry w sieci wirtualnej

Istnieją pewne wymagania wstępne dotyczące zabezpieczania obszaru roboczego usługi Azure Machine Learning w sieci wirtualnej. Aby uzyskać więcej informacji, zobacz Wymagania wstępne. Usługa Container Registry jest wymaganą usługą, gdy używasz obszaru roboczego usługi Azure Machine Learning do trenowania i wdrażania modeli.

W tym przykładowym scenariuszu, aby upewnić się, że własny agent może uzyskać dostęp do rejestru kontenerów w sieci wirtualnej, użyjemy komunikacji równorzędnej sieci wirtualnej i dodamy link sieci wirtualnej, aby połączyć prywatną strefę DNS z privatelink.azurecr.iosiecią wirtualną usługi Azure Bastion. Poniższy fragment kodu narzędzia Terraform przedstawia implementację.

# 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]
  }
}

Ten przykładowy scenariusz zapewnia również, że rejestr kontenerów ma rolę Współautor dla przypisanej przez system tożsamości zarządzanej obszaru roboczego usługi Azure Machine Learning.

Używanie klastra obliczeniowego lub wystąpienia w sieci wirtualnej

Klaster obliczeniowy usługi Azure Machine Learning lub wystąpienie w sieci wirtualnej wymaga sieciowej grupy zabezpieczeń z określonymi regułami dla jej podsieci. Aby uzyskać listę tych reguł, zobacz Ograniczenia.

Należy również pamiętać, że w przypadku klastra obliczeniowego lub wystąpienia można teraz usunąć publiczny adres IP, co pomaga zapewnić lepszą ochronę zasobów obliczeniowych w rozwiązaniu MLOps. Aby uzyskać więcej informacji, zobacz Brak publicznego adresu IP dla wystąpień obliczeniowych.

Współautorzy

Ten artykuł jest obsługiwany przez firmę Microsoft. Pierwotnie został napisany przez następujących współautorów.

Autorzy zabezpieczeń:

  • Gary Wang | Główny inżynier oprogramowania

Inni współautorzy:

Aby wyświetlić niepubalne profile serwisu LinkedIn, zaloguj się do serwisu LinkedIn.

Następne kroki