我使用 MSI 将 Azure Key Vault 与我的 Web 应用程序配合使用。现在我正在为我的 webjobs 设置 KV,它们只是运行 .Net Framework 4.7.2 的控制台应用程序。当我尝试将“使用 Azure Key Vault 确保安全”作为连接服务时,它不会显示在列表中。我正在运行最新版本的 Visual Studio 2019 Professional。我已经更新了,甚至重新安装了VS,但它仍然不显示。控制台应用程序是否不允许拥有 Key Vault?
Web 作业如何与使用 MSI 的 Key Vault 配合使用?
最佳答案
当然,您可以使用 Azure Web 应用程序 MSI 访问 Azure 控制台应用程序 Webjobs 中的 key 保管库。我实现了一个简单的控制台应用程序 webjobs 演示,它为您从 key 保管库读取 secret ,请尝试以下代码:
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获取 secret 值:
顺便说一句,在运行此演示之前,请确保您已为 Azure Web 应用启用 MSI,并且已在 Azure key 保管库中为其配置了访问策略。
如果您有任何进一步的疑虑,请随时告诉我。
关于用于控制台应用程序 webjob 的 Azure Key Vault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295625/