我的 .NET6 网络应用程序在其配置中使用密钥库秘密引用。 引用设置如下:
@Microsoft.KeyVault(SecretUri=https://myapp.vault.azure.net/secrets/My--Secret)
应用程序正在使用发布管道部署。部署还允许应用程序使用应用程序的 AD 身份访问密钥库(目前使用旧版 RM):
$servicePrincipalId = $(Get-AzureRmADServicePrincipal -DisplayName $servicePrincipalName).Id
Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $servicePrincipalId
应用程序部署后一切正常。它也可以在没有问题的情况下重新启动。
但是,当我将新版本添加到引用的机密并重新启动 Web 应用程序时,它会显示该特定密钥的访问错误:
Key Vault reference was not able to be resolved because site was denied access to Key Vault reference's vault.
我尝试了很多东西:
总而言之,为应用程序授予修改后的 keyvault 机密权限的唯一方法是重新部署应用程序。
我可以使用同一应用程序的两个实例在两个 Azure 订阅中可靠地重现该问题。
这是设计使然的正常行为还是我的应用程序以某种奇怪的方式损坏?授予应用程序所有秘密版本(包括未来版本)权限的可靠程序应该是什么?
我尝试了以下方法从 Azure 密钥保管库中检索机密,它对我有用。
第 1 步: 使用 .net 6 运行时创建 azure 应用程序服务。
第 2 步: 启用系统分配托管身份并记下对象(主体)ID。
第 3 步: 在 Azure 密钥保管库中添加 访问策略。 导航到访问策略并单击 create 按钮。
选择所需的权限并单击下一步。
粘贴在步骤 2 中复制的对象 ID。
点击 Review + create.
第 4 步: 创建秘密并在 azure web 应用程序中引用它。
接下来,导航到 Web 应用 > 配置添加密钥。
解密需要1-2分钟
我已经通过多次更改秘密值来验证它。我没有发现任何问题。