本地IIS托管Web应用如何从Azure Key Vault读取web.config机密配置
问题根因
VS自带的IIS Express运行时会默认使用当前登录Windows的个人账号身份发起Azure Key Vault请求,你已经为该账号配置了Key Vault访问策略,所以本地调试时可以正常读取机密。部署到本地IIS后,Web应用由对应站点的应用程序池标识账号运行,该账号没有关联有效的Azure访问凭据,也未被添加到Key Vault的访问策略中,因此读取配置失败。
解决方案
快速验证方案(适合开发测试环境)
直接将IIS应用池的运行身份改为你本地调试用的个人账号即可:
- 打开IIS管理器,找到部署站点对应的应用程序池,右键选择「高级设置」
- 找到「进程模型」下的「标识」项,点击右侧的省略号按钮
- 选择「自定义账户」,点击「设置」,输入你已经配置过Key Vault访问权限的Windows账号和密码,保存配置
- 重启应用池和站点即可验证
生产环境稳定方案
使用Azure AD服务主体做身份认证,步骤如下:
- 在Azure AD中创建服务主体,记录生成的
客户端ID、客户端机密、租户ID - 在Azure Key Vault的访问策略中,为该服务主体添加机密读取、机密列表权限,保存策略
- 登录IIS所在的服务器,配置系统级环境变量:
- 变量名
AZURE_CLIENT_ID,值为服务主体客户端ID - 变量名
AZURE_TENANT_ID,值为Azure AD租户ID - 变量名
AZURE_CLIENT_SECRET,值为服务主体客户端机密
- 变量名
- 重启IIS应用池,必要时重启服务器确保环境变量生效
- 访问站点验证配置读取是否正常
临时测试方案
如果只是临时测试,可以直接在IIS服务器上安装Azure CLI,打开管理员命令行执行az login,用有Key Vault访问权限的账号完成登录,凭据会自动缓存供IIS应用调用,该方案仅适用于临时验证,不建议生产环境使用。
内容的提问来源于stack exchange,提问作者RajBeniwal
相关产品推荐
相关产品推荐

