Delen via


Verificatie configureren voor modellen die zijn geïmplementeerd als webservices

VAN TOEPASSING OP: Python SDK azureml v1

Met Azure Machine Learning kunt u uw getrainde machine learning-modellen implementeren als webservices. In dit artikel leert u hoe u verificatie voor deze implementaties configureert.

De modelimplementaties die door Azure Machine Learning zijn gemaakt, kunnen worden geconfigureerd voor het gebruik van een van de twee verificatiemethoden:

  • op basis van een sleutel: er wordt een statische sleutel gebruikt om te verifiëren bij de webservice.

  • op tokens gebaseerd: een tijdelijk token moet worden verkregen uit de Azure Machine Learning-werkruimte (met behulp van Microsoft Entra-id) en wordt gebruikt voor verificatie bij de webservice. Dit token verloopt na een bepaalde periode en moet worden vernieuwd om met de webservice te kunnen blijven werken.

    Notitie

    Verificatie op basis van tokens is alleen beschikbaar bij de implementatie in Azure Kubernetes Service.

Verificatie op basis van sleutels

Webservices die zijn geïmplementeerd in Azure Kubernetes Service (AKS), hebben standaard verificatie op basis van sleutels ingeschakeld .

Azure Container Instances (ACI) geïmplementeerde services hebben standaard verificatie op basis van sleutels uitgeschakeld , maar u kunt deze inschakelen door deze in te stellen auth_enabled=Truebij het maken van de ACI-webservice. De volgende code is een voorbeeld van het maken van een ACI-implementatieconfiguratie waarbij verificatie op basis van sleutels is ingeschakeld.

from azureml.core.webservice import AciWebservice

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

Vervolgens kunt u de aangepaste ACI-configuratie in de implementatie gebruiken met behulp van de Model klasse.

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)

Als u de verificatiesleutels wilt ophalen, gebruikt u aci_service.get_keys(). Als u een sleutel opnieuw wilt genereren, gebruikt u de regen_key() functie en geeft u deze door.

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

Verificatie op basis van tokens

Wanneer u tokenverificatie inschakelt voor een webservice, moeten gebruikers een Azure Machine Learning JSON-webtoken aan de webservice presenteren om er toegang toe te krijgen. Het token verloopt na bepaalde tijd, en moet worden vernieuwd om aanroepen te kunnen blijven doen.

  • Tokenverificatie is standaard uitgeschakeld wanneer u implementeert in Azure Kubernetes Service.
  • Tokenverificatie wordt niet ondersteund wanneer u implementeert in Azure Container Instances.
  • Tokenverificatie kan niet tegelijkertijd worden gebruikt als verificatie op basis van sleutels.

Als u tokenverificatie wilt beheren, gebruikt u de token_auth_enabled parameter wanneer u een implementatie maakt of bijwerkt:

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)

Als tokenverificatie is ingeschakeld, kunt u de get_token methode gebruiken om een JSON-webtoken (JWT) en de verlooptijd van dat token op te halen:

Tip

Als u een service-principal gebruikt om het token op te halen en wilt dat het de minimaal vereiste toegang heeft om een token op te halen, wijst u het toe aan de rol lezer voor de werkruimte.

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

Belangrijk

U moet een nieuw token aanvragen nadat de refresh_by-tijd van het token is verstreken. Als u tokens buiten de Python SDK moet vernieuwen, kunt u de REST API gebruiken met service-principal-verificatie om de service.get_token() aanroep periodiek uit te voeren, zoals eerder is besproken.

We raden u ten zeerste aan om uw Azure Machine Learning-werkruimte te maken in dezelfde regio als uw Azure Kubernetes Service-cluster.

Als u wilt verifiëren met een token, roept de webservice de regio aan waarin uw Azure Machine Learning-werkruimte wordt gemaakt. Als uw werkruimteregio niet beschikbaar is, kunt u geen token ophalen voor uw webservice, zelfs niet als uw cluster zich in een andere regio bevindt dan uw werkruimte. Het resultaat is dat Microsoft Entra-verificatie niet beschikbaar is totdat uw werkruimteregio opnieuw beschikbaar is.

Hoe groter de afstand tussen de regio van uw cluster en uw werkruimteregio, hoe langer het duurt om een token op te halen.

Volgende stappen

Zie Een client maken voor een model dat is geïmplementeerd als webservice voor meer informatie over het verifiëren van een geïmplementeerd model.