我想通过托管服务标识(MSI)从我的Service Fabric应用程序访问密钥库。我已在Azure门户中设置的虚拟机规模上启用MSI,并为其提供了对我的Key Vault资源的访问权限。这就像云中的魅力一样。但是,我的本地开发环境遇到了问题。
据我了解,我可以授予自己对Key Vault的访问权限,并在Azure CLI中运行z登录。 las,这在本地Service Fabric群集中运行应用程序时不起作用。 我在服务结构中使用.net core 2.1,并遇到以下提到的异常。
Azure.Identity.AuthenticationFailedException:DefaultAzureCredential无法从包含的凭据中检索令牌。
答案 0 :(得分:0)
服务可能在内置的“ NetworkService”帐户下运行,该帐户无法访问CLI,因为它已在您的用户会话中运行。
尝试使用creating 计算机级别环境变量来访问Vault:
- 使用密码创建服务主体。请按照此处的步骤创建服务主体并将其授予Key Vault权限。
- 将名为AzureServicesAuthConnectionString的环境变量设置为RunAs = App; AppId = AppId; TenantId = TenantId; AppKey = Secret。你需要 将步骤1中的实际值替换为AppId,TenantId和Secret。
- 在本地开发环境中运行应用程序。无需更改代码。 AzureServiceTokenProvider将使用此 环境变量并使用服务主体进行身份验证 Azure AD。
别忘了重新启动,因此将环境变量添加到所有进程中。
答案 1 :(得分:0)
如document所显示的关于DefaultAzureCredential
的内容,环境和托管身份已部署为服务认证。 Azure CLI需要通过az login
命令使用您的Azure帐户登录。
因此,环境和托管身份适合您。例如,使用环境需要首先设置环境变量,请参见here。然后,您可以使用DefaultAzureCredential创建一个秘密客户端。
// Create a secret client using the DefaultAzureCredential
var client = new SecretClient(new Uri("https://myvault.azure.vaults.net/"), new DefaultAzureCredential());