如何在Visual Studio中为ASP.NET(.NET Framework 4.7.2)应用更换连接服务中的Azure Key Vault账户
针对ASP.NET (.NET Framework 4.7.2) 更换Azure Key Vault订阅及实例的解决方案
我完全懂你现在的头疼之处——用VS连接服务找不到配置页面,还得严格遵循从web.config读取配置的架构要求,不能自己瞎写读取逻辑。下面给你几个贴合场景的可行方案:
方案一:手动更新web.config的Key Vault配置块(最直接符合架构要求)
ASP.NET Framework 4.7.2是通过Microsoft.Configuration.ConfigurationBuilders.Azure这个NuGet包来实现从Key Vault读取配置的,你只需要修改web.config里的对应节点即可:
- 先确认项目已安装
Microsoft.Configuration.ConfigurationBuilders.Azure包(如果没装,直接在NuGet包管理器里搜索安装适配4.7.2的版本) - 打开web.config,找到
<configBuilders>节点下的AzureKeyVault配置项,替换成新的正式Key Vault信息:
假设你之前用服务主体认证,原来的配置是:
修改为正式环境的配置:<configBuilders> <builders> <add name="AzureKeyVault" vaultName="demo-keyvault" clientId="old-service-principal-id" clientSecret="old-service-principal-secret" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure" /> </builders> </configBuilders>
如果用托管标识(比如Azure App Service的系统分配标识),可以去掉clientId和clientSecret,加上<configBuilders> <builders> <add name="AzureKeyVault" vaultName="prod-keyvault" clientId="new-prod-service-principal-id" clientSecret="new-prod-service-principal-secret" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure" /> </builders> </configBuilders>useManagedIdentity="true":<add name="AzureKeyVault" vaultName="prod-keyvault" useManagedIdentity="true" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure" /> - 给新Key Vault配置正确的访问策略:无论是服务主体还是托管标识,都要赋予它
Get和List机密/密钥的权限,否则应用会无法读取配置
方案二:修复connectedService.json让VS连接服务识别新配置
如果希望后续能通过VS界面管理Key Vault配置,可以手动修复项目根目录下的connectedService.json:
- 打开这个文件(如果是空文件就直接替换内容),填入新订阅和Key Vault的信息:
{ "ProviderId": "Microsoft.Azure.KeyVault", "Version": "1.0", "Name": "Azure Key Vault", "InstanceId": "/subscriptions/{你的新订阅ID}/resourceGroups/{正式环境资源组名}/providers/Microsoft.KeyVault/vaults/{正式Key Vault名}", "Properties": { "vaultName": "{正式Key Vault名}", "subscriptionId": "{你的新订阅ID}", "resourceGroup": "{正式环境资源组名}" } } - 保存文件后重启Visual Studio,再打开「连接服务」面板,应该就能识别到新的Key Vault配置了(不过核心还是web.config的配置要正确,这个操作只是让VS界面能正常显示)
方案三:提前验证新Key Vault的访问权限
为了避免部署后出问题,建议先用Azure CLI或PowerShell验证新Key Vault的访问权限:
- 用Azure CLI切换到新订阅:
az account set --subscription {你的新订阅ID} - 测试访问新Key Vault的机密:
az keyvault secret list --name {正式Key Vault名}
如果能正常列出机密,说明权限配置没问题;如果报错,先检查服务主体/托管标识的访问策略是否正确配置
内容的提问来源于stack exchange,提问作者Rick_Barb
相关产品推荐
相关产品推荐

