Dela via


Konfigurera autentisering för modeller som distribueras som webbtjänster

GÄLLER FÖR: Python SDK azureml v1

Med Azure Mašinsko učenje kan du distribuera dina tränade maskininlärningsmodeller som webbtjänster. I den här artikeln lär du dig hur du konfigurerar autentisering för dessa distributioner.

Modelldistributionerna som skapats av Azure Mašinsko učenje kan konfigureras för att använda någon av två autentiseringsmetoder:

  • nyckelbaserad: En statisk nyckel används för att autentisera till webbtjänsten.

  • tokenbaserad: En tillfällig token måste hämtas från Azure Mašinsko učenje-arbetsytan (med Microsoft Entra-ID) och användas för att autentisera till webbtjänsten. Den här token upphör att gälla efter en tidsperiod och måste uppdateras för att fortsätta arbeta med webbtjänsten.

    Kommentar

    Tokenbaserad autentisering är endast tillgänglig när du distribuerar till Azure Kubernetes Service.

Nyckelbaserad autentisering

Webbtjänster som distribueras i Azure Kubernetes Service (AKS) har nyckelbaserad autentisering aktiverad som standard.

Azure Container Instances -distribuerade tjänster (ACI) har nyckelbaserad autentisering inaktiverad som standard, men du kan aktivera den genom att ange auth_enabled=Truenär du skapar ACI-webbtjänsten. Följande kod är ett exempel på hur du skapar en ACI-distributionskonfiguration med nyckelbaserad autentisering aktiverad.

from azureml.core.webservice import AciWebservice

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

Sedan kan du använda den anpassade ACI-konfigurationen i distributionen Model med hjälp av klassen .

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)

Om du vill hämta autentiseringsnycklarna använder du aci_service.get_keys(). Om du vill återskapa en nyckel använder du regen_key() funktionen och skickar antingen primär eller sekundär.

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

Tokenbaserad autentisering

När du aktiverar tokenautentisering för en webbtjänst måste användarna presentera en Azure Mašinsko učenje JSON-webbtoken för webbtjänsten för att få åtkomst till den. Token upphör att gälla efter en angiven tidsperiod och måste uppdateras för att anrop ska fortsätta att skickas.

  • Tokenautentisering inaktiveras som standard när du distribuerar till Azure Kubernetes Service.
  • Tokenautentisering stöds inte när du distribuerar till Azure Container Instances.
  • Tokenautentisering kan inte användas samtidigt som nyckelbaserad autentisering.

Om du vill styra tokenautentisering använder du parametern token_auth_enabled när du skapar eller uppdaterar en distribution:

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)

Om tokenautentisering är aktiverat kan du använda get_token metoden för att hämta en JSON-webbtoken (JWT) och den tokens förfallotid:

Dricks

Om du använder ett huvudnamn för tjänsten för att hämta token och vill att den ska ha den lägsta åtkomst som krävs för att hämta en token tilldelar du den till läsarrollen för arbetsytan.

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

Viktigt!

Du behöver begära en ny token efter tokens refresh_by-tid. Om du behöver uppdatera token utanför Python SDK är ett alternativ att använda REST-API:et med autentisering med tjänstens huvudnamn för att regelbundet göra anropet, enligt beskrivningen service.get_token() tidigare.

Vi rekommenderar starkt att du skapar din Azure Mašinsko učenje-arbetsyta i samma region som ditt Azure Kubernetes Service-kluster.

Om du vill autentisera med en token gör webbtjänsten ett anrop till den region där din Azure-Mašinsko učenje-arbetsyta skapas. Om din arbetsyteregion inte är tillgänglig kan du inte hämta en token för webbtjänsten, även om klustret finns i en annan region än din arbetsyta. Resultatet är att Microsoft Entra-autentisering inte är tillgänglig förrän din arbetsyteregion är tillgänglig igen.

Ju större avståndet mellan klustrets region och arbetsytans region är, desto längre tid tar det att hämta en token.

Nästa steg

Mer information om autentisering till en distribuerad modell finns i Skapa en klient för en modell som distribueras som en webbtjänst.