首页 > 解决方案 > 使用用户分配的托管标识 (MSI) 从本地 Service Fabric 群集访问 Key Vault

问题描述

我想通过托管服务标识 (MSI) 从我的 Service Fabric 应用程序访问 Key Vault。我已在 Azure 门户中的虚拟机规模集上启用 MSI,并授予它访问我的 Key Vault 资源的权限。这就像云中的魅力一样。但是,我的本地开发环境存在问题。

据我了解,我可以授予自己对 Key Vault 的访问权限并在 Azure CLI 中运行 az login。唉,这在本地 Service Fabric 群集中运行应用程序时不起作用。我在服务结构中使用 .net core 2.1 并得到下面提到的异常。

Azure.Identity.AuthenticationFailedException:DefaultAzureCredential 未能从包含的凭据中检索令牌。

标签: asp.net-coreazure-service-fabricazure-keyvaultazure-managed-identity

解决方案


服务可能在内置的“NetworkService”帐户下运行,该帐户无法访问 CLI 以获取凭据,因为它已在您的用户会话中运行。

尝试创建 机器级环境变量来访问保管库:

  • 使用密码创建服务主体。按照此处的步骤创建服务主体并向其授予对 Key Vault 的权限。
  • 将名为 AzureServicesAuthConnectionString 的环境变量设置为 RunAs=App;AppId=AppId;TenantId=TenantId;AppKey=Secret。您需要将 AppId、TenantId 和 Secret 替换为第 1 步中的实际值。
  • 在本地开发环境中运行应用程序。无需更改代码。AzureServiceTokenProvider 将使用此环境变量并使用服务主体向 Azure AD 进行身份验证。

不要忘记重启,所以环境变量会添加到所有进程中。


推荐阅读