Konfigurowanie uwierzytelniania dla modeli wdrożonych jako usługi sieci Web
DOTYCZY: Zestaw SDK języka Python w wersji 1
Usługa Azure Machine Learning umożliwia wdrażanie wytrenowanych modeli uczenia maszynowego jako usług internetowych. Z tego artykułu dowiesz się, jak skonfigurować uwierzytelnianie dla tych wdrożeń.
Wdrożenia modelu utworzone przez usługę Azure Machine Learning można skonfigurować tak, aby korzystały z jednej z dwóch metod uwierzytelniania:
oparte na kluczach: klucz statyczny służy do uwierzytelniania w usłudze internetowej.
oparte na tokenach: token tymczasowy należy uzyskać z obszaru roboczego usługi Azure Machine Learning (przy użyciu identyfikatora Entra firmy Microsoft) i używanego do uwierzytelniania w usłudze internetowej. Ten token wygasa po upływie określonego czasu i musi zostać odświeżony, aby kontynuować pracę z usługą internetową.
Uwaga
Uwierzytelnianie oparte na tokenach jest dostępne tylko podczas wdrażania w usłudze Azure Kubernetes Service.
Uwierzytelnianie oparte na kluczach
Usługi internetowe wdrożone w usłudze Azure Kubernetes Service (AKS) mają domyślnie włączone uwierzytelnianie oparte na kluczach.
Wdrożone usługi Azure Container Instances (ACI) mają domyślnie wyłączone uwierzytelnianie oparte na kluczach, ale można je włączyć, ustawiając ustawienie auth_enabled=True
podczas tworzenia usługi internetowej ACI. Poniższy kod to przykład tworzenia konfiguracji wdrożenia usługi ACI z włączonym uwierzytelnianiem opartym na kluczach.
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(cpu_cores = 1,
memory_gb = 1,
auth_enabled=True)
Następnie możesz użyć niestandardowej konfiguracji ACI we wdrożeniu Model
przy użyciu klasy .
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)
Aby pobrać klucze uwierzytelniania, użyj polecenia aci_service.get_keys()
. Aby ponownie wygenerować klucz, użyj regen_key()
funkcji i przekaż wartość Podstawowa lub Pomocnicza.
aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")
Uwierzytelnianie oparte na tokenach
Po włączeniu uwierzytelniania tokenu dla usługi internetowej użytkownicy muszą przedstawić token internetowy JSON usługi Azure Machine Learning do usługi internetowej, aby uzyskać do niej dostęp. Token wygasa po określonym czasie i musi zostać odświeżony w celu dalszego wykonywania wywołań.
- Uwierzytelnianie tokenu jest domyślnie wyłączone podczas wdrażania w usłudze Azure Kubernetes Service.
- Uwierzytelnianie tokenu nie jest obsługiwane podczas wdrażania w usłudze Azure Container Instances.
- Uwierzytelnianie tokenu nie może być używane w tym samym czasie co uwierzytelnianie oparte na kluczach.
Aby kontrolować uwierzytelnianie tokenu, użyj parametru token_auth_enabled
podczas tworzenia lub aktualizowania wdrożenia:
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)
Jeśli włączono uwierzytelnianie tokenu, możesz użyć get_token
metody w celu pobrania tokenu internetowego JSON (JWT) i czasu wygaśnięcia tego tokenu:
Napiwek
Jeśli używasz jednostki usługi do pobrania tokenu i chcesz, aby miał minimalny wymagany dostęp do pobrania tokenu, przypisz go do roli czytelnika dla obszaru roboczego.
token, refresh_by = aks_service.get_token()
print(token)
Ważne
Będzie konieczne zażądanie nowego tokenu po upłynięciu czasu odświeżania refresh_by
tokenu. Jeśli musisz odświeżyć tokeny spoza zestawu SDK języka Python, jedną z opcji jest użycie interfejsu API REST z uwierzytelnianiem jednostki usługi, aby okresowo wykonywać service.get_token()
wywołanie, zgodnie z wcześniejszym opisem.
Zdecydowanie zalecamy utworzenie obszaru roboczego usługi Azure Machine Learning w tym samym regionie co klaster usługi Azure Kubernetes Service.
Aby uwierzytelnić się przy użyciu tokenu, usługa internetowa wykona wywołanie regionu, w którym jest tworzony obszar roboczy usługi Azure Machine Learning. Jeśli region obszaru roboczego jest niedostępny, nie będzie można pobrać tokenu dla usługi internetowej, nawet jeśli klaster znajduje się w innym regionie niż obszar roboczy. Wynikiem jest to, że uwierzytelnianie Firmy Microsoft Entra jest niedostępne do momentu ponownego udostępnienia regionu obszaru roboczego.
Ponadto im większa odległość między regionem klastra a regionem obszaru roboczego, tym dłużej będzie trzeba pobrać token.
Następne kroki
Aby uzyskać więcej informacji na temat uwierzytelniania w wdrożonym modelu, zobacz Tworzenie klienta dla modelu wdrożonego jako usługa internetowa.