我使用MSI使Azure Key Vault与我的Web应用程序一起工作。现在,我正在为Web作业设置KV,这些作业只是运行.Net Framework 4.7.2的控制台应用程序。当我尝试将“使用Azure Key Vault保护”作为连接服务时,它没有显示在列表中。我正在运行最新版本的Visual Studio 2019专业版。我已经更新,甚至重新安装了VS,但是它仍然没有显示。只是不允许控制台应用程序具有密钥保管库吗?
使用MSI,Web作业如何与Key Vault一起使用?
答案 0 :(得分:1)
当然,您可以使用Azure Web应用程序MSI来访问Azure控制台应用程序Webjobs中的关键文件库。我实现了一个简单的控制台应用程序webjobs演示,该演示为您读取了密钥库中的秘密,请尝试以下代码:
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;
using Microsoft.Azure.Services.AppAuthentication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace kvtest
{
class Program
{
static void Main(string[] args)
{
var keyVaultName = "<your key vault name>";
var secretName = "<your secret name>";
Console.WriteLine("Get " + secretName + " from key vault :" + GetSecret(secretName, keyVaultName).GetAwaiter().GetResult());
}
public static async Task<string> GetSecret(string secretName,string keyVaultName)
{
try
{
return (await GetClient().GetSecretAsync("https://"+ keyVaultName + ".vault.azure.net/", secretName)).Value;
}
catch (Exception ex)
{
return ex.Message;
}
}
public static async Task<string> GetAccessTokenAsync()
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
return await azureServiceTokenProvider.GetAccessTokenAsync("https://vault.azure.net");
}
private static KeyVaultClient GetClient()
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
return keyVaultClient;
}
}
}
发布到Azure webapp并手动运行它,检查其日志,我们可以看到它已成功从Key Vault获得了秘密值:
顺便说一句,在运行此演示之前,请确保已为Azure webapp启用MSI,并且已在Azure密钥保管库中为其配置了访问策略。
如果您还有其他疑问,请随时告诉我。