Configuración de la autenticación para recursos y flujos de trabajo de Azure Machine Learning

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

Aprenda a configurar la autenticación en el área de trabajo de Azure Machine Learning desde la CLI de Azure o el SDK de Azure Machine Learning v2. La autenticación en el área de trabajo de Azure Machine Learning se basa en Microsoft Entra ID en la mayoría de los casos. En general, hay cuatro flujos de trabajo de autenticación que se pueden usar al conectarse al área de trabajo:

  • Interactivo: usa su cuenta en Microsoft Entra ID para autenticarse directamente o para obtener un token que se usa para la autenticación. La autenticación interactiva se usa durante la experimentación y el desarrollo iterativo. La autenticación interactiva permite controlar el acceso a los recursos (por ejemplo, un servicio web) por usuario.

  • Entidad de servicio: crea una cuenta de entidad de servicio en Microsoft Entra ID y la usa para autenticarse u obtener un token. Una entidad de servicio se usa cuando se necesita un proceso automatizado para autenticarse en el servicio sin necesidad de interacción del usuario. Por ejemplo, un script de implementación e integración continua que entrena y prueba un modelo cada vez que cambia el código de entrenamiento.

  • Sesión de la CLI de Azure: se usa una sesión activa de la CLI de Azure para autenticarse. La extensión de la CLI de Azure para Machine Learning (la extensión ml o la versión 2 de la CLI) es una herramienta de línea de comandos para trabajar con Azure Machine Learning. Puede iniciar sesión en Azure mediante la CLI de Azure en la estación de trabajo local, sin almacenar las credenciales en el código de Python ni pedir al usuario que se autentique. Del mismo modo, puede reutilizar los mismos scripts como parte de las canalizaciones de integración e implementación continuas, al mismo tiempo que autentica la CLI de Azure con una identidad de entidad de servicio.

  • Identidad administrada: Si utiliza el SDK de Azure Machine Learning v2 en una instancia de proceso o en una máquina virtual de Azure, puede usar una identidad administrada para Azure. Este flujo de trabajo permite a la máquina virtual conectarse al área de trabajo mediante la identidad administrada, sin almacenar las credenciales en el código de Python ni pedir al usuario que se autentique. Los clústeres de proceso de Azure Machine Learning también se pueden configurar para usar una identidad administrada para acceder al área de trabajo cuando se entrenen modelos.

Independientemente del flujo de trabajo de autenticación que se use, el control de acceso basado en roles de Azure (Azure RBAC) se usa para limitar el nivel de acceso (autorización) permitido a los recursos. Por ejemplo, un proceso de administración o de automatización podría acceder para crear una instancia de proceso, pero no usarla, mientras que un científico de datos podría usarla, pero no eliminarla ni crearla. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.

Se puede utilizar el acceso condicional de Microsoft Entra para controlar o restringir aún más el acceso al área de trabajo para cada flujo de trabajo de autenticación. Por ejemplo, un administrador solo puede permitir el acceso al área de trabajo desde dispositivos administrados.

Requisitos previos

Microsoft Entra ID

Todos los flujos de trabajo de autenticación del área de trabajo dependen de Microsoft Entra ID. Si desea que los usuarios se autentiquen mediante cuentas individuales, deben tener cuentas en su instancia de Microsoft Entra ID. Si desea usar entidades de servicio, deben existir en su instancia de Microsoft Entra ID. Las identidades administradas también son una característica de Microsoft Entra ID.

Para obtener más información sobre Microsoft Entra ID, consulte ¿Qué es la autenticación de Microsoft Entra?

Una vez que haya creado las cuentas de Microsoft Entra, consulte Administración del acceso a un área de trabajo de Azure Machine Learning para obtener información sobre cómo concederles acceso al área de trabajo y a otras operaciones en Azure Machine Learning.

Uso de la autenticación interactiva

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

La autenticación interactiva usa el paquete de identidad de Azure para Python. La mayoría de los ejemplos usan DefaultAzureCredential para acceder a sus credenciales. Cuando se necesita un token, solicita uno mediante varias identidades (EnvironmentCredential, ManagedIdentityCredential, SharedTokenCacheCredential, VisualStudioCodeCredential, AzureCliCredential, AzurePowerShellCredential) a su vez, deteniéndose cuando una proporciona un token. Para obtener más información, consulte la referencia de clase DefaultAzureCredential.

A continuación se muestra un ejemplo del uso de DefaultAzureCredential para la autenticación. Si se produce un error en la autenticación con DefaultAzureCredential, se usa en su lugar una reserva de autenticación a través del explorador 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()

Una vez creado el objeto de credencial, la clase MLClient se usa para conectarse al área de trabajo. Por ejemplo, el código siguiente usa el método from_config() para cargar información de conexión:

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)

Configuración de una entidad de servicio

Para usar una entidad de servicio (SP), primero debe crearla. A continuación, concédale acceso al área de trabajo. Como se mencionó anteriormente, se usa el control de acceso basado en rol (RBAC) de Azure para controlar el acceso, por lo que también debe decidir qué acceso conceder a la entidad de servicio.

Importante

Cuando use una entidad de servicio, concédale el acceso mínimo necesario para la tarea para la que se usa. Por ejemplo, no debería conceder acceso a un propietario de la entidad de servicio o a un colaborador si todo para lo que se usa es para leer el token de acceso para una implementación web.

La razón para conceder el menor acceso es que una entidad de servicio usa una contraseña para autenticarse y la contraseña se puede almacenar como parte de un script de automatización. Si se pierde la contraseña, tener el acceso mínimo necesario para una tarea específica minimiza el uso malintencionado de la entidad de servicio.

La forma más fácil de crear una entidad de servicio y de conceder acceso al área de trabajo es mediante la CLI de Azure. Para crear una entidad de servicio y concederle acceso al área de trabajo, siga estos pasos:

Nota

Debe ser un administrador de la suscripción para realizar todos estos pasos.

  1. Autentíquese en la suscripción de Azure:

    az login
    

    Si la CLI puede abrir el explorador predeterminado, lo hará y cargará una página de inicio de sesión. De lo contrario, tendrá que abrir un explorador y seguir las instrucciones de la línea de comandos. Las instrucciones implican navegar a https://aka.ms/devicelogin y escribir un código de autorización.

    Si tiene varias suscripciones de Azure, puede usar el comando az account set -s <subscription name or ID> para establecer la suscripción. Para más información, consulte Use multiple Azure subscriptions (Uso de varias suscripciones de Azure).

    Para obtener otros métodos de autenticación, consulte Inicio de sesión con la CLI de Azure.

  2. Cree la entidad de servicio. En el ejemplo siguiente, se crea una entidad de servicio denominada ml-auth:

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

    El parámetro --json-auth está disponible en las versiones de la CLI de Azure >= 2.51.0. Las versiones anteriores a esta usan --sdk-auth.

    La salida será un código JSON similar al siguiente. Tome nota de los campos clientId, clientSecret y tenantId, ya que los necesitará para otros pasos de este artículo.

    {
        "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 los detalles de la entidad de servicio mediante el valor clientId devuelto en el paso anterior:

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

    El siguiente JSON es un ejemplo simplificado de la salida del comando. Tome nota del campo objectId, ya que necesitará su valor para el paso siguiente.

    {
        "accountEnabled": "True",
        "addIns": [],
        "appDisplayName": "ml-auth",
        ...
        ...
        ...
        "objectId": "your-sp-object-id",
        "objectType": "ServicePrincipal"
    }
    
  4. Para conceder acceso al área de trabajo y a otros recursos usados por Azure Machine Learning, use la información de los artículos siguientes:

    Importante

    El acceso de propietario permite que la entidad de servicio realice prácticamente cualquier operación en el área de trabajo. Se usa en este documento para demostrar cómo conceder acceso. En un entorno de producción, Microsoft recomienda conceder a la entidad de servicio el acceso mínimo necesario para realizar el rol para el que se pretende usar. Para obtener información sobre cómo crear un rol personalizado con el acceso necesario para su escenario, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.

Configuración de una identidad administrada

Importante

La identidad administrada solo se admite cuando se usa el SDK de Azure Machine Learning desde una máquina virtual de Azure, un clúster de proceso de Azure Machine Learning o una instancia de proceso.

Identidad administrada con una máquina virtual

  1. Habilite una identidad administrada asignada por el sistema para los recursos de Azure en la máquina virtual.

  2. En Azure Portal, seleccione el área de trabajo y, después, seleccione Control de acceso (IAM) .

  3. Seleccione Agregar, Agregar asignación de rol para abrir la página Agregar asignación de rol.

  4. Seleccione el rol que desea asignar a la identidad administrada. Por ejemplo, Lector. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

Identidad administrada con un clúster de proceso

Para obtener más información, vea Configuración de identidades administradas para el clúster de proceso.

Identidad administrada con un clúster de proceso

Para obtener más información, consulte: Configuración de identidades administradas en un clúster de proceso.

Uso de la autenticación de entidad de servicio

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

La autenticación con una entidad de servicio usa el paquete de identidad de Azure para Python. La clase DefaultAzureCredential busca las siguientes variables de entorno y usa los valores al autenticarse como entidad de servicio:

  • AZURE_CLIENT_ID: identificador de cliente devuelto al crear la entidad de servicio.
  • AZURE_TENANT_ID: identificador de inquilino devuelto al crear la entidad de servicio.
  • AZURE_CLIENT_SECRET: contraseña o credencial generada para la entidad de servicio.

Sugerencia

Durante el desarrollo, considere la posibilidad de usar el paquete python-dotenv para establecer estas variables de entorno. Python-dotenv carga variables de entorno desde archivos .env. El archivo .gitignore estándar para Python excluye automáticamente los archivos .env, por lo que no se deben comprobar en ningún repositorio de GitHub durante el desarrollo.

En el ejemplo siguiente se muestra cómo usar python-dotenv para cargar las variables de entorno desde un archivo .env y, a continuación, usar DefaultAzureCredential para crear el 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")

Una vez creado el objeto de credencial, la clase MLClient se usa para conectarse al área de trabajo. Por ejemplo, el código siguiente usa el método from_config() para cargar información de conexión:

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)

La entidad de servicio también se puede usar para autenticar en la API REST de Azure Machine Learning. Use el flujo de concesión de credenciales de cliente de Microsoft Entra ID, que permiten llamadas de servicio a servicio para la autenticación sin periféricos en flujos de trabajo automatizados.

Importante

Si actualmente usa la biblioteca de autenticación de Azure Active Directory (ADAL) para obtener las credenciales, se recomienda migrar a la biblioteca de autenticación de Microsoft (MSAL). El soporte técnico de ADAL finalizó el 30 de junio de 2022.

Para información y ejemplos sobre la autenticación con MSAL, consulte los siguientes artículos:

Uso de la autenticación de identidad administrada

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

La autenticación con una identidad administrada usa el paquete de identidad de Azure para Python. Para autenticarse en el área de trabajo desde una máquina virtual o un clúster de proceso que está configurado con una identidad administrada, utilice la clase DefaultAzureCredential. Esta clase detecta automáticamente si se usa una identidad administrada, y la utiliza para autenticarse en los servicios de Azure.

En el ejemplo siguiente se muestra cómo usar la clase DefaultAzureCredential para crear el objeto de credencial y, a continuación, usar la clase MLClient para conectarse al área de trabajo:

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)

Uso del acceso condicional

Como administrador, puede aplicar directivas de acceso condicional de Microsoft Entra para los usuarios que inician sesión en el área de trabajo. Por ejemplo, puede requerir la autenticación en dos fases o permitir el inicio de sesión solo desde dispositivos administrados. Para usar el acceso condicional para áreas de trabajo de Azure Machine Learning específicamente, asigne la directiva de acceso condicional a la aplicación denominada Azure Machine Learning. El identificador de la aplicación es 0736f41a-0425-bdb5-1563eff02385.

Pasos siguientes