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?
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
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.
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.
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é.
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;