Mengamankan lingkungan inferensi Azure Machine Learning dengan jaringan virtual (v1)

BERLAKU UNTUK:SDK Python azureml v1

BERLAKU UNTUK:Ekstensi ml Azure CLI v1

Dalam artikel ini, Anda mempelajari cara mengamankan lingkungan inferensi dengan jaringan virtual di Pembelajaran Mesin Microsoft Azure. Artikel ini khusus untuk alur kerja penyebaran SDK/CLI v1 dalam menyebarkan model sebagai layanan web.

Tip

Artikel ini adalah bagian dari seri tentang mengamankan alur kerja Azure Machine Learning. Lihat artikel lain dalam seri ini:

Untuk tutorial mengenai pembuatan ruang kerja yang aman, lihat Tutorial: Membuat ruang kerja yang aman atau Tutorial: Membuat ruang kerja yang aman menggunakan templat.

Dalam artikel ini Anda mempelajari cara mengamankan sumber daya inferensi berikut ini dalam jaringan virtual:

  • Kluster Azure Kubernetes Service (AKS) default
  • Kluster AKS privat
  • Kluster AKS dengan tautan privat

Prasyarat

  • Baca artikel Gambaran umum keamanan jaringan untuk memahami skenario jaringan virtual umum dan arsitektur jaringan virtual secara keseluruhan.

  • Jaringan virtual dan subnet yang ada untuk digunakan dengan sumber daya komputasi Anda.

  • Untuk menyebarkan sumber daya ke dalam jaringan virtual atau subnet, akun pengguna Anda harus memiliki izin untuk tindakan berikut di kontrol akses berbasis peran Azure (Azure RBAC):

    • "Microsoft.Network/*/read" pada sumber daya jaringan virtual. Izin ini tidak diperlukan untuk penyebaran templat Azure Resource Manager (ARM).
    • "Microsoft.Network/virtualNetworks/join/action" pada sumber daya jaringan virtual.
    • "Microsoft.Network/virtualNetworks/subnet/join/action" pada sumber daya subnet.

    Untuk informasi selengkapnya tentang Azure RBAC dengan pembuatan jaringan, lihat Peran bawaan jaringan

Penting

Beberapa perintah CLI Azure dalam artikel ini menggunakan ekstensi azure-cli-ml, atau v1, untuk Azure Machine Learning. Dukungan untuk ekstensi v1 akan berakhir pada 30 September 2025. Anda dapat memasang dan menggunakan ekstensi v1 hingga tanggal tersebut.

Kami menyarankan agar Anda beralih ke ekstensi ml, atau v2 sebelum 30 September 2025. Untuk informasi selengkapnya mengenai ekstensi v2, lihat Ekstensi Azure ML CLI dan Python SDK v2.

Pembatasan

Azure Container Instances

Saat ruang kerja Azure Machine Learning Anda dikonfigurasi dengan titik akhir privat, penyebaran ke Azure Container Instances di VNet tidak didukung. Sebagai gantinya, pertimbangkan untuk menggunakan Titik akhir online terkelola dengan isolasi jaringan.

Azure Kubernetes Service

  • Jika kluster AKS Anda berada di belakang VNET, ruang kerja Anda dan sumber daya terkait (penyimpanan, brankas kunci, Azure Container Registry) harus memiliki titik akhir privat atau titik akhir layanan di VNET yang sama dengan VNET kluster AKS. Silakan baca tutorial membuat ruang kerja yang aman untuk menambahkan titik akhir privat atau titik akhir layanan tersebut ke VNET Anda.
  • Jika ruang kerja Anda memiliki titik akhir privat, kluster Azure Kubernetes Service harus berada di wilayah Azure yang sama dengan ruang kerja.
  • Menggunakan nama domain publik yang memenuhi syarat (FQDN) dengan kluster AKS privat tidak didukung dengan Azure Machine Learning.

Azure Kubernetes Service

Penting

Untuk menggunakan kluster AKS di jaringan virtual, pertama-tama ikuti prasyarat di Mengonfigurasi jaringan lanjutan di Azure Kubernetes Service (AKS).

Untuk menambahkan AKS di jaringan virtual ke ruang kerja Anda, gunakan langkah-langkah berikut:

  1. Masuk ke Studio Azure Machine Learning, lalu pilih langganan dan ruang kerja Anda.

  2. Pilih Komputasi di sebelah kiri, Kluster inferensi dari tengah, lalu pilih + Baru. Terakhir, pilih AksCompute.

    Screenshot of create inference cluster dialog.

  3. Dari dialog Buat AksCompute, pilih Buat baru, Lokasi, dan ukuran VM yang akan digunakan untuk kluster. Terakhir, pilih Berikutnya.

    Screenshot of VM settings.

  4. Dari bagian Pengaturan Konfigurasi, masukkan Nama komputasi, pilih Tujuan Kluster, Jumlah simpul, lalu pilih Tingkat Lanjut untuk menampilkan pengaturan jaringan. Di area Konfigurasi jaringan virtual, atur nilai berikut ini:

    • Atur Jaringan virtual yang akan digunakan.

      Tip

      Jika ruang kerja Anda menggunakan titik akhir privat untuk tersambung ke jaringan virtual, bidang pemilihan Jaringan virtual berwarna abu-abu.

    • Atur Subnet untuk membuat kluster.

    • Di bidang Rentang alamat Layanan Kube, masukkan rentang alamat layanan Kube. Rentang alamat ini menggunakan rentang IP notasi Classless Inter-Domain Routing (CIDR) untuk menentukan alamat IP yang tersedia untuk kluster. Rentang ini tidak boleh tumpang tindih dengan rentang IP subnet apa pun (misalnya, 10.0.0.0/16).

    • Di bidang alamat IP layanan DNS Kube, masukkan alamat IP layanan DNS Kube. Alamat IP ini ditetapkan ke layanan DNS Kube. Alamat ini harus berada dalam rentang alamat layanan Kube (misalnya, 10.0.0.10).

    • Di bidang Alamat penghubung Docker, masukkan alamat penghubung Docker. Alamat IP ini ditetapkan ke Docker Bridge. Alamat tidak boleh berada dalam rentang IP subnet, atau rentang alamat layanan Kube (misalnya, 172.18.0.1/16).

    Screenshot of configure network settings.

  5. Saat Anda menyebarkan model sebagai layanan web ke AKS, titik akhir penilaian dibuat untuk menangani permintaan inferensi. Pastikan bahwa kelompok keamanan jaringan (NSG) yang mengontrol jaringan virtual memiliki aturan keamanan masuk yang diaktifkan untuk alamat IP titik akhir penilaian jika Anda ingin memanggilnya dari luar jaringan virtual.

    Untuk menemukan alamat IP dari titik akhir penilaian, lihat URI penilaian untuk layanan yang disebarkan. Untuk informasi tentang menampilkan URI penilaian, lihat Memakai model yang disebarkan sebagai layanan web.

    Penting

    Pertahankan aturan keluar default untuk NSG. Untuk informasi selengkapnya, lihat aturan keamanan default di Kelompok keamanan.

    Screenshot that shows an inbound security rule.

    Penting

    Alamat IP yang ditunjukkan pada gambar untuk titik akhir penilaian akan berbeda untuk penyebaran Anda. Sementara IP yang sama dibagikan oleh semua penyebaran ke satu kluster AKS, setiap kluster AKS akan memiliki alamat IP yang berbeda.

Anda juga dapat menggunakan kit pengembangan perangkat lunak Pembelajaran Mesin Microsoft Azure untuk menambahkan Azure Kubernetes Service dalam jaringan virtual. Jika Anda sudah memiliki kluster AKS di jaringan virtual, lampirkan ke ruang kerja seperti yang dijelaskan dalam Cara menyebarkan ke AKS. Kode berikut membuat instans AKS baru di subnet default jaringan virtual bernama mynetwork:

BERLAKU UNTUK:SDK Python azureml v1

from azureml.core.compute import ComputeTarget, AksCompute

# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"

# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
                                  name="myaks",
                                  provisioning_configuration=config)

Ketika proses pembuatan selesai, Anda dapat menjalankan inferensi, atau penilaian model, pada kluster AKS di belakang jaringan virtual. Untuk informasi selengkapnya, lihat Cara menyebarkan AKS.

Untuk informasi lebih lanjut tentang menggunakan Kontrol Akses Berbasis Peran dengan Kube, lihat Menggunakan Azure RBAC untuk otorisasi Kube.

Peran kontributor jaringan

Penting

Jika Anda membuat atau melampirkan klaster AKS dengan menyediakan jaringan virtual yang sebelumnya Anda buat, Anda harus memberikan peran Kontributor Jaringanbagi perwakilan layanan (SP) atau identitas terkelola untuk kluster AKS Anda ke grup sumber daya yang berisi jaringan virtual.

Untuk menambahkan identitas sebagai kontributor jaringan, gunakan langkah-langkah berikut:

  1. Untuk menemukan perwakilan layanan atau ID identitas terkelola untuk AKS, gunakan perintah CLI Azure berikut ini. Ganti <aks-cluster-name> dengan nama kluster. Ganti <resource-group-name> dengan nama grup sumber daya yang berisi kluster AKS:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
    

    Jika perintah ini mengembalikan nilai msi, gunakan perintah berikut untuk mengidentifikasi ID utama untuk identitas terkelola:

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. Untuk menemukan ID grup sumber daya yang berisi jaringan virtual Anda, gunakan perintah berikut. Ganti <resource-group-name> dengan nama grup sumber daya yang berisi jaringan virtual:

    az group show -n <resource-group-name> --query id
    
  3. Untuk menambahkan perwakilan layanan atau identitas terkelola sebagai kontributor jaringan, gunakan perintah berikut. Ganti <SP-or-managed-identity> dengan ID yang dikembalikan untuk perwakilan layanan atau identitas terkelola. Ganti <resource-group-id> dengan ID yang dikembalikan untuk grup sumber daya yang berisi jaringan virtual:

    az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
    

Untuk informasi lebih lanjut tentang penggunaan penyeimbang beban internal dengan AKS, lihat Menggunakan penyeimbang muatan internal dengan Azure Kubernetes Service.

Mengamankan lalu lintas VNet

Ada dua pendekatan yang dapat digunakan untuk mengisolasi lalu lintas ke dan dari kluster AKS ke jaringan virtual:

  • Kluster AKS privat: Pendekatan ini menggunakan Azure Private Link untuk mengamankan komunikasi dengan kluster untuk operasi penyebaran/manajemen.
  • Penyeimbang muatan AKS Internal: Pendekatan ini mengonfigurasi titik akhir untuk penyebaran Anda ke AKS untuk menggunakan IP privat dalam jaringan virtual.

Kluster AKS privat

Secara default, kluster AKS memiliki sarana kontrol, atau server API, dengan alamat IP publik. Anda dapat mengonfigurasi AKS untuk menggunakan sarana kontrol pribadi dengan membuat kluster AKS privat. Selengkapnya, lihat Membuat kluster Azure Kubernetes Service privat.

Setelah Anda membuat kluster AKS privat, lampirkan kluster ke jaringan virtual untuk digunakan dengan Pembelajaran Mesin Microsoft Azure.

Penyeimbang muatan AKS internal

Secara default, penyebaran AKS menggunakan penyeimbang muatan publik. Di bagian ini, Anda mempelajari cara mengonfigurasi AKS untuk menggunakan penyeimbang muatan internal. Load bancer internal (atau privat) digunakan saat IP privat hanya diperlukan di frontend. Penyeimbang muatan internal digunakan untuk memuat lalu lintas keseimbangan di dalam jaringan virtual

Penyeimbang muatan privat diaktifkan dengan mengonfigurasi AKS untuk menggunakan penyeimbang muatan internal.

Aktifkan penyeimbang muatan privat

Penting

Anda tidak dapat mengaktifkan IP privat saat membuat kluster Azure Kubernetes Service di studio Pembelajaran Mesin Microsoft Azure. Anda dapat membuatnya dengan penyeimbang muatan internal saat menggunakan ekstensi Python SDK atau Azure CLI untuk pembelajaran mesin.

Contoh berikut mempraktikkan cara membuat kluster AKS baru dengan IP privat/penyeimbang muatan internal menggunakan SDK dan CLI:

BERLAKU UNTUK:SDK Python azureml v1

import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget

# Verify that cluster does not exist already
try:
    aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
    print("Found existing aks cluster")

except:
    print("Creating new aks cluster")

    # Subnet to use for AKS
    subnet_name = "default"
    # Create AKS configuration
    prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
    # Set info for existing virtual network to create the cluster in
    prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
    prov_config.vnet_name = "myvnetname"
    prov_config.service_cidr = "10.0.0.0/16"
    prov_config.dns_service_ip = "10.0.0.10"
    prov_config.subnet_name = subnet_name
    prov_config.load_balancer_subnet = subnet_name
    prov_config.docker_bridge_cidr = "172.17.0.1/16"

    # Create compute target
    aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
    # Wait for the operation to complete
    aks_target.wait_for_completion(show_output = True)

Saat melampirkan kluster yang ada ke ruang kerja Anda, gunakan parameter load_balancer_type dan load_balancer_subnet dari AksCompute.attach_configuration() untuk mengonfigurasi penyeimbang beban.

Untuk informasi tentang melampirkan kluster, lihat Melampirkan kluster AKS yang sudah ada.

Membatasi konektivitas keluar dari jaringan virtual

Jika Anda tidak ingin menggunakan aturan keluar default dan Anda ingin membatasi akses keluar jaringan virtual Anda, Anda harus mengizinkan akses ke Azure Container Registry. Misalnya, pastikan Kelompok Keamanan Jaringan (NSG) Anda berisi aturan yang mengizinkan akses ke tag layanan AzureContainerRegistry.RegionName di mana '{RegionName} adalah nama wilayah Azure.

Langkah berikutnya

Artikel ini adalah bagian dari seri tentang mengamankan alur kerja Azure Machine Learning. Lihat artikel lain dalam seri ini: