You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多租户ASP.NET应用Azure KeyVault请求超限问题解决方案咨询

解决方案建议

优先实现带额外缓存的密钥提供程序,拆分KeyVault作为备选方案,具体分析如下:

一、优先选择缓存方案

Azure Key Vault SDK本身提供基础缓存,但默认策略可能无法应对大规模部署的请求峰值,你可以通过以下方式优化:

  • 调整SDK自带缓存配置:通过AzureKeyVaultConfigurationOptions设置更长的缓存过期时间(根据密钥更新频率调整,比如24小时),减少重复请求。示例代码:
    builder.AddAzureKeyVault(
        uri,
        credential,
        new AzureKeyVaultConfigurationOptions
        {
            SecretManager = new KeyVaultSecretManager(),
            CacheExpiration = TimeSpan.FromHours(24)
        });
    
  • 自定义带缓存的密钥管理器:如果需要更灵活的缓存逻辑(比如分布式缓存、自定义缓存键规则),可以实现IKeyVaultSecretManager并集成内存缓存或Redis。示例代码:
    public class CachedKeyVaultSecretManager : IKeyVaultSecretManager
    {
        private readonly IKeyVaultSecretManager _innerManager;
        private readonly IMemoryCache _cache;
        private readonly TimeSpan _cacheDuration;
    
        public CachedKeyVaultSecretManager(IKeyVaultSecretManager innerManager, IMemoryCache cache, TimeSpan cacheDuration)
        {
            _innerManager = innerManager;
            _cache = cache;
            _cacheDuration = cacheDuration;
        }
    
        public bool Load(SecretProperties secret) => _innerManager.Load(secret);
    
        public async Task<string> GetKeyAsync(SecretBundle secret)
        {
            var cacheKey = $"KV_Secret_{secret.Name}";
            return await _cache.GetOrCreateAsync(cacheKey, async entry =>
            {
                entry.AbsoluteExpirationRelativeToNow = _cacheDuration;
                return await _innerManager.GetKeyAsync(secret);
            });
        }
    }
    
    // 注册使用
    builder.Services.AddMemoryCache();
    builder.AddAzureKeyVault(
        uri,
        credential,
        sp => new CachedKeyVaultSecretManager(new KeyVaultSecretManager(), sp.GetRequiredService<IMemoryCache>(), TimeSpan.FromHours(24)));
    
  • 优势:无需改变现有KeyVault架构,管理成本低,能将部署时的请求量大幅降低——每个密钥在缓存有效期内仅从KeyVault获取一次,不受实例数量影响。

二、拆分KeyVault的适用场景

如果缓存方案无法满足需求(比如密钥更新频率极高,缓存过期时间过短导致请求量仍超标),或出于租户隔离、权限精细化管控的需求,可考虑拆分KeyVault:

  • 拆分策略:可按租户维度拆分(每个租户一个KeyVault),或按服务维度拆分(一组相关服务共用一个KeyVault);
  • 注意事项:拆分后会增加管理复杂度,需维护多个KeyVault的权限、监控、备份流程,跨KeyVault访问密钥时需额外配置权限。

内容的提问来源于stack exchange,提问作者Marek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:52:37