web-dev-qa-db-fra.com

Coffre-fort Azure: accès refusé

J'ai le code suivant pour obtenir un secret du coffre-fort de clés Azure:

public static async Task<string> GetToken(string authority, string resource, string scope)
    {
        var authContext = new AuthenticationContext(authority);
        ClientCredential clientCred = new ClientCredential(...); //app id, app secret
        AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);

        if (result == null)
            throw new InvalidOperationException("Failed to obtain the JWT token");

        return result.AccessToken;
    }

    public static string GetSecret(string secretName)
    {
        KeyVaultClient keyVaultClient = new KeyVaultClient(GetToken);
        try
        {
            return keyVaultClient.GetSecretAsync("my-key-vault-url", secretName).Result.Value;
        }
        catch(Exception ex)
        {
            return "Error";
        }
    }

L'erreur que je reçois est "accès refusé", ce qui (je pense) signifie que l'id, le secret et l'URL du coffre-fort sont corrects. Cependant, je ne sais pas ce que je peux faire différemment pour corriger cette erreur. Existe-t-il un paramètre dans le portail Azure qui m'empêche de lire un secret?

14
Eutherpy

Pour réparer l'accès refusé, vous devez configurer les autorisations Active Directory. Accorder l'accès à KeyVault. 

1. Utilisation de PowerShell Exécuter la commande suivante:

Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey

2. Utilisation du portail Azure

  1. Coffres à clés ouvertes
  2. Sélectionnez Access Policies dans le panneau de ressources Key Vault.
  3. Cliquez sur le bouton [+ Ajouter nouveau] en haut de la lame.
  4. Cliquez sur Select Principal pour sélectionner l'application créée précédemment.
  5. Dans le menu déroulant Autorisations de clé, sélectionnez les autorisations "Déchiffrer", "Signer", "Obtenir", "UnwrapKey".
  6. Sauvegarder les modifications

Autorise l'application à utiliser la clé ou le secret

18
Alexandr

La question spécifiait l'utilisation du portail Azure. J'ai documenté la création d'un principal de service pour l'accès Key Vault ici .

Spécifiquement à partir de l'étape 2:

Ouvrez le coffre-fort de clés dans le portail Azure et sélectionnez le panneau Stratégies d'accès sous Paramètres. Cliquez sur Ajouter, puis sur Sélectionner le principal - vous devez entrer le nom complet de l'application enregistrée que vous avez créée à l'étape précédente dans la zone de recherche avant qu'elle ne s'affiche .

Vous pouvez sélectionner un modèle approprié dans la liste déroulante supérieure ou choisir manuellement les autorisations de clé, de secret ou de certificat. Ne vous inquiétez pas de l'application autorisée à ce stade.

IMPORTANT: appuyer sur le bouton OK ajoutera votre nouvelle politique à la liste, mais elle ne sera pas sauvegardée! Assurez-vous de cliquer sur Enregistrer avant de continuer.

3
neogeek

Que se passe-t-il - votre principal de service n'a pas l'autorisation d'effectuer cette opération. Jetez un coup d'oeil à ce fil.

Comment corriger une erreur "Operation 'set' not allowed" lors de la création d'un secret Azure KeyVault par programme?

2
4c74356b41

Si vous souhaitez autoriser cette même application à liresecretsdans votre coffre-fort, exécutez la commande suivante:

Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get

Lorsque vous enregistrez une application dans Azure ClientId, il est généré.

1
Dhananjay Yadav

Clé d'accès Vault en code .Net Paramètre Azure: - App Service - 1-Enable-MSI (identité du service géré) -ON

Key Vault: 1-Ouvrez Key Vault 2-Sélectionnez Stratégies d'accès dans le panneau de ressources Key Vault.

3- Cliquez sur le bouton [+ Ajouter un nouveau] en haut de la lame 4-Cliquez sur Sélectionner principal pour sélectionner l'application (App Service) créée précédemment

Code .Net: - Code pour accéder aux secrets du coffre-fort de clés dans le code .Net

 var azureServiceTokenProvider = new AzureServiceTokenProvider();
        var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
        var secret = keyVaultClient.GetSecretAsync("https://test.vault.Azure.net/", "clientid").Result.Value;
1
Priti kumari