如果机密中的值发生更改,密钥保管库值不会更新,因为它会为机密生成新版本



下面是我面临的密钥保管库问题。  我有一个密钥保管库,它存储了一些在 Web 应用程序和函数中使用的密钥 @Microsoft.KeyVault(SecretUri=)  机密的值将使用自动化每三天更改一次。这也将更改版本号 (GUID),然后应用设置值(在主设备和辅助的情况下至少一个)将变为无效。 有什么方法可以在应用设置中引用 KeyVault 中的最新值。 更新所有网站中的应用程序设置将是一个乏味的过程。

对于我的应用服务,我确实成功地使用了以下表单中的密钥保管库引用,但没有版本:

@Microsoft.KeyVault(SecretUri=https://<vault_name>.vault.azure.net/secrets/<secret_name>/)

但是,我必须停止并启动(而不是重启)应用服务,才能从密钥保管库拉取新的机密值。

密钥保管库引用目前为预览版。

密钥保管库引用的格式为 @Microsoft.KeyVault({referenceString}),其中 {referenceString} 替换为以下选项之一:

  1. SecretUri=secretUri

其中SecretUri应该是密钥保管库中机密的完整数据平面 URI,包括版本,例如 https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931

  1. VaultName=vaultName;机密名称=机密名称;秘密版本=秘密版本

其中VaultName应为密钥保管库资源的名称。SecretName应该是目标密钥的名称。SecretVersion应该是要使用的密钥的版本。

例如,完整的引用如下所示:

@Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/ec96f02080254f109c51a1f14cdb1931)

或者:

@Microsoft.KeyVault(VaultName=myvault;秘密名称=我的秘密;秘密版本=ec96f02080254f109c51a1f14cdb1931)

在当前预览版中,需要versions。轮换secrets时,您需要更新应用程序配置中的版本。

重新启动应用服务不会立即生效,所以我就是这样做的。

  1. 从密钥保管库中删除机密变量。
  2. 清除已删除的变量(以便您可以创建具有相同名称的新变量)
  3. 使用相同的名称和新值再次创建密钥变量。
  4. 可选:重新保存具有@Microsoft.KeyVault(SecretUri=...的任何配置设置,以便刷新其内部。虽然我们没有改变任何东西,但有时你会收到一个可怕的错误 不支持关键字:@microsoft.keyvault(secreturi...等等等等

使用 Azure Python SDK,你可以执行以下操作:

kv_client.get_secret("https://%kvname%.vault.azure.net/", name, KeyVaultId.version_none)
# or this
kv_client.get_secret("https://%kvname%.vault.azure.net/", name, "")

这两者都将提取最新版本的密钥。 所以我假设在 C# 中的代码中执行此操作或多或少是相同的(或至少是可能的)。不太确定网络应用程序的应用程序设置=\。

您可能可以使用某种自动化(如powershell)来更新这些内容。

在 Web 应用>配置>连接字符串上,只需更新属性的当前值即可,然后返回到原始值即可解决问题。无需重新启动服务。

最新更新