Creare un'applicazione HDInsight .NET di autenticazione non interattiva

Eseguire l'applicazione Microsoft .NET Azure HDInsight con l'identità dell'applicazione (non interattiva) o con l'identità dell'utente connesso dell'applicazione (interattiva). Questo articolo descrive come creare un'applicazione .NET di autenticazione non interattiva per connettersi ad Azure e gestire HDInsight. Per un esempio di applicazione interattiva, vedere Connettersi ad Azure HDInsight.

Dall'applicazione .NET non interattiva, è necessario disporre degli elementi seguenti:

Prerequisiti

Un cluster HDInsight. Vedere l'esercitazione introduttiva.

Assegnare un ruolo all'applicazione Microsoft Entra

Assegnare un ruolo all'applicazione Microsoft Entra per concedergli le autorizzazioni per eseguire azioni. È possibile impostare l'ambito al livello della sottoscrizione, del gruppo di risorse o della risorsa. Le autorizzazioni vengono ereditate ai livelli inferiori dell'ambito. Ad esempio, l'aggiunta di un'applicazione al ruolo Lettore per un gruppo di risorse significa che l'applicazione può leggere il gruppo di risorse e tutte le risorse in esso contenute. In questo articolo si imposta l'ambito a livello di gruppo di risorse. Per altre informazioni, vedere Assegnare ruoli di Azure per gestire l'accesso alle risorse della sottoscrizione di Azure.

Per aggiungere il ruolo Proprietario all'applicazione Microsoft Entra

  1. Accedi al portale di Azure.
  2. Passare al gruppo di risorse con il cluster HDInsight in cui verrà eseguita la query Hive più avanti in questo articolo. Se c'è un numero elevato di gruppi di risorse, è possibile usare il filtro per trovare il gruppo desiderato.
  3. Nel menu relativo al gruppo di risorse selezionare Controllo di accesso (IAM).
  4. Selezionare la scheda Assegnazioni di ruolo per visualizzare l'elenco corrente di assegnazioni di ruolo.
  5. Nella parte superiore della pagina selezionare + Aggiungi.
  6. Seguire le istruzioni per aggiungere il ruolo Proprietario all'applicazione Microsoft Entra. Dopo avere aggiunto il ruolo, l'applicazione viene elencata per il ruolo Proprietario.

Sviluppare un'applicazione client HDInsight

  1. Creare un'applicazione console C#.

  2. Aggiungere i pacchetti NuGet seguenti:

    • Install-Package Microsoft.Azure.Common.Authentication -Pre
    • Install-Package Microsoft.Azure.Management.HDInsight -Pre
    • Install-Package Microsoft.Azure.Management.Resources -Pre
  3. Eseguire il codice seguente:

    using System;
    using System.Security;
    using Microsoft.Azure;
    using Microsoft.Azure.Common.Authentication;
    using Microsoft.Azure.Common.Authentication.Factories;
    using Microsoft.Azure.Common.Authentication.Models;
    using Microsoft.Azure.Management.Resources;
    using Microsoft.Azure.Management.HDInsight;
    
    namespace CreateHDICluster
    {
        internal class Program
        {
            private static HDInsightManagementClient _hdiManagementClient;
    
            private static Guid SubscriptionId = new Guid("<Enter your Azure subscription ID>");
            private static string tenantID = "<Enter your tenant ID (also called directory ID)>";
            private static string applicationID = "<Enter your application ID>";
            private static string secretKey = "<Enter the application secret key>";
    
            private static void Main(string[] args)
            {
                var key = new SecureString();
                foreach (char c in secretKey) { key.AppendChar(c); }
    
                var tokenCreds = GetTokenCloudCredentials(tenantID, applicationID, key);
                var subCloudCredentials = GetSubscriptionCloudCredentials(tokenCreds, SubscriptionId);
    
                var resourceManagementClient = new ResourceManagementClient(subCloudCredentials);
                resourceManagementClient.Providers.Register("Microsoft.HDInsight");
    
                _hdiManagementClient = new HDInsightManagementClient(subCloudCredentials);
    
                var results = _hdiManagementClient.Clusters.List();
                foreach (var name in results.Clusters)
                {
                    Console.WriteLine("Cluster Name: " + name.Name);
                    Console.WriteLine("\t Cluster type: " + name.Properties.ClusterDefinition.ClusterType);
                    Console.WriteLine("\t Cluster location: " + name.Location);
                    Console.WriteLine("\t Cluster version: " + name.Properties.ClusterVersion);
                }
                Console.WriteLine("Press Enter to continue");
                Console.ReadLine();
            }
    
            /// Get the access token for a service principal and provided key.          
            public static TokenCloudCredentials GetTokenCloudCredentials(string tenantId, string clientId, SecureString secretKey)
            {
                var authFactory = new AuthenticationFactory();
                var account = new AzureAccount { Type = AzureAccount.AccountType.ServicePrincipal, Id = clientId };
                var env = AzureEnvironment.PublicEnvironments[EnvironmentName.AzureCloud];
                var accessToken =
                    authFactory.Authenticate(account, env, tenantId, secretKey, ShowDialog.Never).AccessToken;
    
                return new TokenCloudCredentials(accessToken);
            }
    
            public static SubscriptionCloudCredentials GetSubscriptionCloudCredentials(SubscriptionCloudCredentials creds, Guid subId)
            {
                return new TokenCloudCredentials(subId.ToString(), ((TokenCloudCredentials)creds).Token);
            }
        }
    }
    

Passaggi successivi