Criar um aplicativo .NET HDInsight de autenticação não interativa
Execute o aplicativo Microsoft .NET do Azure HDInsight na própria identidade do aplicativo (não interativo) ou na 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.
Em seu aplicativo .NET não interativo, você precisa:
- Da sua ID de locatário da assinatura do Azure (também conhecida como ID de diretório). Veja Obter a ID de locatário.
- A ID do cliente do aplicativo do Microsoft Entra. Confira Criar um aplicativo do Microsoft Entra e Obter uma ID de aplicativo.
- A chave secreta do aplicativo do Microsoft Entra. Consulte Get application authentication key (Obter chave de autenticação do aplicativo).
Pré-requisitos
Um cluster HDInsight. Consulte o tutorial de introdução.
Atribuir uma função ao aplicativo do Microsoft Entra
Atribua uma função ao aplicativo do Microsoft Entra para conceder a ele permissões para executar ações. Você pode definir o escopo no nível da assinatura, do grupo de recursos ou do recurso. As permissão são herdadas para níveis inferiores do escopo. Por exemplo, adicionar um aplicativo à função Leitor de um grupo de recursos significa que o aplicativo pode ler o grupo de recursos e todos os recursos nele. Neste artigo, você definirá o escopo no nível do grupo de recursos. Para obter mais informações, veja Atribuir funções do Azure para gerenciar o acesso aos recursos de assinatura do Azure.
Para adicionar a função Proprietário ao aplicativo do Microsoft Entra
- Entre no portal do Azure.
- Navegue até o grupo de recursos que contém o cluster do HDInsight, no qual você executará a consulta Hive posteriormente neste artigo. Se você tiver um grande número de grupos de recursos, será possível usar o filtro para localizar o item desejado.
- No menu do grupo de recursos, selecione Controle de acesso (IAM).
- Selecione a guia Atribuições de função para ver as atribuições de função atuais.
- Na parte superior da página, selecione + Adicionar.
- Siga as instruções para adicionar a função Proprietário ao aplicativo do Microsoft Entra. Após adicionar a função com êxito, o aplicativo será listado na função Proprietário.
Desenvolver um aplicativo cliente HDInsight
Crie um aplicativo de console C#.
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
Execute o código a seguir:
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); } } }