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:
L'autenticazione integrata autentica un utente che interagisce con un'applicazione. L'applicazione raccoglie le credenziali di un utente e usa tali credenziali per autorizzare l'accesso alle risorse batch.
Un'entità servizio autentica un'applicazione automatica. 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 sull'ID Microsoft Entra, 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 dell'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 sinistro e visualizzare l'ID tenant nella pagina Proprietà.
Importante
L'endpoint Microsoft Entra specifico del tenant è necessario 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 facoltativo. È 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 https://batch.core.windows.net/
della risorsa Batch per acquisire un token per l'autenticazione delle 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 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 forniscono informazioni sull'applicazione all'ID Microsoft Entra. Microsoft Entra ID fornisce quindi un ID applicazione, detto anche ID client, che si usa per associare l'applicazione all'ID Microsoft Entra in fase di esecuzione. Per altre informazioni sull'ID applicazione, vedere Oggetti applicazione e 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 all'applicazione l'autorizzazione 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:
- Nella 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 Richiedi autorizzazioni API selezionare Azure Batch.
- Nella pagina Azure Batch, in Seleziona 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 esegue l'autenticazione usando un'entità servizio, invia sia l'ID applicazione che una chiave privata a Microsoft Entra ID.
Dopo aver registrato l'applicazione, seguire questa procedura 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:
- Nella 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 un luogo sicuro, perché non sarà possibile accedervi di nuovo dopo aver lasciato questa pagina. Se si perde l'accesso alla chiave, è possibile generarne uno nuovo.
Assegnare il 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 i passaggi dettagliati, vedere Assegnare ruoli di Azure usando il portale di Azure.
- Nella 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 dall'ID Microsoft Entra, non per le credenziali dell'account della chiave condivisa batch. Le credenziali dell'account Batch forniscono l'autorizzazione completa all'account Batch. I processi che usano il pool automatico richiedono autorizzazioni a livello di pool.
Nota
Alcune assegnazioni di ruolo devono essere specificate nel actions
campo , mentre altre devono essere specificate nel dataActions
campo . 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 usando 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 recupera il token dall'ID Microsoft Entra e passare 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 solo da Microsoft Entra-only quando necessario. Per altre informazioni sui token in Microsoft Entra ID, vedere Token di sicurezza.
Esempio di codice: Usare l'autenticazione integrata di Microsoft Entra con Batch .NET
Per eseguire l'autenticazione con l'autenticazione integrata da Batch .NET:
Dichiarare le istruzioni seguenti
using
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 nella portale di Azure.
private const string ClientId = "<application-id>";
Specificare l'URI di reindirizzamento specificato 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 le 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: usare un'entità servizio Microsoft Entra con Batch .NET
Per eseguire l'autenticazione con un'entità servizio da Batch .NET:
Dichiarare le istruzioni seguenti
using
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 fornire 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 nella 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[] { "BatchResourceId/.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 le 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: Usare un'entità servizio Microsoft Entra con Batch Python
Per eseguire l'autenticazione con un'entità servizio da Batch Python:
Installare i moduli azure-batch e azure-common Python.
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 di Microsoft Entra ID o proprietà nella 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 nella 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 le operazioni successive sul servizio Batch.
batch_client = BatchServiceClient( credentials, batch_url=BATCH_ACCOUNT_URL )
Per un esempio python su come creare un client Batch autenticato usando un token Microsoft Entra, vedere l'esempio Deploying Azure Batch Custom Image with a Python Script (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 di applicazione ed entità servizio in Microsoft Entra ID
- Come creare un'applicazione Microsoft Entra e un'entità servizio in grado di accedere alle risorse
- Esempi di codice di Microsoft Identity Platform