如果密钥秘密中的值更改,则密钥库的值不会更新,因为它会为密钥生成新版本

时间:2019-04-03 05:51:51

标签: c# azure-functions azure-keyvault appsettings

下面是我面临的Key-Vault问题。 我有一个Key-Vault,其中存储了一些在Web应用中使用的密钥以及使用 @ Microsoft.KeyVault(SecretUri =) 密码的价值将每三天使用一次自动更改。这也将更改版本号(GUID),然后应用程序设置值(在“主要”和“辅助”的情况下至少为1)将变为无效。 有什么方法可以在应用程序设置中从KeyVault引用最新值。 在所有网站上更新应用程序设置将是一个繁琐的过程。

3 个答案:

答案 0 :(得分:3)

对于我的App服务,使用以下格式的Key Vault参考(没有版本)确实很成功:

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

但是,我确实必须停止并启动(而不是重新启动)App Service才能从密钥库中提取新的机密值。

答案 1 :(得分:2)

关键保险柜参考当前处于预览状态。

Key Vault引用的格式为@ Microsoft.KeyVault({referenceString}),其中{referenceString}被以下选项之一替代:

  1.   

    SecretUri = secretUri

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

  1.   

    VaultName = vaultName; SecretName = secretName; SecretVersion = secretVersion

其中VaultName应该是您的Key Vault资源的名称。 SecretName应该是目标机密的名称。 SecretVersion应该是要使用的机密版本。

例如,完整的参考文件应如下所示:

  

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

或者:

  

@ Microsoft.KeyVault(VaultName = myvault; SecretName = mysecret; SecretVersion = ec96f02080254f109c51a1f14cdb1931)

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

答案 2 :(得分:0)

使用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#中的代码中这样做或多或少是相同的(或至少是可能的)。不太确定Web应用程序的设置= \。

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