如何在函数应用中正确使用带密钥库引用的Azure应用配置?

vaqhlq81  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(109)

Azure应用配置-密钥保管库引用出现问题。当前,我有一个应用配置密钥(FunctionApp:Replication:Regions),该密钥具有多个值(asia、we、sae)。因此,连接是一对多的。我为每个值添加了密钥保管库引用。但问题是,我不知道如何从函数应用读取数据,以获取密钥保管库中的值。
目前,我正在使用两种服务:
ConfigurationClient-获取一个键中的所有值。
IConfigurationRefresher来刷新应用程序配置,以获取所做的最新更改,而无需重新启动函数。
示例(存储服务):

private readonly ConfigurationClient _client;
private readonly IConfigurationRefresher _configurationRefresher;

public StorageService(ConfigurationClient client, IConfigurationRefresherProvider refresherProvider)
        {
            _client = client,
            _configurationRefresher = refresherProvider.Refreshers.First();
        }

SettingSelector settingSelector = new SettingSelector()
            {
                KeyFilter = "FunctionApp:Replication:Regions"
            };

var regions = _client.GetConfigurationSettings(settingSelector).ToList();

示例(启动):

public override void Configure(IFunctionsHostBuilder builder){
    ConfigurationClient appConfigurations = new 
    ConfigurationClient(appConfigurationsConnectionString);

    builder.Services.AddSingleton<ConfigurationClient>(appConfigurations);

}

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
       {
           builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
           {
               options.Connect(Environment.GetEnvironmentVariable("ConnectionString")).Select("FunctionApp:*").ConfigureRefresh(refreshOptions =>
               {
                   refreshOptions.Register("FunctionApp:Replication:Regions", refreshAll: true);
               });
           });
       }

当我尝试获取值-var regions = _client.GetConfigurationSettings(settingSelector).ToList();时,它返回以下内容:

{"uri":"https://appconfigurationkeyvalut.vault.azure.net/secrets/tableasia"},

{"uri":"https://appconfigurationkeyvalut.vault.azure.net/secrets/tablewe"},

{"uri":"https://appconfigurationkeyvalut.vault.azure.net/secrets/tablesea"}

我不知道如何从钥匙库中得到价值,有什么想法吗?

lymnna71

lymnna711#

  • 在Azure应用程序配置中,按照此文档操作并为以下密钥创建密钥保管库引用:
  • FunctionApp:复制:地区:亚洲
  • 函数应用程序:复制:区域:我们
  • 功能应用程序:复制:区域:海
  • 遵循this doc并创建Azure函数。请注意,不应使用ConfigurationClient。它不会为你解析密钥保管库引用。Microsoft.Extensions.Configuration.AzureAppConfiguration库将解析密钥保管库引用并使机密值在IConfiguration中可用。
  • 通过执行this doc为您的函数应用启用动态配置。您应该使用一个标记键来监控配置更改。startup.cs类似于:
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
    builder.ConfigurationBuilder.AddAzureAppConfiguration(options =>
    {
        options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                // Load all keys that start with `FunctionApp:` and have no label
                .Select("FunctionApp:*")
                // Configure to reload configuration if the registered sentinel key is modified
                .ConfigureRefresh(refreshOptions =>
                    refreshOptions.Register("FunctionApp:Sentinel", refreshAll: true));
    });
}

1.您的密钥库引用的机密值可以通过IConfiguration在您的Run函数中自动访问。例如,_configuration["FunctionApp:Replication:Regions:Asia"]

相关问题