用于控制台应用程序 webjob 的 Azure Key Vault

标签 azure azure-webjobs azure-keyvault

我使用 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 值:

enter image description here

顺便说一句,在运行此演示之前,请确保您已为 Azure Web 应用启用 MSI,并且已在 Azure key 保管库中为其配置了访问策略。

如果您有任何进一步的疑虑,请随时告诉我。

关于用于控制台应用程序 webjob 的 Azure Key Vault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295625/

相关文章:

json - Azure CLI ARM 参数 json 使用变量检索 keyvault secret

azure - 如何仅将 key 保管库 secret 分配给该特定的 Web 应用程序?

azure - 在azure门户中创建调度程序时出现"Can not find subscription"错误

c# - 更改 WebJobs 连接字符串 AzureWebJobsStorage 和 AzureWebJobsDashboard 的默认名称

Azure WebJob 在 WebJobs 仪表板中的状态为 "Never finished"

azure - 如何通过事件中心在 ARM 模板中使用 listkeys 函数

从 ARM 模板访问 Azure Key Vault

php - Azure SDK for php blob 下载导致内存不足

android - Azure 应用服务和通知中心是否可以与 2 个或更多 Android 应用共享?

azure - 是否可以通过 C# 在 Azure 中创建 key 保管库