J'ai découvert qu'il est facile de se connecter à Azure Keyvault à l'aide de l'identité gérée. La documentation montre comment le faire:
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(
$"https://{builtConfig["KeyVaultName"]}.vault.Azure.net/",
keyVaultClient,
new DefaultKeyVaultSecretManager());
Ensuite, j'ai réalisé qu'il nécessite le package Microsoft.Azure.KeyVault
Qui est obsolète. Donc, j'ai du mal à comprendre comment faire ce qui précède avec SDK 4. Toute la documentation que je trouve est liée à la SDK 3.
[EDIT] J'ai découvert que le code suivant fonctionne pour obtenir le secret Azure KeyVault à l'aide d'identification gérée avec SDK 4. Cependant, je ne peux pas voir comment ajouter ceci à ma configuration. Il avait l'habitude d'être fait avec config.AddAzureKeyVault()
à partir du package Microsoft.extensions.Configuration.AzUREKeyVault, mais il n'est pas compatible avec le SDK 4 SecretClient:
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var azureCredentialOptions = new DefaultAzureCredentialOptions();
var credential = new DefaultAzureCredential(azureCredentialOptions);
var secretClient = new SecretClient(new System.Uri("https://mykeyvault.vault.Azure.net/"), credential);
var secret = secretClient.GetSecret("StorageConnectionString");
config.AddAzureKeyVault()
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
J'utilise quelque chose comme ça,
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
// Pass appropriate connection string
var azureServiceTokenProvider = new
AzureServiceTokenProvider(certThumbprintConnectionString);
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
config.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
private static string GetKeyVaultEndpoint() => "https://<<key-vault-name>>.vault.Azure.net";