Configurar a autenticação para recursos e fluxos de trabalho do Azure Machine Learning

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)

Saiba como configurar a autenticação no workspace do Azure Machine Learning da CLI do Azure ou do SDK do Azure Machine Learning v2. A autenticação no seu espaço de trabalho do Azure Machine Learning é baseada no Microsoft Entra ID para a maioria das coisas. Em geral, há quatro fluxos de trabalho de autenticação que podem ser usados ao se conectar ao espaço de trabalho:

  • Interativo: você usa sua conta no Microsoft Entra ID para autenticar diretamente ou para obter um token que é usado para autenticação. A autenticação interativa é usada durante a experimentação e o desenvolvimento iterativo. A autenticação interativa permite controlar o acesso a recursos (como um serviço Web) por usuário.

  • Entidade de serviço: você cria uma conta de entidade de serviço no Microsoft Entra ID e a usa para autenticar ou obter um token. Uma entidade de serviço é usada quando você precisa de um processo automatizado para autenticar o serviço sem a necessidade de interação do usuário. Por exemplo, um script de implantação e integração contínua que treina e testa um modelo toda vez que o código de treinamento é alterado.

  • Sessão da CLI do Azure: você usa uma sessão ativa da CLI do Azure para se autenticar. A extensão da CLI do Azure para Machine Learning (a extensão ml ou a CLI v2) é uma ferramenta de linha de comando para trabalhar com o Azure Machine Learning. Você pode entrar no Azure pela CLI do Azure em sua estação de trabalho local, sem armazenar credenciais no código Python ou solicitar que o usuário se autentique. Da mesma forma, você pode reutilizar os mesmos scripts como parte de pipelines de implantação e integração contínuas, autenticando a CLI do Azure com uma identidade de entidade de serviço.

  • Identidade gerenciada: Ao usar o SDK v2 do Azure Machine Learning em uma instância de computação, ou em uma máquina virtual do Azurevocê pode usar uma identidade gerenciada para o Azure. Esse fluxo de trabalho permite que a VM se conecte ao espaço de trabalho usando a identidade gerenciada, sem armazenar credenciais no código Python ou solicitar que o usuário se autentique. Os cluster de cálculo do Azure Machine Learning também podem ser configurados para usar uma identidade gerenciada para acessar o espaço de trabalho ao treinar modelos.

Independentemente do fluxo de trabalho de autenticação usado, o controle de acesso baseado em função do Azure (RBAC do Azure) é usado para delimitar o nível de acesso (autorização) permitido aos recursos. Por exemplo, um administrador ou processo de automação pode ter acesso para criar uma instância de computação, mas não usá-la, enquanto um cientista de dados pode usá-la, mas não excluí-la ou criá-la. Para obter mais informações, consulte Gerenciar acesso a um espaço de trabalho do Azure Machine Learning.

O Acesso Condicional do Microsoft Entra pode ser usado para controlar ou restringir ainda mais o acesso ao espaço de trabalho para cada fluxo de trabalho de autenticação. Por exemplo, um administrador pode permitir o acesso ao espaço de trabalho somente para dispositivos gerenciados.

Pré-requisitos

ID do Microsoft Entra

Todos os fluxos de trabalho de autenticação para seu espaço de trabalho dependem do Microsoft Entra ID. Se você quiser que os usuários se autentiquem usando contas individuais, eles devem ter contas no Microsoft Entra ID. Se você quiser usar entidades de serviço, elas devem existir em seu Microsoft Entra ID. As identidades gerenciadas também são um recurso do Microsoft Entra ID.

Para obter mais informações sobre o Microsoft Entra ID, confira O que é a autenticação do Microsoft Entra.

Depois de criar as contas do Microsoft Entra, consulte Gerenciar o acesso ao espaço de trabalho do Azure Machine Learning para obter informações sobre como conceder a elas acesso ao espaço de trabalho e a outras operações no Azure Machine Learning.

Usar autenticação interativa

APLICA-SE A: SDK do Python azure-ai-ml v2 (atual)

A autenticação interativa usa o pacote de Identidade do Azure para Python. A maioria dos exemplos usa DefaultAzureCredential para acessar suas credenciais. Quando um token é necessário, ele solicita um usando várias identidades (EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) por sua vez, parando quando um fornece um token. Para obter mais informações, consulte a referência de classe DefaultAzureCredential.

Segue um exemplo do uso de DefaultAzureCredential para autenticar. Se a autenticação usando DefaultAzureCredential falhar, um fallback de autenticação por meio do navegador da Web será usado.

from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

try:
    credential = DefaultAzureCredential()
    # Check if given credential can get token successfully.
    credential.get_token("https://management.azure.com/.default")
except Exception as ex:
    # Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
    # This will open a browser page for
    credential = InteractiveBrowserCredential()

Depois que o objeto de credencial tiver sido criado, a classe MLClient será usada para se conectar ao workspace. Por exemplo, o código a seguir usa o método from_config() para carregar informações de conexão:

from azure.ai.ml import MLClient
try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Configurar uma entidade de serviço

Para usar uma entidade de serviço (SP), você deve primeiro criar a SP. Em seguida, conceda-lhe acesso ao seu workspace. Como mencionado anteriormente, o controle de acesso baseado em função do Azure (RBAC do Azure) é usado para controlar o acesso, portanto, você também deve decidir qual acesso conceder à SP.

Importante

Ao usar uma entidade de serviço, conceda a ela o acesso mínimo necessário para a tarefa para a qual ela é usada. Por exemplo, você não concederá acesso a um proprietário de entidade de serviço ou colaborar se o uso for leitura do token de acesso para uma implantação da Web.

O motivo para conceder o acesso mínimo é que uma entidade de serviço usa uma senha para autenticar e a senha pode ser armazenada como parte de um script de automação. Se a senha for vazada, o acesso mínimo necessário para uma tarefa específica minimizará o uso mal-intencionado da SP.

A maneira mais fácil de criar uma SP e conceder acesso ao seu espaço de trabalho é usando a CLI do Azure. Para criar uma entidade de serviço e conceder acesso ao seu espaço de trabalho, use as seguintes etapas:

Observação

Você precisa ser um administrador na assinatura para executar as etapas a seguir.

  1. Autentique-se na assinatura do Azure:

    az login
    

    Se a CLI pode abrir seu navegador padrão, ela irá fazê-lo e carregar uma página de entrada. Caso contrário, você precisará abrir um navegador e seguir as instruções na linha de comando. As instruções envolvem a navegação para https://aka.ms/devicelogin e a inserção de um código de autorização.

    Se tiver várias assinaturas do Azure, você deve usar a assinatura que contém o az account set -s <subscription name or ID> comando para definir a assinatura. Para saber mais, confira Use multiple Azure subscriptions (Usar várias assinaturas do Azure).

    Para outros métodos de autenticação, confira Entrar com a CLI do Azure.

  2. Crie a entidade de serviço. No exemplo a seguir, uma SP chamada ml-auth é criada:

    az ad sp create-for-rbac --json-auth --name ml-auth --role Contributor --scopes /subscriptions/<subscription id>
    

    O parâmetro --json-auth está disponível nas versões da CLI do Azure >= 2.51.0. Versões anteriores a essa usam --sdk-auth.

    A saída será um JSON semelhante ao seguinte. Anote os campos clientId, clientSecret e tenantId, pois você precisará deles para outras etapas neste artigo.

    {
        "clientId": "your-client-id",
        "clientSecret": "your-client-secret",
        "subscriptionId": "your-sub-id",
        "tenantId": "your-tenant-id",
        "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
        "resourceManagerEndpointUrl": "https://management.azure.com",
        "activeDirectoryGraphResourceId": "https://graph.windows.net",
        "sqlManagementEndpointUrl": "https://management.core.windows.net:5555",
        "galleryEndpointUrl": "https://gallery.azure.com/",
        "managementEndpointUrl": "https://management.core.windows.net"
    }
    
  3. Recupere os detalhes da entidade de serviço usando o clientId valor retornado na etapa anterior:

    az ad sp show --id your-client-id
    

    O JSON a seguir é uma simplificação da saída do comando. Anote o campo objectId, pois você precisará do valor dele para a próxima etapa.

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Para conceder acesso ao espaço de trabalho e a outros recursos usados pelo Azure Machine Learning, use as informações nos seguintes artigos:

    Importante

    O acesso do proprietário permite que a entidade de serviço faça praticamente qualquer operação em seu espaço de trabalho. Ele é usado neste documento para demonstrar como conceder acesso; em um ambiente de produção, a Microsoft recomenda conceder à entidade de serviço o acesso mínimo necessário para executar a função pretendida. Para obter informações sobre como criar uma função personalizada com o acesso necessário para seu cenário, consulte Gerenciar o acesso ao espaço de trabalho do Azure Machine Learning.

Configurar uma identidade gerenciada

Importante

Só há suporte para identidade gerenciada quando o SDK do Azure Machine Learning é usado por meio de uma máquina virtual do Azure, um cluster de cálculo ou uma instância de computação do Azure Machine Learning.

Identidade gerenciada com uma VM

  1. Habilite uma identidade gerenciada atribuída pelo sistema para recursos do Azure na VM.

  2. No portal do Azure, selecione seu espaço de trabalho e selecione Controle de Acesso (IAM) .

  3. Selecione Adicionar, Adicionar Atribuição de Função para abrir a página Adicionar atribuição de função.

  4. Selecione a função que você deseja atribuir à identidade gerenciada. Por exemplo, Leitor. Para ver as etapas detalhadas, confira Atribuir funções do Azure usando o portal do Azure.

Identidade gerenciada com cluster de cálculo

Para obter mais informações, consulte Configurar a identidade gerenciada para cluster de cálculo.

Identidade gerenciada com instância de computação

Para obter mais informações, confira Configurar a identidade gerenciada para o cluster de cálculo.

Usar a autenticação de entidade de serviço

APLICA-SE A: SDK do Python azure-ai-ml v2 (atual)

A autenticação com uma entidade de serviço usa o pacote de Identidade do Azure para Python. A classe DefaultAzureCredential procura as seguintes variáveis de ambiente e usa os valores ao autenticar como entidade de serviço:

  • AZURE_CLIENT_ID – A ID do cliente retornada quando você cria a entidade de serviço.
  • AZURE_TENANT_ID – A ID do locatário retornada quando você cria a entidade de serviço.
  • AZURE_CLIENT_SECRET – A senha/credencial gerada para a entidade de serviço.

Dica

Durante o desenvolvimento, considere usar o pacote python-dotenv para definir essas variáveis de ambiente. O python-dotenv carrega variáveis de ambiente de arquivos .env. O arquivo padrão .gitignore para Python exclui automaticamente os arquivos .env e, portanto, eles não devem ser verificados em nenhum repositório GitHub durante o desenvolvimento.

O exemplo a seguir demonstra o uso do python-dotenv para carregar as variáveis de ambiente de um arquivo .env e, em seguida, usar DefaultAzureCredential para criar o objeto de credencial:

from dotenv import load_dotenv

if ( os.environ['ENVIRONMENT'] == 'development'):
    print("Loading environment variables from .env file")
    load_dotenv(".env")

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

Depois que o objeto de credencial tiver sido criado, a classe MLClient será usada para se conectar ao workspace. Por exemplo, o código a seguir usa o método from_config() para carregar informações de conexão:

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

A entidade de serviço também pode ser usada para autenticação na API REST do Azure Machine Learning (versão prévia). Você usa ofluxo de concessão de credenciais de cliente do Microsoft Entra ID, que permite chamadas de serviço para serviço para autenticação sem periféricos em fluxos de trabalho automatizados.

Importante

Se você estiver usando a ADAL (Biblioteca de Autenticação do Azure Active Directory) para obter credenciais, recomendamos que migre para a MSAL (Biblioteca de Autenticação da Microsoft). O suporte à ADAL terminou em 30 de junho de 2022.

Para obter informações e exemplos sobre como se autenticar com a MSAL, confira os seguintes artigos:

Use a autenticação de identidade gerenciada

APLICA-SE A: SDK do Python azure-ai-ml v2 (atual)

A autenticação com uma identidade gerenciada usa o pacote de Identidade do Azure para Python. Para autenticar no espaço de trabalho de uma VM ou cluster de cálculo configurado com uma identidade gerenciada, use a DefaultAzureCredential classe. Essa classe detecta automaticamente se uma identidade gerenciada está sendo usada e usa a identidade gerenciada para se autenticar nos serviços do Azure.

O exemplo a seguir demonstra o uso da classe DefaultAzureCredential para criar o objeto de credencial e, em seguida, o uso da classe MLClient para se conectar ao workspace:

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")

try:
    ml_client = MLClient.from_config(credential=credential)
except Exception as ex:
    # NOTE: Update following workspace information to contain
    #       your subscription ID, resource group name, and workspace name
    client_config = {
        "subscription_id": "<SUBSCRIPTION_ID>",
        "resource_group": "<RESOURCE_GROUP>",
        "workspace_name": "<AZUREML_WORKSPACE_NAME>",
    }

    # write and reload from config file
    import json, os

    config_path = "../.azureml/config.json"
    os.makedirs(os.path.dirname(config_path), exist_ok=True)
    with open(config_path, "w") as fo:
        fo.write(json.dumps(client_config))
    ml_client = MLClient.from_config(credential=credential, path=config_path)

print(ml_client)

Usar o acesso condicional

Como administrador, você pode impor políticas de Acesso Condicional do Microsoft Entra para usuários que entram no espaço de trabalho. Por exemplo, é possível requerer a autenticação de dois fatores ou permitir a conexão somente de dispositivos gerenciados. Para usar o acesso condicional especificamente para espaços de trabalho do Azure Machine Learning, atribua a política de acesso condicional ao aplicativo chamado Azure Machine Learning. A ID do aplicativo é 0736f41a-0425-bdb5-1563eff02385.

Próximas etapas