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.