当禁用的 Key Vault 机密作为 KV 引用存在时,Azure 应用程序配置抛出异常并且不加载配置
Azure app configuration throws exception & does not load the configuration when a disabled key vault secret is present as KV reference
我有一个带有 2 个密钥的 Azure 应用程序配置。两者都将密钥保管库引用作为值。当由于某种原因(因为到期日期已过,现在不需要等)禁用其中一个密钥保管库机密时,整个配置加载失败并出现 KeyVault 引用异常。
我尝试使用 SetSecretResolver,但看起来如果注册的 KV 客户端遇到任何异常,将不会调用秘密解析器回退。这个问题有什么解决办法吗?基本上,如果任何或某些 KV 机密被禁用,我不想停止加载配置。
顺便说一句,我尝试设置“选项:真”来抑制异常抛出,但没有加载配置。
应用程序配置键:-
abc:def:key1 - has a valid key vault secret
abc:def:key2 - has a disabled key vault secret.
代码:-
public IConfiguration AzureAppConfig { get; set; }
public IConfigurationRefresher AzureAppConfigRefresher { get; set; }
builder.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri("uri"), credential)
.Select("abc:def:*")
.ConfigureKeyVault(kvOptions =>
{
kvOptions.SetCredential(credential);
})
.ConfigureRefresh(refresh =>
{
refresh.Register("abc:def:key1")
.SetCacheExpiration(TimeSpan.FromMinutes(30));
});
AzureAppConfigRefresher = options.GetRefresher();
});
AzureAppConfig = builder.Build();
在此先感谢您的帮助。
Key Vault 不允许对 disabled/expired 机密进行读取操作并引发 403 错误。这是设计使然。 App Config 提供程序从不隐藏 KeyVault 抛出的异常,因为这会使应用程序配置处于未定义状态。但是如果你想更好地控制错误处理,你可以使用 SetSecretResolver API.
实现你自己的秘密解析器
I tried using SetSecretResolver, but it looks like if the registered KV client encounters any exception, secret resolver fallback will not be called.
没错。 SetSecretResolver 不处理注册的 SecretClient 抛出的错误。仅当没有使用相同保管库 URI 注册任何 SecretClient 时才会使用它。此 GitHub 问题包含有关设置您自己的秘密解决代码的更多详细信息:https://github.com/Azure/AppConfiguration-DotnetProvider/issues/209#issuecomment-743427521
Link 到 GitHub 上的相同讨论:https://github.com/Azure/AppConfiguration-DotnetProvider/issues/309
我有一个带有 2 个密钥的 Azure 应用程序配置。两者都将密钥保管库引用作为值。当由于某种原因(因为到期日期已过,现在不需要等)禁用其中一个密钥保管库机密时,整个配置加载失败并出现 KeyVault 引用异常。 我尝试使用 SetSecretResolver,但看起来如果注册的 KV 客户端遇到任何异常,将不会调用秘密解析器回退。这个问题有什么解决办法吗?基本上,如果任何或某些 KV 机密被禁用,我不想停止加载配置。 顺便说一句,我尝试设置“选项:真”来抑制异常抛出,但没有加载配置。
应用程序配置键:-
abc:def:key1 - has a valid key vault secret
abc:def:key2 - has a disabled key vault secret.
代码:-
public IConfiguration AzureAppConfig { get; set; }
public IConfigurationRefresher AzureAppConfigRefresher { get; set; }
builder.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri("uri"), credential)
.Select("abc:def:*")
.ConfigureKeyVault(kvOptions =>
{
kvOptions.SetCredential(credential);
})
.ConfigureRefresh(refresh =>
{
refresh.Register("abc:def:key1")
.SetCacheExpiration(TimeSpan.FromMinutes(30));
});
AzureAppConfigRefresher = options.GetRefresher();
});
AzureAppConfig = builder.Build();
在此先感谢您的帮助。
Key Vault 不允许对 disabled/expired 机密进行读取操作并引发 403 错误。这是设计使然。 App Config 提供程序从不隐藏 KeyVault 抛出的异常,因为这会使应用程序配置处于未定义状态。但是如果你想更好地控制错误处理,你可以使用 SetSecretResolver API.
实现你自己的秘密解析器I tried using SetSecretResolver, but it looks like if the registered KV client encounters any exception, secret resolver fallback will not be called.
没错。 SetSecretResolver 不处理注册的 SecretClient 抛出的错误。仅当没有使用相同保管库 URI 注册任何 SecretClient 时才会使用它。此 GitHub 问题包含有关设置您自己的秘密解决代码的更多详细信息:https://github.com/Azure/AppConfiguration-DotnetProvider/issues/209#issuecomment-743427521
Link 到 GitHub 上的相同讨论:https://github.com/Azure/AppConfiguration-DotnetProvider/issues/309