在 Blob 连接上的 Azure Functions 中将 Key Vault Secret 与 Binder 结合使用

Using Key Vault Secret with Binder in Azure Function on Blob connection

我发现此代码示例用于添加到 Blob 存储的连接并将一些文本写入文件,但连接信息取决于包含连接字符串的环境变量名称。我不知道如何提供包含连接字符串的密钥保管库秘密引用,而不必将环境变量名称与连接字符串一起使用。

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host.Bindings.Runtime;

public static async Task Run(string input, Binder binder)
{
    var attributes = new Attribute[]
    {    
        new BlobAttribute("samples-output/path"),
        new StorageAccountAttribute("MyStorageAccount")
    };

    using (var writer = await binder.BindAsync<TextWriter>(attributes))
    {
        writer.Write("Hello World!");
    }
}

我可以使用如下代码从我的密钥库中获取连接字符串,但我不知道如何将其提供给 Binder 使用。

string StorageConnectionString = GetSecrets(Environment.GetEnvironmentVariable("StorageAccountSecretUrl")).Result.Value;

调用的函数如下:

        private static async Task<SecretBundle> GetSecrets(string Url)
        {
            AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
            KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            return await keyVaultClient.GetSecretAsync(Url).ConfigureAwait(false);
        }

objective 仅将我的密钥保管库机密用于连接字符串的更改,并将连接字符串保留在配置文件之外。

看看这个名为“为 App Service 和 Azure Functions 使用 Key Vault 引用”的 MS 文档 (https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references)。

这种技术基本上允许您使用 Key Vault 而无需实质性地更改您的函数代码。您在函数中保留对应用程序设置变量的引用(供绑定使用),但该应用程序设置又是指向 Key Vault 机密的指针。系统负责在运行时“翻译”指向秘密的指针。该过程确实涉及为应用程序创建托管标识 service/function 以获得访问 Vault 的权限。