Partilhar via


Criar um aplicativo .NET HDInsight de autenticação não interativa

Execute seu aplicativo Microsoft .NET Azure HDInsight sob a própria identidade do aplicativo (não interativo) ou sob a identidade do usuário conectado do aplicativo (interativo). Este artigo mostra como criar um aplicativo .NET de autenticação não interativa para se conectar ao Azure e gerenciar o HDInsight. Para obter um exemplo de um aplicativo interativo, consulte Conectar-se ao Azure HDInsight.

A partir do seu aplicativo .NET não interativo, você precisa:

Pré-requisitos

Um cluster HDInsight. Consulte o tutorial de introdução.

Atribuir uma função ao aplicativo Microsoft Entra

Atribua uma função ao seu aplicativo Microsoft Entra para conceder-lhe permissões para executar ações. Você pode definir o escopo no nível da assinatura, grupo de recursos ou recurso. As permissões são herdadas para níveis mais baixos de escopo. Por exemplo, adicionar um aplicativo à função Leitor para um grupo de recursos significa que o aplicativo pode ler o grupo de recursos e quaisquer recursos nele. Neste artigo, você define o escopo no nível do grupo de recursos. Para obter mais informações, consulte Atribuir funções do Azure para gerenciar o acesso aos recursos de assinatura do Azure.

Para adicionar a função Proprietário ao aplicativo Microsoft Entra

  1. Inicie sessão no portal do Azure.
  2. Navegue até o grupo de recursos que tem o cluster HDInsight no qual você executará sua consulta do Hive mais adiante neste artigo. Se você tiver um grande número de grupos de recursos, poderá usar o filtro para encontrar o que deseja.
  3. No menu do grupo de recursos, selecione Controle de acesso (IAM).
  4. Selecione a guia Atribuições de função para ver as atribuições de função atuais.
  5. Na parte superior da página, selecione + Adicionar.
  6. Siga as instruções para adicionar a função Proprietário ao seu aplicativo Microsoft Entra. Depois de adicionar a função com êxito, o aplicativo é listado na função Proprietário.

Desenvolver um aplicativo cliente HDInsight

  1. Crie uma aplicação de consola C#.

  2. Adicione os seguintes pacotes NuGet :

    • Install-Package Microsoft.Azure.Common.Authentication -Pre
    • Install-Package Microsoft.Azure.Management.HDInsight -Pre
    • Install-Package Microsoft.Azure.Management.Resources -Pre
  3. Execute o seguinte código:

    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);
            }
        }
    }
    

Próximos passos