Azure KeyVault Secret Get 引发身份验证错误

use*_*749 0 c# azure-keyvault

我正在设置 KeyVault 以从我的 .NET Azure WebApp 中删除机密并通过 CredScan,据我所知,一切都已正确连接。

KeyVault 与应用程序位于同一资源组中,并具有所需的机密。应用服务在 KeyVault 的访问策略中设置了明确的读取权限。按照文档,所有正确的参数都用于在代码中创建 API 客户端。

但是,当我使用标准 API 调用实际使用客户端访问机密时,即

SecretClient client = new SecretClient(keyVaultURI, new DefaultAzureCredential());
string secret = client.GetSecret(secretName).Value.Value;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

DefaultAzureCredential 无法从包含的凭据中检索令牌。\r\nEnvironmentCredential 身份验证不可用。环境变量未完全配置。\r\nManagedIdentityCredential 身份验证不可用,找不到托管标识终结点。\r\nSharedTokenCacheCredential 身份验证不可用。用户 令牌获取失败。确保已使用支持 Azure 单点登录的开发人员工具进行身份验证。

我猜一定有一些我不知道的必需配置步骤或设置。

Jim*_* Xu 5

我总结了整个解决方案如下。

如果要DefaultAzureCredential在 Azure 应用服务中访问 Azure Key Vault,则需要启用 MSI 并在 Azure Key Vault 中为您的 MSI 配置正确的访问策略。更多详情请参考文档

详细步骤如下。

一种。启用系统分配的 MSI

  • 向下滚动到左侧导航中的“设置”组。
  • 选择身份
  • 在“系统分配”选项卡中,将“状态”切换为“开”。点击保存在此处输入图片说明

湾 配置访问策略

  • 在 Azure 门户的“搜索资源对话框”中搜索您的 Key Vault 。
  • 选择“概览”,然后单击访问策略
  • 单击“添加新”,从“从模板配置的下拉列表中选择“秘密管理
  • 单击“选择主体”,然后在搜索字段中输入您之前创建的 Web 应用程序 MSI 的对象 ID。在结果列表中选择 Web 应用程序,然后单击“选择”
  • 单击“确定”添加新的访问策略,然后单击“保存”保存访问策略