Autenticare i servizi di Azure Batch con Microsoft Entra ID
Azure Batch supporta l'autenticazione con Microsoft Entra ID, il servizio di gestione delle identità e della directory basato sul cloud multi-tenant di Microsoft. Azure usa Microsoft Entra ID per autenticare i propri clienti, amministratori dei servizi e utenti dell'organizzazione.
Questo articolo descrive due modi per usare l'autenticazione di Microsoft Entra con Azure Batch:
Autenticazione integrata autentica un utente che interagisce con un'applicazione. L'applicazione raccoglie le credenziali dell'utente e le usa per autenticare l'accesso alle risorse di Batch.
Un'entità servizio autentica un'applicazione senza intervento dell'utente. L'entità servizio definisce i criteri e le autorizzazioni per l'applicazione e rappresenta l'applicazione per accedere alle risorse batch in fase di esecuzione.
Per altre informazioni su Microsoft Entra ID, vedere la documentazione di Microsoft Entra.
Raccogliere gli endpoint per l'autenticazione
Per autenticare le applicazioni Batch con Microsoft Entra ID, è necessario includere l'endpoint Microsoft Entra e l'endpoint della risorsa Batch nel codice.
Endpoint Microsoft Entra
L'endpoint di autorità Microsoft Entra di base è https://login.microsoftonline.com/
. Per eseguire l'autenticazione con Microsoft Entra ID, usare questo endpoint con l'ID tenant che identifica il tenant di Microsoft Entra da usare per l'autenticazione:
https://login.microsoftonline.com/<tenant-id>
È possibile ottenere l'ID tenant dalla pagina principale di Microsoft Entra ID nel portale di Azure. È anche possibile selezionare Proprietà nel riquadro di spostamento a sinistra e visualizzare l'ID tenant nella pagina Proprietà.
Importante
L'endpoint Microsoft Entra specifico per il tenant è obbligatorio quando si esegue l'autenticazione tramite un'entità servizio.
Quando si esegue l'autenticazione usando l'autenticazione integrata, è consigliabile usare l'endpoint specifico del tenant, ma la scelta è facoltativa. È anche possibile usare l'endpoint comune di Microsoft Entra per fornire un'interfaccia generica di raccolta delle credenziali quando non viene fornito un tenant specifico. L'endpoint comune è
https://login.microsoftonline.com/common
.
Per altre informazioni sugli endpoint di Microsoft Entra, vedere Autenticazione e autorizzazione.
Endpoint di risorse Batch
Usare l'endpoint delle risorse Batch https://batch.core.windows.net/
per acquisire un token per autenticare le richieste al servizio Batch.
Registrare l'applicazione con un tenant
Il primo passaggio nell'uso dell'autenticazione di Microsoft Entra consiste nel registrare l'applicazione in un tenant di Microsoft Entra. Dopo aver registrato l'applicazione, è possibile chiamare la Microsoft Authentication Library (MSAL) dal codice. MSAL fornisce un'API per l'autenticazione con Microsoft Entra ID dall'applicazione. La registrazione dell'applicazione è necessaria se si usa l'autenticazione integrata o un'entità servizio.
Quando si registra l'applicazione, si danno informazioni sull'applicazione a Microsoft Entra ID. Microsoft Entra ID fornisce quindi un ID applicazione, detto anche ID client, da usare per associare l'applicazione a Microsoft Entra ID in fase di esecuzione. Per altre informazioni sull'ID applicazione, vedere Oggetti applicazione ed entità servizio in Microsoft Entra ID.
Per registrare l'applicazione Batch, seguire la procedura descritta in Registrare un'applicazione.
Dopo aver registrato l'applicazione, è possibile visualizzare l'ID applicazione (client) nella pagina Panoramica dell'applicazione.
Configurare l'autenticazione integrata
Per eseguire l'autenticazione con l'autenticazione integrata, è necessario concedere le autorizzazioni per l'applicazione per connettersi all'API del servizio Batch. Questo passaggio consente all'applicazione di usare Microsoft Entra ID per autenticare le chiamate all'API del servizio Batch.
Dopo aver registrato l'applicazione, seguire questa procedura per concedere all'applicazione l'accesso al servizio Batch:
- Nel portale di Azure cercare e selezionare Registrazioni app.
- Nella pagina Registrazioni app selezionare l'applicazione.
- Nella pagina dell'applicazione selezionare Autorizzazioni API nel riquadro di spostamento a sinistra.
- Nella pagina Autorizzazioni API selezionare Aggiungi un'autorizzazione.
- Nella pagina Richiedere autorizzazioni API selezionare Azure Batch.
- Nella pagina Azure Batch, in Seleziona le autorizzazioni selezionare la casella di controllo accanto a user_impersonation e quindi selezionare Aggiungi autorizzazioni.
La pagina Autorizzazioni API mostra ora che l'applicazione Microsoft Entra ha accesso sia a Microsoft Graph che ad Azure Batch. Le autorizzazioni vengono concesse automaticamente a Microsoft Graph quando si registra un'app con Microsoft Entra ID.
Configurare un'entità servizio
Per autenticare un'applicazione in esecuzione automatica, usare un'entità servizio. Quando l'applicazione autentica con un'entità servizio, invia l'ID dell'applicazione e una chiave privata a Microsoft Entra ID.
Dopo aver registrato l'applicazione, seguire questi passaggi nel portale di Azure per configurare un'entità servizio:
- Richiedere un segreto per l'applicazione.
- Assegnare il controllo degli accessi in base al ruolo di Azure all'applicazione.
Richiedere un segreto per l'applicazione
Seguire questa procedura per creare e copiare la chiave privata da usare nel codice:
- Nel portale di Azure cercare e selezionare Registrazioni app.
- Nella pagina Registrazioni app selezionare l'applicazione.
- Nella pagina dell'applicazione selezionare Certificati e segreti nel riquadro di spostamento a sinistra.
- Nella pagina Certificati e segreti selezionare Nuovo segreto client.
- Nella pagina Aggiungi un segreto client immettere una descrizione e selezionare un periodo di scadenza per il segreto.
- Selezionare Aggiungi per creare il segreto e visualizzarlo nella pagina Certificati e segreti.
- Copiare il valore del segreto in una posizione sicura, poiché non sarà possibile accedervi nuovamente dopo aver chiuso la pagina. Se si perde l'accesso alla chiave, è possibile generarne una nuova.
Assegnare un controllo degli accessi in base al ruolo di Azure all'applicazione
Seguire questa procedura per assegnare un ruolo controllo degli accessi in base al ruolo di Azure all'applicazione. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.
- Nel portale di Azure passare all'account Batch usato dall'applicazione.
- Selezionare Controllo di accesso (IAM) nel riquadro di spostamento a sinistra.
- Nella pagina Controllo di accesso (IAM), selezionare Aggiungi assegnazione di ruolo.
- Nella pagina Aggiungi assegnazione di ruolo selezionare la scheda Ruolo e quindi selezionare il ruolo Collaboratore o Lettore per l'app.
- Selezionare la scheda Membri e selezionare Seleziona membri in Membri.
- Nella schermata Seleziona membri cercare e selezionare l'applicazione e quindi selezionare Seleziona.
- Selezionare Rivedi e assegna nella pagina Aggiungi assegnazione di ruolo.
L'applicazione dovrebbe ora essere visualizzata nella scheda Assegnazioni di ruolo della pagina Controllo di accesso (IAM) dell'account Batch.
Assegnare un ruolo personalizzato
Un ruolo personalizzato concede l'autorizzazione granulare a un utente per l'invio di processi, attività e altro ancora. È possibile usare ruoli personalizzati per impedire agli utenti di eseguire operazioni che influiscono sui costi, ad esempio la creazione di pool o la modifica di nodi.
È possibile usare un ruolo personalizzato per concedere o negare le autorizzazioni a un utente, un gruppo o un'entità servizio di Microsoft Entra per le operazioni di controllo degli accessi in base al ruolo di Azure Batch seguenti:
- 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, per qualsiasi operazione di lettura
- Microsoft.Batch/batchAccounts/listKeys/action, per qualsiasi operazione
I ruoli personalizzati sono destinati agli utenti autenticati da Microsoft Entra ID, non per le credenziali dell'account della chiave condivisa batch. Le credenziali dell'account Batch forniscono le autorizzazioni complete per l'account Batch. I processi che usano il pool automatico richiedono autorizzazioni a livello di pool.
Nota
Alcune assegnazioni di ruolo devono essere specificate nel campo actions
, mentre altre devono essere specificate nel campo dataActions
. Per altre informazioni, vedere Operazioni del provider di risorse di Azure.
L'esempio seguente mostra una definizione di ruolo personalizzato di 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":[
]
}
]
}
}
Per altre informazioni sulla creazione di un ruolo personalizzato, vedere Ruoli personalizzati di Azure.
Esempi di codice
Gli esempi di codice in questa sezione illustrano come eseguire l'autenticazione con Microsoft Entra ID mediante l'autenticazione integrata o con un'entità servizio. Gli esempi di codice usano .NET e Python, ma i concetti sono simili per altri linguaggi.
Nota
Un token di autenticazione di Microsoft Entra scade dopo un'ora. Quando si usa un oggetto BatchClient di lunga durata, è consigliabile ottenere un token da MSAL in ogni richiesta per assicurarsi di avere sempre un token valido.
A tale scopo, in .NET scrivere un metodo che recuperi il token da Microsoft Entra ID e passi tale metodo a un oggetto BatchTokenCredentials come delegato. Ogni richiesta al servizio Batch chiama il metodo delegato per assicurarsi che venga fornito un token valido. Per impostazione predefinita, MSAL memorizza nella cache i token, quindi un nuovo token viene recuperato da Microsoft Entra solo quando necessario. Per altre informazioni sui token in Microsoft Entra ID, vedere Token di sicurezza.
Esempio di codice: uso dell'autenticazione integrata di Microsof Entra con .NET di Batch
Per eseguire l'autenticazione integrata da Batch .NET:
Installare .NET di Azure Batch e i pacchetti NuGet MSAL.
Dichiarare le istruzioni
using
seguenti nel codice:using Microsoft.Azure.Batch; using Microsoft.Azure.Batch.Auth; using Microsoft.Identity.Client;
Fare riferimento all'endpoint Microsoft Entra, incluso l'ID tenant. È possibile ottenere l'ID tenant dalla pagina Panoramica di Microsoft Entra ID nel portale di Azure.
private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
Riferimento all'endpoint delle risorse per il servizio Batch:
private const string BatchResourceUri = "https://batch.core.windows.net/";
Riferimento all'account Batch:
private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
Specificare l'ID applicazione (client) per l'applicazione. È possibile ottenere l'ID applicazione dalla pagina Panoramica dell'applicazione nel portale di Azure.
private const string ClientId = "<application-id>";
Specificare l'URI di reindirizzamento indicato al momento della registrazione dell'applicazione.
private const string RedirectUri = "https://<redirect-uri>";
Scrivere un metodo di callback per acquisire il token di autenticazione da Microsoft Entra ID. L'esempio seguente chiama MSAL per autenticare un utente che interagisce con l'applicazione. Il metodo MSAL IConfidentialClientApplication.AcquireTokenByAuthorizationCode richiede all'utente le proprie credenziali. L'applicazione procede dopo che l'utente fornisce le credenziali.
Il parametro authorizationCode è il codice di autorizzazione ottenuto dal server di autorizzazione dopo l'autenticazione dell'utente.
WithRedirectUri
specifica l'URI di reindirizzamento a cui il server di autorizzazione reindirizza l'utente dopo l'autenticazione.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; }
Chiamare questo metodo con il codice seguente, sostituendo
<authorization-code>
con il codice di autorizzazione ottenuto dal server di autorizzazione. L'ambito.default
garantisce che l'utente disponga dell'autorizzazione per accedere a tutti gli ambiti per la risorsa.var token = await GetTokenUsingAuthorizationCode("<authorization-code>", "RedirectUri", new string[] { "BatchResourceUri/.default" });
Costruire un oggetto BatchTokenCredentials che accetta il delegato come parametro. Usare tali credenziali per aprire un oggetto BatchClient. Usare quindi l'oggetto BatchClient per operazioni successive sul servizio Batch:
public static void PerformBatchOperations() { Func<Task<string>> tokenProvider = () => GetTokenUsingAuthorizationCode(); using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider))) { client.JobOperations.ListJobs(); } }
Esempio di codice: uso di un'entità servizio Microsoft Entra con Batch .NET
Per eseguire l'autenticazione con un'entità servizio da Batch .NET:
Installare .NET di Azure Batch e i pacchetti NuGet MSAL.
Dichiarare le istruzioni
using
seguenti nel codice:using Microsoft.Azure.Batch; using Microsoft.Azure.Batch.Auth; using Microsoft.Identity.Client;
Fare riferimento all'endpoint Microsoft Entra, incluso l'ID tenant. Quando si usa un'entità servizio, è necessario indicare un endpoint specifico del tenant. È possibile ottenere l'ID tenant dalla pagina Panoramica di Microsoft Entra ID nel portale di Azure.
private const string AuthorityUri = "https://login.microsoftonline.com/<tenant-id>";
Riferimento all'endpoint delle risorse per il servizio Batch:
private const string BatchResourceUri = "https://batch.core.windows.net/";
Riferimento all'account Batch:
private const string BatchAccountUrl = "https://<myaccount>.<mylocation>.batch.azure.com";
Specificare l'ID applicazione (client) per l'applicazione. È possibile ottenere l'ID applicazione dalla pagina Panoramica dell'applicazione nel portale di Azure.
private const string ClientId = "<application-id>";
Specificare la chiave privata copiata dal portale di Azure.
private const string ClientKey = "<secret-key>";
Scrivere un metodo di callback per acquisire il token di autenticazione da Microsoft Entra ID. Il metodo ConfidentialClientApplicationBuilder.Create seguente chiama MSAL per l'autenticazione automatica.
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; }
Chiamare questo metodo usando il codice seguente. L'ambito
.default
garantisce che l'applicazione disponga dell'autorizzazione per accedere a tutti gli ambiti per la risorsa.var token = await GetAccessToken(new string[] { $"{BatchResourceUri}/.default" });
Costruire un oggetto BatchTokenCredentials che accetta il delegato come parametro. Usare tali credenziali per aprire un oggetto BatchClient. Usare quindi l'oggetto BatchClient per operazioni successive sul servizio Batch:
public static void PerformBatchOperations() { Func<Task<string>> tokenProvider = () => GetAccessToken(); using (var client = BatchClient.Open(new BatchTokenCredentials(BatchAccountUrl, tokenProvider))) { client.JobOperations.ListJobs(); } }
Esempio di codice: uso di un'entità servizio Microsoft Entra con Batch Python
Per eseguire l'autenticazione con un'entità servizio da Batch Python:
Installare i moduli Python azure-batch e azure-common.
Fare riferimento ai moduli:
from azure.batch import BatchServiceClient from azure.common.credentials import ServicePrincipalCredentials
Per usare un'entità servizio, specificare un endpoint specifico del tenant. È possibile ottenere l'ID tenant dalla pagina Panoramica o Proprietà di Microsoft Entra ID nel portale di Azure.
TENANT_ID = "<tenant-id>"
Riferimento all'endpoint delle risorse per il servizio Batch:
RESOURCE = "https://batch.core.windows.net/"
Riferimento all'account Batch:
BATCH_ACCOUNT_URL = "https://<myaccount>.<mylocation>.batch.azure.com"
Specificare l'ID applicazione (client) per l'applicazione. È possibile ottenere l'ID applicazione dalla pagina Panoramica dell'applicazione nel portale di Azure.
CLIENT_ID = "<application-id>"
Specificare la chiave privata copiata dal portale di Azure:
SECRET = "<secret-key>"
Creare un oggetto ServicePrincipalCredentials:
credentials = ServicePrincipalCredentials( client_id=CLIENT_ID, secret=SECRET, tenant=TENANT_ID, resource=RESOURCE )
Usare le credenziali dell'entità servizio per aprire un oggetto BatchServiceClient. Usare quindi l'oggetto BatchServiceClient per operazioni successive sul servizio Batch.
batch_client = BatchServiceClient( credentials, batch_url=BATCH_ACCOUNT_URL )
Per un esempio di Python sulla creazione di un client di Batch autenticato tramite token di Microsoft Entra, vedere l'esempio Distribuzione di un'immagine personalizzata di Azure Batch con uno script Python.
Passaggi successivi
- Autenticare le soluzioni di gestione Batch con Active Directory
- Flussi di credenziali client in MSAL.NET
- Uso di MSAL.NET per ottenere i token in base al codice di autorizzazione (per i siti Web)
- Oggetti applicazione ed entità servizio in Microsoft Entra ID
- Come creare un'applicazione e un'entità servizio Microsoft Entra in grado di accedere alle risorse
- Esempi di codice per Microsoft Identity Platform