Configurar a autenticação para modelos implantados como serviços Web
APLICA-SE A: Python SDK azureml v1
O Azure Machine Learning permite-lhe implementar os seus modelos de aprendizagem automática treinados como serviços Web. Neste artigo, saiba como configurar a autenticação para essas implantações.
As implantações de modelo criadas pelo Azure Machine Learning podem ser configuradas para usar um dos dois métodos de autenticação:
baseada em chave: uma chave estática é usada para autenticar no serviço Web.
baseado em token: um token temporário deve ser obtido do espaço de trabalho do Azure Machine Learning (usando a ID do Microsoft Entra) e usado para autenticar no serviço Web. Esse token expira após um período de tempo e deve ser atualizado para continuar trabalhando com o serviço Web.
Nota
A autenticação baseada em token só está disponível ao implantar no Serviço Kubernetes do Azure.
Autenticação baseada em chaves
Os serviços Web implantados no Serviço Kubernetes do Azure (AKS) têm autenticação baseada em chave habilitada por padrão.
Os serviços implantados das Instâncias de Contêiner do Azure (ACI) têm a autenticação baseada em chave desabilitada por padrão, mas você pode habilitá-la definindo auth_enabled=True
ao criar o serviço Web ACI. O código a seguir é um exemplo de criação de uma configuração de implantação ACI com autenticação baseada em chave habilitada.
from azureml.core.webservice import AciWebservice
aci_config = AciWebservice.deploy_configuration(cpu_cores = 1,
memory_gb = 1,
auth_enabled=True)
Em seguida, você pode usar a configuração ACI personalizada na implantação usando a Model
classe.
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)
Para buscar as chaves de autenticação, use aci_service.get_keys()
. Para regenerar uma chave, use a função e passe Primário regen_key()
ou Secundário.
aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")
Autenticação baseada em tokens
Quando você habilita a autenticação de token para um serviço Web, os usuários devem apresentar um Token Web JSON do Azure Machine Learning ao serviço Web para acessá-lo. O token expira após um prazo especificado e precisa de ser atualizado para continuar a fazer chamadas.
- A autenticação de token é desabilitada por padrão quando você implanta no Serviço Kubernetes do Azure.
- A autenticação de token não é suportada quando você implanta em Instâncias de Contêiner do Azure.
- A autenticação de token não pode ser usada ao mesmo tempo que a autenticação baseada em chave.
Para controlar a autenticação de token, use o token_auth_enabled
parâmetro ao criar ou atualizar uma implantação:
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)
Se a autenticação de token estiver habilitada, você poderá usar o get_token
método para recuperar um JSON Web Token (JWT) e o tempo de expiração desse token:
Gorjeta
Se você usar uma entidade de serviço para obter o token e quiser que ele tenha o acesso mínimo necessário para recuperar um token, atribua-o à função de leitor do espaço de trabalho.
token, refresh_by = aks_service.get_token()
print(token)
Importante
Precisará de pedir um novo token depois do prazo refresh_by
do token. Se você precisar atualizar tokens fora do SDK do Python, uma opção é usar a API REST com autenticação de entidade de serviço para fazer service.get_token()
a chamada periodicamente, conforme discutido anteriormente.
É altamente recomendável que você crie seu espaço de trabalho do Azure Machine Learning na mesma região do cluster do Serviço Kubernetes do Azure.
Para autenticar com um token, o serviço Web fará uma chamada para a região na qual seu espaço de trabalho do Azure Machine Learning é criado. Se a região do espaço de trabalho não estiver disponível, você não poderá buscar um token para o serviço Web, mesmo que o cluster esteja em uma região diferente do espaço de trabalho. O resultado é que a autenticação do Microsoft Entra não estará disponível até que a região do espaço de trabalho esteja disponível novamente.
Além disso, quanto maior a distância entre a região do cluster e a região do espaço de trabalho, mais tempo levará para buscar um token.
Próximos passos
Para obter mais informações sobre como autenticar em um modelo implantado, consulte Criar um cliente para um modelo implantado como um serviço Web.