有没有办法通过 Visual Studio 上的托管标识在本地主机中使用 Azure Key Vault?

Oso*_*nin 5 c# azure azure-keyvault azure-managed-identity .net-6.0

我想将 Azure Key Vault 添加到我的 C# 应用程序,但我想在本地运行代码。有可能的办法吗?很多文档都说 AKV 仅适用于 Azure 环境,但这里中表示,他们在演示中显示的示例代码也可以在本地主机中执行。

目前使用的是Net6版本。为了创建我的 Azure 资源,我按照第一个链接中的视频教程进行操作。他们遵循这个模式。 描述使用托管身份时使用的流程

因此,您可以在这里看到我的 Key Vault 访问策略。RBAC 已检查。 我的 kv 访问策略

托管身份已分配给 Key Vault 作为 Key Vault 管理员的角色(用于测试目的)

我的托管身份在“身份”选项卡上的“应用服务”中被分配为“用户分配的托管身份”。

我的 Program.cs 如下所示:

var userAssignedClientId = "Some guid";

if (!string.IsNullOrEmpty(MyVaultUri))
{
    builder.Configuration.AddAzureKeyVault(
        new Uri(MyVaultUri),
        new DefaultAzureCredential(new DefaultAzureCredentialOptions { ManagedIdentityClientId = userAssignedClientId }));
}
Run Code Online (Sandbox Code Playgroud)

我已经声明了环境变量AZURE_TENANT_ID,,AZURE_CLIENT_IDAZURE_CLIENT_SECRET块包 Azure.Identity v1.4.0、Azure.Security.KeyVault.Secrets v4.3.0 安装。

这就是我在 localhost 中收到的错误:Azure.RequestFailedException: '调用者无权对资源执行操作。

在此输入图像描述

Inn*_*tum 1

当想要连接到在线资源时,Microsoft 提供了一些可用选项。其中之一是InteractiveBrowserCredential,它会提示您输入凭据的问题。

另一个是DefaultAzureCredential,乍一看很具有欺骗性,因为默认值是什么?根据文档,它会尝试六种不同类型的授权,然后在授权失败时返回错误。请注意,如果其中一种类型被禁用,则不会使用它。

如果您在 Visual Studio 中使用与 Portal.azure.com 相同的凭据登录,则身份验证将无缝进行。

另请注意,当您想在本地主机上使用环境变量时。最佳实践是使用保存变量的设置文件,而不是在计算机上定义这些变量。不要忘记将该设置文件添加到 gitignore 文件中。您不希望将这些秘密发布到公共存储库。