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

APLICA-SE A:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

Saiba como configurar a autenticação para a sua área de trabalho do Azure Machine Learning a partir 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 na ID do Microsoft Entra para a maioria das coisas. Em geral, há quatro fluxos de trabalho de autenticação que você pode usar 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 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 na ID do Microsoft Entra e a usa para autenticar ou obter um token. Uma entidade de serviço é usada quando você precisa de um processo automatizado para se autenticar no serviço sem exigir a interação do usuário. Por exemplo, um script de integração e implantação contínua que treina e testa um modelo sempre que o código de treinamento é alterado.

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

  • Identidade gerenciada: ao usar o SDK do Azure Machine Learning v2 em uma instância de computação ou em uma Máquina Virtual do Azure, você 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 em código Python ou solicitar que o usuário se autentique. Os clusters de computação do Azure Machine Learning também podem ser configurados para usar uma identidade gerenciada para acessar o espaço de trabalho durante o treinamento de modelos.

Independentemente do fluxo de trabalho de autenticação usado, o controle de acesso baseado em função do Azure (Azure RBAC) é usado para definir o escopo do 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 o acesso ao 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 apenas a partir de dispositivos geridos.

Pré-requisitos

Microsoft Entra ID

Todos os fluxos de trabalho de autenticação para o 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 em sua ID do Microsoft Entra. Se você quiser usar entidades de serviço, elas devem existir em sua ID do Microsoft Entra. As identidades gerenciadas também são um recurso do Microsoft Entra ID.

Para obter mais informações sobre o Microsoft Entra ID, consulte 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-lhes acesso ao espaço de trabalho e outras operações no Azure Machine Learning.

Usar autenticação interativa

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

A autenticação interativa usa o pacote Azure Identity 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, , , , , ) por sua vez, AzurePowerShellCredentialManagedIdentityCredentialSharedTokenCacheCredentialVisualStudioCodeCredentialAzureCliCredentialparando quando um fornece um token. Para obter mais informações, consulte a referência da classe DefaultAzureCredential .

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

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 espaço de trabalho. Por exemplo, o código a seguir usa o método para carregar informações de from_config() 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 um principal de serviço

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

Importante

Ao usar uma entidade de serviço, conceda-lhe o acesso mínimo necessário para a tarefa para a qual ela é usada. Por exemplo, você não concederia a um proprietário de entidade de serviço ou acesso de colaborador se tudo o que ele for usado for ler o token de acesso para uma implantação da Web.

A razão para conceder o menor acesso é 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, ter o acesso mínimo necessário para uma tarefa específica minimiza o uso mal-intencionado do SP.

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

Nota

Você deve ser um administrador na assinatura para executar todas essas etapas.

  1. Autentique-se na sua subscrição do Azure:

    az login
    

    Se a CLI conseguir abrir o seu browser predefinido, executa essa ação e carrega uma página de início de sessão. Caso contrário, você precisa abrir um navegador e seguir as instruções na linha de comando. As instruções envolvem navegar e https://aka.ms/devicelogin inserir um código de autorização.

    Se você tiver várias assinaturas do Azure, poderá usar o az account set -s <subscription name or ID> comando para definir a assinatura. Para obter mais informações, consulte Usar várias assinaturas do Azure.

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

  2. Crie a entidade de serviço. No exemplo a seguir, uma controladora de armazenamento 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 esta utilização --sdk-auth.

    A saída será um JSON semelhante ao seguinte. Anote os clientIdcampos , clientSecrete , pois tenantId 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 é um exemplo simplificado da saída do comando. Anote o objectId campo, pois você precisará de seu valor 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 Aprendizado de Máquina do Azure, use as informações nos seguintes artigos:

    Importante

    O acesso de proprietário permite que a entidade de serviço faça praticamente qualquer operação em seu espaço de trabalho. É utilizado 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 o seu cenário, consulte Gerenciar o acesso ao espaço de trabalho do Azure Machine Learning.

Configurar uma identidade gerida

Importante

A identidade gerenciada só é suportada ao usar o SDK do Azure Machine Learning de uma Máquina Virtual do Azure, um cluster de computação do Azure Machine Learning ou uma instância de computação.

Identidade gerenciada com uma VM

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

  2. No portal do Azure, selecione seu espaço de trabalho e, em seguida, 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 à qual deseja atribuir a identidade gerenciada. Por exemplo, Reader. Para obter os passos detalhados, veja o artigo Atribuir funções do Azure com o portal do Azure.

Identidade gerenciada com cluster de computação

Para obter mais informações, consulte Configurar identidade gerenciada para cluster de computação.

Identidade gerenciada com instância de computação

Para obter mais informações, consulte Configurar identidade gerenciada para instância de computação.

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

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

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

  • AZURE_CLIENT_ID - O ID do cliente retornou quando você criou a entidade de serviço.
  • AZURE_TENANT_ID - O ID do locatário retornou quando você criou a entidade de serviço.
  • AZURE_CLIENT_SECRET - A senha/credencial gerada para a entidade de serviço.

Gorjeta

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

O exemplo a seguir demonstra o uso de python-dotenv para carregar as variáveis de ambiente de um .env arquivo 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 espaço de trabalho. Por exemplo, o código a seguir usa o método para carregar informações de from_config() 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 autenticar na API REST do Azure Machine Learning. Você usa o fluxo de concessão de credenciais do cliente Microsoft Entra ID, que permite chamadas de serviço a serviço para autenticação sem cabeça em fluxos de trabalho automatizados.

Importante

Se estiver atualmente a utilizar a Biblioteca de Autenticação do Azure Ative Directory (ADAL) para obter credenciais, recomendamos que migre para a Biblioteca de Autenticação da Microsoft (MSAL). O apoio da ADAL terminou a 30 de junho de 2022.

Para obter informações e exemplos sobre autenticação com MSAL, consulte os seguintes artigos:

Usar autenticação de identidade gerenciada

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

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

O exemplo a seguir demonstra o uso da classe para criar o objeto de credencial e, em seguida, o uso da DefaultAzureCredentialMLClient classe para se conectar ao espaço de trabalho:

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 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, pode exigir autenticação de dois fatores ou permitir o início de sessão apenas a partir de dispositivos geridos. Para usar o Acesso Condicional para espaços de trabalho do Azure Machine Learning especificamente, atribua a política de Acesso Condicional ao aplicativo chamado Azure Machine Learning. O ID do aplicativo é 0736f41a-0425-bdb5-1563eff02385.

Próximos passos