Autenticación de servicios de Azure Batch con Microsoft Entra ID

Azure Batch admite la autenticación con Microsoft Entra ID, el directorio multiinquilino basado en la nube y el servicio de administración de identidades de Microsoft. Azure usa Microsoft Entra ID para la autenticación de sus propios clientes, administradores de servicios y usuarios de la organización.

En este artículo se describen dos formas de usar la autenticación de Microsoft Entra ID con Azure Batch:

  • La autenticación integrada autentica a un usuario que interactúa con una aplicación. La aplicación recopila las credenciales de un usuario y las usa para autorizar el acceso a los recursos de Batch.

  • Una entidad de servicio autentica a una aplicación desatendida. La entidad de servicio define la directiva y los permisos de la aplicación y representa a dicha aplicación para acceder a los recursos de Batch en tiempo de ejecución.

Para obtener información sobre las características de Microsoft Entra ID, consulte la documentación de Microsoft Entra.

Recopilación de puntos de conexión para la autenticación

Para autenticar aplicaciones de Batch con Microsoft Entra ID, debe incluir el punto de conexión de Microsoft Entra y el punto de conexión de recursos de Batch en el código.

Punto de conexión de Microsoft Entra

El punto de conexión de autoridad de Microsoft Entra es https://login.microsoftonline.com/. Para autenticar con Microsoft Entra ID, use este punto de conexión con el identificador de inquilino que identifica al inquilino de Microsoft Entra que se usará para la autenticación:

https://login.microsoftonline.com/<tenant-id>

Puede obtener el identificador de inquilino en la página principal de Microsoft Entra ID en Azure Portal. También puede seleccionar Propiedades en el panel de navegación izquierdo y ver el identificador de inquilino en la página Propiedades.

Screenshot of the Tenant ID in the Azure portal.

Importante

  • El punto de conexión de Microsoft Entra específico del inquilino es necesario al autenticar con una entidad de servicio.

  • Al autenticar mediante la autenticación integrada, se recomienda el punto de conexión específico del inquilino, aunque es opcional. También puede usar el punto de conexión común de Microsoft Entra para proporcionar una interfaz de recopilación de credenciales genérica cuando no se proporciona un inquilino específico. El punto de conexión común es https://login.microsoftonline.com/common.

Para más información sobre los puntos de conexión de Microsoft Entra, consulte Autenticación frente a autorización.

Punto de conexión de recursos de Batch

Use el punto de conexión de recursos de Batch https://batch.core.windows.net/ a fin de adquirir un token para autenticar las solicitudes al servicio Batch.

Registro de la aplicación con un inquilino

El primer paso para usar la autenticación de Microsoft Entra consiste en registrar la aplicación en un inquilino de Microsoft Entra. Una vez registrada la aplicación, puede llamar a la Biblioteca de autenticación de Microsoft (MSAL) desde el código. La MSAL proporciona una API para autenticarse con Microsoft Entra ID desde la aplicación. La aplicación debe registrarse tanto si usa la autenticación integrada como una entidad de servicio.

Al registrar la aplicación, facilita información acerca de la aplicación a Microsoft Entra ID. Microsoft Entra ID proporciona un id. de aplicación, también denominado Id. de cliente, que se utiliza para asociar la aplicación con Microsoft Entra ID en tiempo de ejecución. Para obtener más información sobre el identificador de aplicación, consulte Objetos de aplicación y de entidad de servicio de Microsoft Entra ID.

Para registrar la aplicación de Batch, siga los pasos descritos en Registro de una aplicación.

Después de registrar la aplicación, puede ver el identificador de aplicación (cliente) en la página Información general de la aplicación.

Screenshot of the Application ID shown in the Azure portal.

Configuración de la autenticación integrada

Para autenticarse mediante la autenticación integrada, debe conceder a la aplicación permiso para conectarse a la API del servicio Batch. Este paso permite a la aplicación usar Microsoft Entra ID para autenticar llamadas a la API del servicio Batch.

Después de registrar la aplicación, siga estos pasos para conceder a la aplicación acceso al servicio Batch:

  1. En Azure Portal, busque y seleccione Registros de aplicaciones.
  2. En la página Registros de aplicaciones, seleccione la aplicación.
  3. En la página de la aplicación, seleccione Permisos de API en el panel de navegación izquierdo.
  4. En la página Permisos de API, seleccione Agregar un permiso.
  5. En la página Solicitar permisos de API, seleccione Azure Batch.
  6. En la página Azure Batch, en Seleccionar permisos, marque la casilla situada junto a user_impersonation y, a continuación, seleccione Agregar permisos.

En la página Permisos de API se muestra ahora que la aplicación de Microsoft Entra tiene acceso tanto a Microsoft Graph como a Azure Batch. Cuando registra la aplicación con Microsoft Entra ID, se conceden permisos a Microsoft Graph automáticamente.

Configuración de una entidad de servicio

Para autenticar una aplicación que se ejecute desatendida, utilice una entidad de servicio. Cuando la aplicación se autentica con una entidad de servicio, envía el identificador de aplicación y una clave secreta a Microsoft Entra ID.

Una vez que registre la aplicación, siga estos pasos en Azure Portal para configurar una entidad de servicio:

  1. Solicite un secreto para la aplicación.
  2. Asignación del control de acceso basado en rol de Azure (RBAC de Azure) a la aplicación.

Solicitud de un secreto para la aplicación

Siga estos pasos para crear y copiar la clave secreta que se usará en el código:

  1. En Azure Portal, busque y seleccione Registros de aplicaciones.
  2. En la página Registros de aplicaciones, seleccione la aplicación.
  3. En la página de la aplicación, seleccione Certificados y secretos en el panel de navegación izquierdo.
  4. En la página Certificados y secretos , seleccione Nuevo secreto de cliente.
  5. En la página Agregar un secreto de cliente, introduzca una descripción y seleccione un período de expiración para el secreto.
  6. Seleccione Agregar para crear el secreto y mostrarlo en la página Certificados y secretos .
  7. Copie el valor del secreto en un lugar seguro, puesto que no podrá acceder a él nuevamente después de abandonar esta página. Si pierde el acceso a la clave, puede generar una nueva.

Asignación del control de acceso basado en rol de Azure a la aplicación

Siga estos pasos para asignar un rol RBAC de Azure a la aplicación. Para obtener los pasos detallados, consulte Asignación de roles de Azure mediante Azure Portal.

  1. En Azure Portal, vaya a la cuenta de Batch que usa la aplicación.
  2. Seleccione Control de acceso (IAM) en el panel de navegación izquierdo.
  3. En la página Control de acceso (IAM), seleccione Agregar asignación de roles.
  4. En la página Adición de asignación de roles, seleccione la pestaña Rol y, a continuación, seleccione el rol Colaborador o Lector para la aplicación.
  5. Seleccione la pestaña Miembros y seleccione Seleccionar miembros en Miembros.
  6. En la pantalla Seleccionar miembros, busque y seleccione la aplicación y, a continuación, seleccione Seleccionar.
  7. Seleccione Revisar y asignar en la página Adición de asignación de roles.

La aplicación debería aparecer ahora en la pestaña Asignaciones de roles de la página Control de acceso (IAM) de la cuenta de Batch.

Asignación de un rol personalizado

Un rol personalizado concede permisos específicos a un usuario para enviar trabajos, tareas, etc. Puede usar roles personalizados para evitar la posibilidad de que los usuarios realicen operaciones que afecten al costo, como crear grupos o modificar nodos.

Puede usar un rol personalizado para conceder o denegar permisos a un usuario, grupo o entidad de servicio de Microsoft Entra ID para las siguientes operaciones de RBAC de Azure Batch:

  • Microsoft.Batch/batchAccounts/pools/write
  • Microsoft.Batch/batchAccounts/pools/delete
  • Microsoft.Batch/batchAccounts/pools/read
  • Microsoft.Batch/batchAccounts/jobSchedules/write
  • Microsoft.Batch/batchAccounts/jobSchedules/delete
  • Microsoft.Batch/batchAccounts/jobSchedules/read
  • Microsoft.Batch/batchAccounts/jobs/write
  • Microsoft.Batch/batchAccounts/jobs/delete
  • Microsoft.Batch/batchAccounts/jobs/read
  • Microsoft.Batch/batchAccounts/certificates/write
  • Microsoft.Batch/batchAccounts/certificates/delete
  • Microsoft.Batch/batchAccounts/certificates/read
  • Microsoft.Batch/batchAccounts/read, para cualquier operación de lectura
  • Microsoft.Batch/batchAccounts/listKeys/action, para cualquier operación

Los roles personalizados son para usuarios autenticados mediante Microsoft Entra ID, no para las credenciales de la cuenta de clave compartida de Batch. Las credenciales de la cuenta de Batch proporcionan el permiso completo a la cuenta de Batch. Los trabajos que usan un autogrupo requieren permisos de nivel de grupo.

Nota

Ciertas asignaciones de roles deben especificarse en el campo actions, mientras que otras deben especificarse en el campo dataActions. Para más información, consulte Operaciones del proveedor de recursos de Azure.

En el ejemplo siguiente se muestra una definición de roles personalizados de Azure Batch:

{
 "properties":{
    "roleName":"Azure Batch Custom Job Submitter",
    "type":"CustomRole",
    "description":"Allows a user to submit jobs to Azure Batch but not manage pools",
    "assignableScopes":[
      "/subscriptions/88888888-8888-8888-8888-888888888888"
    ],
    "permissions":[
      {
        "actions":[
          "Microsoft.Batch/*/read",
          "Microsoft.Authorization/*/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Insights/alertRules/*"
        ],
        "notActions":[

        ],
        "dataActions":[
          "Microsoft.Batch/batchAccounts/jobs/*",
          "Microsoft.Batch/batchAccounts/jobSchedules/*"
        ],
        "notDataActions":[

        ]
      }
    ]
  }
}

Para más información sobre la creación de un rol personalizado, consulte los roles personalizados de Azure.

Ejemplos de código

En los ejemplos de código de esta sección se muestra cómo autenticar con Microsoft Entra ID mediante la autenticación integrada o con una entidad de servicio. La mayoría de estos ejemplos de código usan .NET y Python, pero los conceptos son similares para otros lenguajes.

Nota:

Un token de autenticación de Microsoft Entra después de una hora. Cuando se usa un objeto BatchClient de larga duración, es mejor obtener un token de la MSAL en cada solicitud para asegurarse de que siempre tiene un token válido.

Para hacerlo en. NET, escriba un método que recupere el token de Microsoft Entra ID y pase ese método a un objeto BatchTokenCredentials como un delegado. Cada solicitud al servicio Batch llama al método delegado para asegurarse de que se proporciona un token válido. De manera predeterminada, la MSAL copia en caché los tokens, por lo que solo se recupera un nuevo token de Microsoft Entra cuando es necesario. Para más información sobre los tokens en Microsoft Entra ID, consulte Tokens de seguridad.

Ejemplo de código: uso de la autenticación integrada de Microsoft Entra con .NET de Batch

Para autenticarse con la autenticación integrada desde .NET de Batch:

  1. Instale los paquetes NuGet de .NET de Azure Batch y MSAL.

  2. Declare las siguientes instrucciones using en el código:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Haga referencia al punto de conexión de Microsoft Entra, incluido el identificador de inquilino. Puede obtener el identificador de inquilino en la página Información generalde Microsoft Entra ID en Azure Portal.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Haga referencia al punto de conexión del recurso para el servicio de Batch:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Haga referencia a la cuenta de Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Especifique el identificador de aplicación (cliente) de su aplicación. Puede obtener el identificador de aplicación en la página Información general de la aplicación en Azure Portal.

    private const string ClientId = "<application-id>";
    
  7. Especifique el identificador URI de redirección que proporcionó al registrar la aplicación.

    private const string RedirectUri = "https://<redirect-uri>";
    
  8. Escriba un método de devolución de llamada para adquirir el token de autenticación de Microsoft Entra ID. En el ejemplo siguiente se llama a la MSAL para autenticar a un usuario que interactúa con la aplicación. El método IConfidentialClientApplication.AcquireTokenByAuthorizationCode de la MSAL solicita al usuario sus credenciales. La aplicación continúa una vez que el usuario proporciona credenciales.

    El parámetro authorizationCode es el código de autorización obtenido del servidor de autorización después de que el usuario se autentique. WithRedirectUri especifica el identificador URI de redireccionamiento al que el servidor de autorización redirige al usuario después de la autenticación.

    public static async Task<string> GetTokenUsingAuthorizationCode(string authorizationCode, string redirectUri, string[] scopes)
    {
        var app = ConfidentialClientApplicationBuilder.Create(ClientId)
                    .WithAuthority(AuthorityUri)
                    .WithRedirectUri(RedirectUri)
                    .Build();
    
        var authResult = await app.AcquireTokenByAuthorizationCode(scopes, authorizationCode).ExecuteAsync();
        return authResult.AccessToken;
    }
    
  9. Llame a este método con el código siguiente y reemplace <authorization-code> por el código de autorización obtenido del servidor de autorización. El ámbito .default garantiza que el usuario tenga permiso para acceder a todos los ámbitos del recurso.

    
    var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
    
  10. Construya un objeto BatchTokenCredentials que tome el delegado como parámetro. Use esas credenciales para abrir un objeto BatchClient. Después, puede usar el objeto BatchClient para las operaciones posteriores del servicio Batch:

    public static void PerformBatchOperations()
    {
        Func<Task<string>> tokenProvider = () => GetTokenUsingAuthorizationCode();
    
        using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider)))
        {
            client.JobOperations.ListJobs();
        }
    }
    

Ejemplo de código: uso de una entidad de servicio de Microsoft Entra con .NET de Batch

Para autenticarse con una entidad de servicio de .NET de Batch:

  1. Instale los paquetes NuGet de .NET de Azure Batch y MSAL.

  2. Declare las siguientes instrucciones using en el código:

    using Microsoft.Azure.Batch;
    using Microsoft.Azure.Batch.Auth;
    using Microsoft.Identity.Client;
    
  3. Haga referencia al punto de conexión de Microsoft Entra, incluido el identificador de inquilino. Cuando usa una entidad de servicio, debe proporcionar un punto de conexión específico del inquilino. Puede obtener el identificador de inquilino en la página Información generalde Microsoft Entra ID en Azure Portal.

    private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
    
  4. Haga referencia al punto de conexión del recurso para el servicio de Batch:

    private const string BatchResourceUri = "https://batch.core.windows.net/";
    
  5. Haga referencia a la cuenta de Batch:

    private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
    
  6. Especifique el identificador de aplicación (cliente) de su aplicación. Puede obtener el identificador de aplicación en la página Información general de la aplicación en Azure Portal.

    private const string ClientId = "<application-id>";
    
  7. Especifique la clave secreta que copió de Azure Portal.

    private const string ClientKey = "<secret-key>";
    
  8. Escriba un método de devolución de llamada para adquirir el token de autenticación de Microsoft Entra ID. El siguiente método ConfidentialClientApplicationBuilder.Create llama a la MSAL para la autenticación desatendida.

    public static async Task<string> GetAccessToken(string[] scopes)
    {
        var app = ConfidentialClientApplicationBuilder.Create(clientId)
                    .WithClientSecret(ClientKey)
                    .WithAuthority(new Uri(AuthorityUri))
                    .Build();
    
        var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
        return result.AccessToken;
    }
    
  9. Llame a este método mediante el código siguiente. El ámbito .default garantiza que la aplicación tenga permiso para acceder a todos los ámbitos del recurso.

       var token = await GetAccessToken(new string[] { "BatchResourceId/.default" });
    
  10. Construya un objeto BatchTokenCredentials que tome el delegado como parámetro. Use esas credenciales para abrir un objeto BatchClient. Después, puede usar el objeto BatchClient para las operaciones posteriores del servicio Batch:

    public static void PerformBatchOperations()
    {
        Func<Task<string>> tokenProvider = () => GetAccessToken();
    
        using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider)))
        {
            client.JobOperations.ListJobs();
        }
    }
    

Ejemplo de código: uso de una entidad de servicio de Microsoft Entra con Python de Batch

Para autenticar con una entidad de servicio de Python de Batch:

  1. Instale los módulos azure-batch y azure-common de Python.

  2. Haga referencia a los módulos:

    from azure.batch import BatchServiceClient
    from azure.common.credentials import ServicePrincipalCredentials
    
  3. Para usar una entidad de servicio, proporcione un punto de conexión específico del inquilino. Puede obtener el identificador de inquilino en la página Información general o Propiedadesde Microsoft Entra ID en Azure Portal.

    TENANT_ID = "<tenant-id>"
    
  4. Haga referencia al punto de conexión del recurso para el servicio de Batch:

    RESOURCE = "https://batch.core.windows.net/"
    
  5. Haga referencia a la cuenta de Batch:

    BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
    
  6. Especifique el identificador de aplicación (cliente) de su aplicación. Puede obtener el identificador de aplicación en la página Información general de la aplicación en Azure Portal.

    CLIENT_ID = "<application-id>"
    
  7. Especifique la clave secreta que copió de Azure Portal:

    SECRET = "<secret-key>"
    
  8. Cree un objeto ServicePrincipalCredentials:

    credentials = ServicePrincipalCredentials(
        client_id=CLIENT_ID,
        secret=SECRET,
        tenant=TENANT_ID,
        resource=RESOURCE
    )
    
  9. Utilice las credenciales del servicio principal para abrir un objeto BatchServiceClient. A continuación, use el objeto BatchServiceClient para las operaciones posteriores del servicio Batch.

        batch_client = BatchServiceClient(
        credentials,
        batch_url=BATCH_ACCOUNT_URL
    )
    

Para obtener un ejemplo de Python de cómo crear un cliente de Batch que se autentica con un token de Microsoft Entra, consulte el ejemplo Implementación de una imagen personalizada de Azure Batch con un script de Python de ejemplo.

Pasos siguientes