我有一个带有
SqlConnectionStr
设置的 Azure 函数,该值是使用以下语法从 Azure Key Vault 的密钥中获取的:
@Microsoft.KeyVault(VaultName=MyKV;SecretName=SqlConnectionStr)
在配置面板中,我可以看到它正确地将其理解为“密钥保管库参考”,但是,当我更新密钥保管库中的
SqlConnectionStr
秘密值时,我可以看到Azure功能仍在使用旧值。已经过去2个小时了,还是没有任何动静。使用该值的代码:
_log.LogInformation($"opening SQL connection");
var cstr = Environment.GetEnvironmentVariable("SqlConnectionStr", EnvironmentVariableTarget.Process);
using var sqlConnection = new SqlConnection(cstr);
...
同时,我多次尝试重新启动Azure Function,但没有帮助。这是在生产环境中,几天前我在测试中做了同样的事情并经历了相同的行为,在一段时间(几小时)后,新值终于被函数使用。
是我做错了什么吗?这是正常行为吗?我是否在我的场景中滥用了 Azure Key Vault?
按照文档中所述旋转需要时间:
如果参考中未指定机密版本,应用程序将使用密钥保管库中存在的最新版本。当有新版本可用时(例如发生轮换事件),应用程序会在 24 小时内自动更新并开始使用最新版本。延迟是因为应用服务会缓存密钥保管库引用的值并每 24 小时重新获取一次。对应用程序的任何配置更改都会导致应用程序重新启动并立即重新获取所有引用的机密。
您还可以通过在引用中添加
SecretVersion
来强制它使用您的秘密的特定版本。