【问题标题】:How to configure Azure KeyVault refresh interval with the Azure.Security.KeyVault libraries如何使用 Azure.Security.KeyVault 库配置 Azure KeyVault 刷新间隔
【发布时间】:2020-12-23 03:34:52
【问题描述】:

我正在尝试配置 Key Vault 值的定期刷新。我的 Visual Studio 生成的原始代码是这样的

var keyvaultEndpoint = new Uri($"https://{vaultName}.vault.azure.net/");
config.AddAzureKeyVault(
    keyVaultEndpoint,
    new DefaultAzureCredential()
);

我发现其中一个扩展方法接受 AzureKeyVaultConfigurationOptions 类型的对象,该对象具有名为 ReloadInterval 的 TimeSpan 属性。事实证明,此扩展方法是 Microsoft 旧 SDK 的一部分,已被替换,如SO post 中所述。万一帖子消失了,OP 遇到了this error,它谈到了包“Microsoft.Azure.KeyVault”被替换为“Azure.Security.KeyVault”,他们建议移动到最新的代码。由于AzureKeyVaultConfigurationOptions 是一个 SDK v3 对象,因此不再推荐。

那么如果AzureKeyVaultConfigurationOptions 不包含在新的 SDK 中,那么推荐的设置重新加载间隔的方法是什么?

【问题讨论】:

  • 你的意思是AzureKeyVaultConfigurationOptions.ReloadInterval 和包Microsoft.Extensions.Configuration.AzureKeyVault
  • @PamelaPeng 我认为你是对的,我在写这个的时候错误地复制了错误的类名。我马上更新。那个类是 v3,据我所知不包含在 SDK v4 中。

标签: azure asp.net-core azure-keyvault


【解决方案1】:

实际上可以使用Azure.Extensions.AspNetCore.Configuration.Secrets。 (用 1.0.2 测试)

如下:

config.AddAzureKeyVault(
    new Uri(Configuration["KeyVault:URI"]), 
    new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            ExcludeSharedTokenCacheCredential = true,
            VisualStudioTenantId = Configuration["AzureAd:TenantId"]
        }), 
    new AzureKeyVaultConfigurationOptions() 
    {
        ReloadInterval = TimeSpan.FromMinutes(15)
    }
);

【讨论】:

  • 谢谢!似乎他们在 1.0.2 版本中添加了它
【解决方案2】:

正如您在document 中看到的,ReloadInterval 仅用于 v3。在version 4.x.x 中,有一个类似的类用于重试尝试的延迟。

RetryOptions class 是一组选项,可以指定这些选项来影响如何进行重试,并且可以重试失败。 Delay 表示固定方法的重试尝试之间的延迟。下面展示如何在Secret中使用它,它也可以用于CertificatesKeys

SecretClientOptions options = new SecretClientOptions()
    {
        Retry =
        {
            Delay= TimeSpan.FromSeconds(2),
            MaxDelay = TimeSpan.FromSeconds(16),
            MaxRetries = 5,
            Mode = RetryMode.Exponential
         }
    };
var client = new SecretClient(new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"), new DefaultAzureCredential(),options);

KeyVaultSecret secret = client.GetSecret("mySecret");

string secretValue = secret.Value;

【讨论】:

  • 这似乎是您手动获取秘密的时候。这将如何与 IConfiguration 集成,或使用 IOptions 注入配置?
  • 这不适用于定期刷新秘密,而是在无法检索秘密时设置重试策略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多