Konfigurera autentisering för modeller som distribueras som webbtjänster
GÄLLER FÖR: Python SDK azureml v1
Med Azure Machine Learning 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 Machine Learning 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 Machine Learning-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=True
nä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 Machine Learning 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 Machine Learning-arbetsyta i samma region som ditt Azure Kubernetes Service-kluster.
För att autentisera med en token gör webbtjänsten ett anrop till den region där din Azure Machine Learning-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.