Creare applicazioni .NET HDInsight di autenticazione non interattive

È possibile eseguire l'applicazione .NET Azure HDInsight con l'identità specifica dell'applicazione (non interattiva) o con l'identità dell'utente che ha eseguito l'accesso all'applicazione (interattiva). Per un esempio dell'applicazione interattiva, vedere Connettersi ad Azure HDInsight. Questo articolo descrive come creare un'applicazione .NET di autenticazione non interattiva per connettersi ad Azure e gestire HDInsight.

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

Prerequisiti

Assegnare l'applicazione Azure AD a un ruolo

È necessario assegnare l'applicazione a un ruolo per concederle autorizzazioni per l'esecuzione di azioni. È possibile impostare l'ambito al livello della sottoscrizione, del gruppo di risorse o della risorsa. Le autorizzazioni vengono ereditate a livelli inferiori dell'ambito. Se ad esempio si aggiunge un'applicazione al ruolo Lettore per un gruppo di risorse, l'applicazione è in grado di leggere il gruppo di risorse e le risorse in esso contenute. In questa esercitazione verrà impostato l'ambito a livello di gruppo di risorse. Per altre informazioni, vedere Usare le assegnazioni di ruolo per gestire l'accesso alle risorse della sottoscrizione di Azure

Per aggiungere il ruolo Proprietario all'applicazione Azure AD

  1. Accedere al portale di Azure.
  2. Fare clic su Gruppo di risorse nel pannello di sinistra.
  3. Fare clic sul gruppo di risorse contenente il cluster HDInsight in cui verrà eseguita la query Hive più avanti in questa esercitazione. Se è presente un numero eccessivo di gruppi di risorse, è possibile usare il filtro.
  4. Scegliere Controllo di accesso (IAM) dal menu del gruppo di risorse.
  5. Fare clic su Aggiungi nel pannello Utenti.
  6. Seguire le istruzioni per aggiungere il ruolo Proprietario all'applicazione Azure AD creata nella procedura precedente. Al termine, l'applicazione verrà visualizzata nel pannello Utenti con il ruolo Proprietario.

Sviluppare l'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. Usare il codice di esempio 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 (A.K.A. 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