8 votes

Connexion à Azure Vault à l'aide de MSI

J'essaie de me connecter à mon azure vault à partir d'une application console en utilisant MSI.

Pour cette chambre forte, j'ai ajouté mon utilisateur comme principe sélectionné.
Le code que j'utilise pour me connecter est

var azureServiceTokenProvider = new AzureServiceTokenProvider();

var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

var secret = await keyVaultClient.GetSecretAsync("https://<vaultname>.vault.azure.net/secrets/<SecretName>").ConfigureAwait(false);

J'obtiens l'exception suivante

Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException : Parameters : Connectionstring : [Aucune chaîne de connexion spécifiée], Resource : https://vault.azure.net Autorité

enter image description here

9voto

evilSnobu Points 300
  1. Activer l'identité de service gérée dans le Configuration sous votre machine virtuelle.

Enable MSI in the virtual machine configuration blade

  1. Recherche de Nom de votreVM et ajoutez-le à votre Key Vault sous Politiques d'accès . Ajouter les autorisations de clé/secret/certificat.

Add Service Principal to Key Vault

  1. Sur votre VM Azure, exécutez l'application console.

    class Program { // Target C# 7.1+ in your .csproj for async Main static async Task Main() { var azureServiceTokenProvider = new AzureServiceTokenProvider();

        var keyVaultClient = new KeyVaultClient(
              new KeyVaultClient.AuthenticationCallback(
                    azureServiceTokenProvider.KeyVaultTokenCallback));
    
        var secret = await keyVaultClient.GetSecretAsync(
              "https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
    
        Console.WriteLine(secret.Value);
        Console.ReadLine();
    }

    }

Console output

~~Pour une exécution locale, créez votre propre enregistrement d'application Azure AD (de type Web App/Web API pour en faire un client confidentiel), ajoutez-la à Key Vault et utilisez son client_id et son client_secret lors de l'acquisition du jeton d'accès -.
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application#gettoken~~

Comme Varun mentionné dans les commentaires, il existe désormais une meilleure façon d'obtenir un jeton d'accès lors d'une exécution locale sans exposer le principal d'un service.

https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication#local-development-authentication

4voto

Snr Points 436

Pour une exécution locale.

  1. installer Azure Cli
  2. Ouvrez Windows Powershell
  3. écrire az login (il donnera une url et un code)
  4. Ouvrez l'URL et entrez le code qui est donné avec le login az.

puis obtenir la valeur secrète comme ceci

 var secret =  keyVaultClient.GetSecretAsync("https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME").GetAwaiter().GetResult() ;
     secret.Value; //will be your secret.

3voto

Une réponse correcte est déjà donnée ci-dessus, voici une réponse supplémentaire :-)

Application Azure MSI avec App Service & Vault

  1. Activez l'identité gérée attribuée par le système pour votre App Service, vérifiez la section Identité sous les paramètres. enter image description here

  2. Ajouter une politique sous Vault

  3. configurer votre code derrière

    enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X