Mengamankan titik akhir online terkelola Anda dengan isolasi jaringan

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Dalam artikel ini, Anda akan menggunakan isolasi jaringan untuk mengamankan titik akhir online terkelola. Anda akan membuat titik akhir online terkelola yang menggunakan titik akhir privat ruang kerja Azure Pembelajaran Mesin untuk komunikasi masuk yang aman. Anda juga akan mengonfigurasi ruang kerja dengan jaringan virtual terkelola yang hanya memungkinkan komunikasi keluar yang disetujui untuk penyebaran. Terakhir, Anda akan membuat penyebaran yang menggunakan titik akhir privat jaringan virtual terkelola ruang kerja untuk komunikasi keluar.

Untuk contoh yang menggunakan metode warisan untuk isolasi jaringan, lihat file penyebaran deploy-moe-vnet-legacy.sh (untuk penyebaran menggunakan model generik) dan deploy-moe-vnet-mlflow-legacy.sh (untuk penyebaran menggunakan model MLflow) di repositori GitHub azureml-examples.

Prasyarat

  • Untuk menggunakan Azure Machine Learning, Anda harus memiliki langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai. Coba versi gratis atau berbayar Azure Machine Learning sekarang.

  • Instal dan konfigurasikan Azure CLI dan ml ekstensi ke Azure CLI. Untuk informasi selengkapnya, lihat Menginstal, menyiapkan, dan menggunakan CLI (v2).

    Tip

    Jaringan virtual terkelola Azure Pembelajaran Mesin diperkenalkan pada 23 Mei 2023. Jika Anda memiliki versi ekstensi ml yang lebih lama, Anda mungkin perlu memperbaruinya agar contoh dalam artikel ini berfungsi. Untuk memperbarui ekstensi, gunakan perintah Azure CLI berikut:

    az extension update -n ml
    
  • Contoh CLI dalam artikel ini mengasumsikan bahwa Anda menggunakan shell Bash (atau kompatibel). Misalnya, dari sistem Linux atau Subsistem Windows untuk Linux.

  • Anda harus memiliki Grup Sumber Daya Azure tempat Anda (atau perwakilan layanan yang Anda gunakan) harus memiliki akses Contributor. Anda akan memiliki grup sumber daya seperti itu jika Anda telah mengonfigurasi ekstensi Anda ml .

  • Jika Anda ingin menggunakan identitas terkelola yang ditetapkan pengguna untuk membuat dan mengelola titik akhir online dan penyebaran online, identitas harus memiliki izin yang tepat. Untuk detail tentang izin yang diperlukan, lihat Menyiapkan autentikasi layanan. Misalnya, Anda perlu menetapkan izin RBAC yang tepat untuk Azure Key Vault pada identitas.

Migrasi dari metode isolasi jaringan warisan ke jaringan virtual terkelola

Jika Anda telah menggunakan metode warisan sebelumnya untuk isolasi jaringan titik akhir online terkelola, dan Anda ingin bermigrasi menggunakan jaringan virtual yang dikelola ruang kerja untuk mengamankan titik akhir Anda, ikuti langkah-langkah berikut:

  1. Hapus semua komputasi di ruang kerja Anda.
  2. Aktifkan jaringan virtual terkelola untuk ruang kerja Anda. Untuk informasi selengkapnya tentang cara mengonfigurasi jaringan terkelola untuk ruang kerja Anda, lihat Isolasi Jaringan Virtual Terkelola Ruang Kerja.
  3. Konfigurasikan titik akhir privat untuk komunikasi keluar ke sumber daya privat yang perlu diakses titik akhir online terkelola Anda. Sumber daya privat ini mencakup akun penyimpanan, Azure Key Vault, dan Azure Container Registry (ACR).
  4. (Opsional) Jika Anda mengintegrasikan dengan registri pengguna, konfigurasikan titik akhir privat untuk komunikasi keluar ke registri Anda, akun penyimpanannya, dan ACR-nya.

Batasan

  • Bendera v1_legacy_mode perlu dinonaktifkan (false) di ruang kerja Azure Machine Learning Anda. Jika bendera ini diaktifkan, Anda tidak dapat membuat titik akhir online terkelola. Untuk informasi selengkapnya, lihat Isolasi jaringan dengan API v2.

  • Jika ruang kerja Azure Machine Learning Anda memiliki titik akhir privat yang dibuat sebelum 24 Mei 2022, Anda harus membuat ulang titik akhir privat ruang kerja sebelum mengonfigurasi titik akhir online Anda untuk menggunakan titik akhir privat. Untuk informasi selengkapnya tentang membuat titik akhir privat untuk ruang kerja Anda, lihat Cara mengonfigurasi titik akhir privat untuk ruang kerja Azure Machine Learning.

    Tip

    Untuk mengonfirmasi kapan ruang kerja dibuat, Anda dapat memeriksa properti ruang kerja.

    Di Studio, buka bagian Directory + Subscription + Workspace (kanan atas Studio) dan pilih View all properties in Azure Portal. Pilih tampilan JSON dari kanan atas halaman "Gambaran Umum", lalu pilih versi API terbaru. Dari halaman ini, Anda dapat memeriksa nilai properties.creationTime.

    Atau, gunakan az ml workspace show dengan CLI, my_ml_client.workspace.get("my-workspace-name") dengan SDK, atau curl di ruang kerja dengan REST API.

  • Saat Anda menggunakan isolasi jaringan dengan titik akhir online, Anda dapat menggunakan sumber daya terkait ruang kerja (Azure Container Registry (ACR), Akun penyimpanan, Key Vault, dan Application Insights) dari grup sumber daya yang berbeda dari ruang kerja Anda. Namun, sumber daya ini harus termasuk dalam langganan dan penyewa yang sama dengan ruang kerja Anda.

Catatan

Isolasi jaringan yang dijelaskan dalam artikel ini berlaku untuk operasi data plane, yaitu operasi yang dihasilkan dari permintaan penilaian (atau penyajian model). Operasi sarana kontrol (seperti permintaan untuk membuat, memperbarui, menghapus, atau mengambil kunci autentikasi) dikirim ke Azure Resource Manager melalui jaringan publik.

Siapkan sistem Anda

  1. Buat variabel lingkungan yang digunakan oleh contoh ini dengan menjalankan perintah berikut. Ganti <YOUR_WORKSPACE_NAME> dengan nama yang akan digunakan untuk ruang kerja Anda. Ganti <YOUR_RESOURCEGROUP_NAME> dengan grup sumber daya yang akan berisi ruang kerja Anda.

    Tip

    sebelum membuat ruang kerja baru, Anda harus membuat Grup Sumber Daya Azure untuk memuatnya. Untuk informasi selengkapnya, lihat Mengelola Grup Sumber Daya Azure.

    export RESOURCEGROUP_NAME="<YOUR_RESOURCEGROUP_NAME>"
    export WORKSPACE_NAME="<YOUR_WORKSPACE_NAME>"
    
  2. Buat ruang kerja Anda. Parameter -m allow_only_approved_outbound mengonfigurasi jaringan virtual terkelola untuk ruang kerja dan memblokir lalu lintas keluar kecuali ke tujuan yang disetujui.

    az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_only_approved_outbound
    

    Atau, jika Anda ingin mengizinkan penyebaran untuk mengirim lalu lintas keluar ke internet, batalkan komentar kode berikut dan jalankan sebagai gantinya.

    # az ml workspace create -g $RESOURCEGROUP_NAME -n $WORKSPACE_NAME -m allow_internet_outbound
    

    Untuk informasi selengkapnya tentang cara membuat ruang kerja baru atau meningkatkan ruang kerja yang ada untuk menggunakan jaringan virtual yang dirusak, lihat Mengonfigurasi jaringan virtual terkelola untuk memungkinkan internet keluar.

    Saat ruang kerja dikonfigurasi dengan titik akhir privat, Azure Container Registry untuk ruang kerja harus dikonfigurasi untuk tingkat Premium untuk mengizinkan akses melalui titik akhir privat. Untuk informasi selengkapnya, lihat Tingkat layanan Azure Container Registry. Selain itu, ruang kerja harus diatur dengan image_build_compute properti , karena pembuatan penyebaran melibatkan pembangunan gambar. Lihat Mengonfigurasi build gambar untuk informasi selengkapnya.

  3. Konfigurasikan default untuk CLI sehingga Anda dapat menghindari meneruskan nilai untuk ruang kerja dan grup sumber daya Anda beberapa kali.

    az configure --defaults workspace=$WORKSPACE_NAME group=$RESOURCEGROUP_NAME
    
  4. Kloning repositori contoh untuk mendapatkan file contoh untuk titik akhir dan penyebaran, lalu buka direktori repositori /cli .

    git clone --depth 1 https://github.com/Azure/azureml-examples
    cd /cli
    

Perintah dalam tutorial ini ada dalam file deploy-managed-online-endpoint-workspacevnet.sh di cli direktori, dan file konfigurasi YAML berada di endpoints/online/managed/sample/ subdirektori.

Buat titik akhir online terkelola yang aman

Untuk membuat titik akhir online terkelola yang aman, buat titik akhir di ruang kerja Anda dan atur titik public_network_access akhir ke untuk disabled mengontrol komunikasi masuk. Titik akhir kemudian harus menggunakan titik akhir privat ruang kerja untuk komunikasi masuk.

Karena ruang kerja dikonfigurasi untuk memiliki jaringan virtual terkelola, penyebaran titik akhir apa pun akan menggunakan titik akhir privat jaringan virtual terkelola untuk komunikasi keluar.

  1. Atur nama titik akhir.

    export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
    
  2. Buat titik akhir dengan public_network_access dinonaktifkan untuk memblokir lalu lintas masuk.

    az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml --set public_network_access=disabled
    

    Jika Anda menonaktifkan akses jaringan publik untuk titik akhir, satu-satunya cara untuk memanggil titik akhir adalah dengan menggunakan titik akhir privat, yang dapat mengakses ruang kerja, di jaringan virtual Anda. Untuk informasi selengkapnya, lihat mengamankan permintaan penilaian masuk dan mengonfigurasi titik akhir privat untuk ruang kerja Azure Pembelajaran Mesin.

    Atau, jika Anda ingin mengizinkan titik akhir untuk menerima permintaan penilaian dari internet, batalkan komentar kode berikut dan jalankan sebagai gantinya.

    # az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
    
  3. Buat penyebaran di jaringan virtual terkelola ruang kerja.

    az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
    
  4. Dapatkan status penyebaran.

    az ml online-endpoint show -n $ENDPOINT_NAME
    
  5. Uji titik akhir dengan permintaan penilaian, menggunakan CLI.

    az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
    
  6. Mendapatkan log penyebaran.

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    
  7. Hapus titik akhir jika Anda tidak lagi membutuhkannya.

    az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
    
  8. Hapus semua sumber daya yang dibuat dalam artikel ini. Ganti <resource-group-name> dengan nama grup sumber daya yang digunakan dalam contoh ini:

    az group delete --resource-group <resource-group-name>
    

Pemecahan Masalah

Pembuatan titik akhir online gagal dengan V1LegacyMode == pesan benar

Ruang kerja Azure Machine Learning bisa dikonfigurasi untuk v1_legacy_mode, yang akan menonaktifkan API v2. Titik akhir online terkelola merupakan fitur platform API v2, dan tidak akan berfungsi jika v1_legacy_mode diaktifkan untuk ruang kerja.

Penting

Tanyakan pada tim keamanan jaringan Anda sebelum menonaktifkan v1_legacy_mode. Hal ini mungkin telah diaktifkan oleh tim keamanan jaringan Anda karena suatu alasan.

Untuk informasi tentang cara menonaktifkan v1_legacy_mode, harap lihat Isolasi jaringan dengan v2.

Pembuatan titik akhir online dengan autentikasi berbasis kunci gagal

Gunakan perintah berikut untuk membuat daftar aturan jaringan Azure Key Vault untuk ruang kerja Anda. Ganti <keyvault-name> dengan nama brankas kunci Anda:

az keyvault network-rule list -n <keyvault-name>

Respons untuk perintah ini mirip dengan dokumen JSON berikut:

{
    "bypass": "AzureServices",
    "defaultAction": "Deny",
    "ipRules": [],
    "virtualNetworkRules": []
}

Jika nilai bypass bukan AzureServices, gunakan panduan di Konfigurasikan setelan jaringan brankas kunci untuk mengaturnya ke AzureServices.

Penyebaran online gagal dengan kesalahan pengunduhan gambar

Catatan

Masalah ini berlaku saat Anda menggunakan metode isolasi jaringan lama untuk titik akhir online terkelola, di mana Azure Pembelajaran Mesin membuat jaringan virtual terkelola untuk setiap penyebaran di bawah titik akhir.

  1. Periksa apakah bendera egress-public-network-accessdinonaktifkan untuk penyebaran. Jika bendera ini diaktifkan, dan visibilitas registri penampung bersifat pribadi, maka kegagalan ini diharapkan.

  2. Gunakan perintah berikut untuk memeriksa status koneksi titik akhir privat. Ganti <registry-name> dengan nama Azure Container Registry untuk ruang kerja Anda:

    az acr private-endpoint-connection list -r <registry-name> --query "[?privateLinkServiceConnectionState.description=='Egress for Microsoft.MachineLearningServices/workspaces/onlineEndpoints'].{Name:name, status:privateLinkServiceConnectionState.status}"
    

    Pada dokumen respons, verifikasi bahwa status bidang diatur ke Approved. Jika tidak disetujui, gunakan perintah berikut untuk menyetujuinya. Ganti <private-endpoint-name> dengan nama yang dikembalikan dari perintah sebelumnya:

    az network private-endpoint-connection approve -n <private-endpoint-name>
    

Titik akhir skor tidak dapat diselesaikan

  1. Verifikasi bahwa klien yang mengeluarkan permintaan penilaian adalah jaringan virtual yang dapat mengakses ruang kerja Azure Machine Learning.

  2. Gunakan perintah nslookup pada nama host titik akhir untuk mengambil informasi alamat IP:

    nslookup endpointname.westcentralus.inference.ml.azure.com
    

    Respons berisi alamat. Alamat ini harus dalam rentang yang disediakan oleh jaringan virtual

    Catatan

    Untuk titik akhir online Kubernetes, nama host titik akhir harus menjadi CName (nama domain) yang telah ditentukan di kluster Kubernetes Anda. Jika ini adalah titik akhir HTTP, alamat IP akan terkandung dalam URI titik akhir yang bisa Anda dapatkan langsung di Antarmuka Pengguna Studio. Lebih banyak cara untuk mendapatkan alamat IP titik akhir dapat ditemukan di titik akhir online Kubernetes Aman.

  3. Jika nama host tidak diselesaikan oleh nslookup perintah:

    Untuk Titik akhir online terkelola,

    1. Periksa apakah catatan A ada di zona DNS privat untuk jaringan virtual.

      Untuk memeriksa catatan, gunakan perintah berikut:

      az network private-dns record-set list -z privatelink.api.azureml.ms -o tsv --query [].name
      

      Hasil harus berisi entri yang mirip dengan *.<GUID>.inference.<region>.

    2. Jika tidak ada nilai inferensi yang dikembalikan, hapus titik akhir privat untuk ruang kerja, lalu buat ulang. Untuk informasi selengkapnya, lihat Cara mengonfigurasi titik akhir privat.

    3. Jika ruang kerja dengan titik akhir privat disiapkan menggunakan DNS kustom Cara menggunakan ruang kerja Anda dengan server DNS kustom, gunakan perintah berikut untuk memverifikasi apakah resolusi berfungsi dengan benar dari DNS kustom.

      dig endpointname.westcentralus.inference.ml.azure.com
      

    Untuk titik akhir online Kubernetes,

    1. Periksa konfigurasi DNS di kluster Kubernetes.

    2. Selain itu, Anda dapat memeriksa apakah azureml-fe berfungsi seperti yang diharapkan, gunakan perintah berikut:

      kubectl exec -it deploy/azureml-fe -- /bin/bash
      (Run in azureml-fe pod)
      
      curl -vi -k https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

      Untuk HTTP, gunakan

      curl https://localhost:<port>/api/v1/endpoint/<endpoint-name>/swagger.json
      "Swagger not found"
      

    Jika HTTP curl gagal (misalnya batas waktu) tetapi HTTP berfungsi, periksa apakah sertifikat valid.

    Jika ini gagal diselesaikan ke rekaman A, verifikasi apakah resolusi berfungsi dari Azure DNS(168.63.129.16).

    dig @168.63.129.16 endpointname.westcentralus.inference.ml.azure.com
    

    Jika ini berhasil, Anda dapat memecahkan masalah penerus bersyarat untuk tautan privat di DNS kustom.

Penyebaran online tidak dapat dinilai

  1. Gunakan perintah berikut untuk melihat apakah penyebaran berhasil disebarkan:

    az ml online-deployment show -e <endpointname> -n <deploymentname> --query '{name:name,state:provisioning_state}' 
    

    Jika penyebaran berhasil diselesaikan, nilai state akan menjadi Succeeded.

  2. Jika penyebaran berhasil, gunakan perintah berikut untuk memeriksa lalu lintas yang ditetapkan untuk penyebaran. Ganti <endpointname> dengan nama titik akhir Anda:

    az ml online-endpoint show -n <endpointname>  --query traffic
    

    Tip

    Langkah ini tidak diperlukan jika Anda menggunakan header azureml-model-deployment dalam permintaan Anda untuk menargetkan penyebaran ini.

    Respons dari perintah ini harus mencantumkan persentase lalu lintas yang ditetapkan untuk penyebaran.

  3. Jika penetapan lalu lintas (atau header penyebaran) diatur dengan benar, gunakan perintah berikut untuk mendapatkan log untuk titik akhir. Ganti <endpointname> dengan nama titik akhir, dan <deploymentname> dengan penyebaran:

    az ml online-deployment get-logs  -e <endpointname> -n <deploymentname> 
    

    Lihat log untuk melihat apakah ada masalah saat menjalankan kode penilaian saat Anda mengirimkan permintaan ke penyebaran.

Langkah berikutnya