Configurar a autenticação para modelos implantados como serviços Web
APLICA-SE A: SDK do Python azureml v1
O Azure Machine Learning permite que você implante seus modelos de aprendizado de máquina 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:
baseado em chave: uma chave estática é usada para autenticar o serviço Web.
baseado em token: um token temporário deve ser obtido no workspace Azure Machine Learning (usando Microsoft Entra ID) e usado para autenticar o serviço Web. Esse token expira após um período e deve ser atualizado para continuar trabalhando com o serviço Web.
Observação
A autenticação baseada em token só está disponível durante a implantação no Serviço Kubernetes do Azure.
Autenticação baseada em chave
Os serviços Web implantados no AKS (Serviço de Kubernetes do Azure) têm a autenticação baseada em chave habilitada por padrão.
Os serviços implantados nas ACI (Instâncias de Contêiner do Azure) têm a autenticação baseada em chave desabilitada por padrão, mas você pode habilitá-la configurando auth_enabled=True
ao criar o serviço Web na ACI. O código a seguir é um exemplo de como criar uma configuração de implantação nas ACI com a 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 personalizada das ACI na implantação usando a classe Model
.
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 chaves de autenticação, use aci_service.get_keys()
. Para regenerar uma chave, use a função regen_key()
e passe como Primária ou Secundária.
aci_service.regen_key("Primary")
# or
aci_service.regen_key("Secondary")
Autenticação baseada em token
Quando você habilita a autenticação de token para um serviço Web, os usuários precisam apresentar um Token Web JSON do Azure Machine Learning para o serviço Web para acessá-lo. O token expira após um período de tempo determinado e precisa ser atualizado para continuar fazendo chamadas.
- A autenticação de token é desabilitada por padrão quando é feita uma implantação no Serviço de Kubernetes do Azure.
- Não há suporte para a autenticação de token durante a implantação nas 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 do token, use o parâmetro token_auth_enabled
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 método get_token
para recuperar um JWT (Token Web JSON) e a hora da expiração do token:
Dica
Se você usar uma entidade de serviço para obter o token e quiser que ele tenha o mínimo de acesso necessário para recuperar um token, atribua-o à função leitor do workspace.
token, refresh_by = aks_service.get_token()
print(token)
Importante
Será necessário solicitar um novo token depois do período de refresh_by
do token. Se você precisar atualizar os tokens fora do SDK do Python, uma opção é usar a API REST com a autenticação de entidade de serviço para fazer a chamada service.get_token()
periodicamente, conforme discutido anteriormente.
É altamente recomendável criar seu workspace do Azure Machine Learning na mesma região que o cluster do Serviço de Kubernetes do Azure.
Para autenticar com um token, o serviço Web fará uma chamada para a região em que o workspace do Azure Machine Learning foi criado. Se a região do workspace não estiver disponível, não será possível buscar um token para o serviço Web, mesmo que o cluster esteja em uma região diferente do workspace. O resultado é que a autenticação do Microsoft Entra permanece indisponível até que a região do workspace volte a ficar disponível.
Além disso, quanto maior a distância entre a região do cluster e a região do workspace, mais tempo será necessário para buscar o token.
Próximas etapas
Para obter mais informações sobre como autenticar para um modelo implantado, consulte Criar um cliente para um modelo implantado como um serviço Web.