Mengonfigurasikan autentikasi untuk model yang disebarkan sebagai layanan web

BERLAKU UNTUK:SDK Python azureml v1

Azure Machine Learning memungkinkan Anda menyebarkan model pembelajaran mesin terlatih Anda sebagai layanan web. Dalam artikel ini, pelajari cara mengonfigurasikan autentikasi untuk penyebaran ini.

Penyebaran model yang dibuat oleh Azure Machine Learning dapat dikonfigurasikan untuk menggunakan salah satu dari dua metode autentikasi:

  • berbasis kunci: Kunci statis digunakan untuk mengautentikasi ke layanan web.

  • berbasis token: Token sementara harus diperoleh dari ruang kerja Azure Pembelajaran Mesin (menggunakan ID Microsoft Entra) dan digunakan untuk mengautentikasi ke layanan web. Token ini kedaluwarsa setelah jangka waktu tertentu, dan harus direfresh agar dapat terus berfungsi dengan layanan web.

    Catatan

    Autentikasi berbasis token hanya tersedia saat menyebarkan ke Azure Kubernetes Service.

Autentikasi berbasis kunci

Layanan web yang disebarkan pada Azure Kubernetes Service (AKS) memiliki autentikasi berbasis kunci yang diaktifkan secara default.

Layanan yang disebarkan Azure Container Instances (ACI) memiliki autentikasi berbasis kunci yang dinonaktifkan secara default, tetapi Anda dapat mengaktifkannya dengan mengatur auth_enabled=Truesaat membuat layanan web ACI. Kode berikut adalah contoh pembuatan konfigurasi penyebaran ACI dengan autentikasi berbasis kunci diaktifkan.

from azureml.core.webservice import AciWebservice

aci_config = AciWebservice.deploy_configuration(cpu_cores = 1,
                                                memory_gb = 1,
                                                auth_enabled=True)

Kemudian, Anda dapat menggunakan konfigurasi ACI kustom dalam penyebaran menggunakan kelas Model.

from azureml.core.model import Model, InferenceConfig


inference_config = InferenceConfig(entry_script="score.py",
                                   environment=myenv)
aci_service = Model.deploy(workspace=ws,
                       name="aci_service_sample",
                       models=[model],
                       inference_config=inference_config,
                       deployment_config=aci_config)
aci_service.wait_for_deployment(True)

Untuk mengambil kunci autentikasi, gunakan aci_service.get_keys(). Untuk meregenerasi kunci, gunakan fungsi regen_key() dan sandi Primer atau Sekunder.

aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")

Autentikasi berbasis token

Saat Anda mengaktifkan autentikasi token untuk layanan web, pengguna harus menunjukkan JSON Web Token Azure Machine Learning ke layanan web untuk mengaksesnya. Masa berlaku token akan berakhir setelah jangka waktu yang ditentukan dan perlu disegarkan untuk tetap melakukan panggilan.

  • Autentikasi token diaktifkan secara default saat Anda menyebarkan ke Azure Kubernetes Service.
  • Autentikasi token tidak didukung saat Anda menyebarkan ke Azure Container Instances.
  • Autentikasi token tidak dapat digunakan bersamaan dengan autentikasi berbasis kunci.

Untuk mengontrol autentikasi token, gunakan parameter token_auth_enabled saat Anda membuat atau memperbarui penyebaran:

from azureml.core.webservice import AksWebservice
from azureml.core.model import Model, InferenceConfig

# Create the config
aks_config = AksWebservice.deploy_configuration()

#  Enable token auth and disable (key) auth on the webservice
aks_config = AksWebservice.deploy_configuration(token_auth_enabled=True, auth_enabled=False)

aks_service_name ='aks-service-1'

# deploy the model
aks_service = Model.deploy(workspace=ws,
                           name=aks_service_name,
                           models=[model],
                           inference_config=inference_config,
                           deployment_config=aks_config,
                           deployment_target=aks_target)

aks_service.wait_for_deployment(show_output = True)

Jika autentikasi token diaktifkan, Anda dapat menggunakan metode get_token untuk mengambil JSON Web Token (JWT) dan waktu kedaluwarsa token tersebut:

Tip

Jika Anda menggunakan perwakilan layanan untuk mendapatkan token, dan ingin memiliki akses minimum yang diperlukan untuk mengambil token, tetapkan ke peran pembaca untuk ruang kerja.

token, refresh_by = aks_service.get_token()
print(token)

Penting

Anda harus meminta token baru setelah waktu refresh_by token. Jika Anda perlu merefresh token di luar Python SDK, salah satu opsinya adalah menggunakan REST API dengan autentikasi perwakilan layanan untuk melakukan panggilan service.get_token() secara berkala, seperti yang dibahas sebelumnya.

Sangat disarankan untuk membuat ruang kerja Azure Machine Learning di wilayah yang sama dengan kluster Azure Kubernetes Service Anda.

Untuk mengautentikasi dengan token, layanan web akan melakukan panggilan ke wilayah tempat ruang kerja Azure Machine Learning Anda dibuat. Jika wilayah ruang kerja Anda tidak tersedia, Anda tidak akan dapat mengambil token untuk layanan web Anda, sekalipun kluster Anda berada di wilayah yang berbeda dengan ruang kerja Anda. Hasilnya adalah bahwa autentikasi Microsoft Entra tidak tersedia sampai wilayah ruang kerja Anda tersedia lagi.

Selain itu, semakin jauh jarak antara wilayah kluster Anda dengan wilayah ruang kerja Anda, semakin lama waktu yang diperlukan untuk mengambil token.

Langkah berikutnya

Untuk informasi selengkapnya tentang cara mengautentikasi ke model yang disebarkan, lihat Membuat klien untuk model yang disebarkan sebagai layanan web.