You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure虚拟机上的.NET Core Web API中访问Azure Key Vault密钥

解决Azure Ubuntu虚拟机上.NET Core Web API访问Key Vault的无凭据认证问题

核心方案:使用Azure虚拟机的系统托管标识

系统托管标识由Azure自动管理,无需手动配置或存储任何租户ID、客户端ID、密钥,完全符合你的要求。


步骤1:为Ubuntu虚拟机启用系统托管标识

  1. 登录Azure门户,找到目标Ubuntu虚拟机
  2. 进入「标识」选项卡,切换到「系统分配」标签页
  3. 将「状态」切换为「启用」,点击「保存」确认

步骤2:为托管标识分配Key Vault访问权限

  1. 打开你的Key Vault资源,进入「访问策略」选项卡
  2. 点击「添加访问策略」:
    • 在「密钥权限」中勾选你需要的权限(比如「获取」「列表」,根据API实际需求调整)
    • 在「主体」搜索框中输入你的虚拟机名称,选中对应的系统托管标识
  3. 点击「添加」,再点击「保存」完成策略配置

步骤3:确认.NET Core代码无需修改

你本地使用的DefaultAzureCredential已经支持自动识别Azure环境中的托管标识,代码保持不变即可:

using Azure.Security.KeyVault.Secrets;
using Azure.Identity;

// 初始化SecretClient
var kvUri = new Uri("https://<你的KeyVault名称>.vault.azure.net/");
var secretClient = new SecretClient(kvUri, new DefaultAzureCredential());

// 读取密钥示例
var secret = await secretClient.GetSecretAsync("<你的密钥名称>");
var secretValue = secret.Value.Value;

注意:不要在appsettings.json中添加任何TenantId、ClientId、ClientSecret相关配置,DefaultAzureCredential会自动按优先级尝试托管标识认证。

步骤4:Ubuntu虚拟机上的部署与验证

  1. 将编译好的.NET Core Web API发布包部署到Ubuntu虚拟机(可使用scp、Git或CI/CD工具)
  2. 确保Ubuntu已安装对应版本的.NET Runtime(执行dotnet --version确认)
  3. 配置API以服务方式运行(例如使用systemd),无需额外配置环境变量或凭据
  4. 启动API后,验证是否能正常读取Key Vault密钥

常见故障排查

  • 权限问题:检查Key Vault访问策略中是否正确添加了VM的系统托管标识,权限是否匹配
  • 网络问题:如果Key Vault设置了防火墙规则,需允许虚拟机所在的VNet或公网IP访问
  • 日志排查:在API日志中查看DefaultAzureCredential的认证流程,确认是否尝试了ManagedIdentityCredential并成功获取令牌

内容的提问来源于stack exchange,提问作者Pearl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:12:20