如何在本地和托管环境(Azure 和内部部署)中使用 DefaultAzureCredential 来访问 Azure Key Vault?

How to use DefaultAzureCredential in both local and hosted Environment (Azure and On-Premise) to access Azure Key Vault?

我们有一个 Web api(.NET 5),可以从 Azure KeyVault 访问一些机密。
在用于开发的本地计算机中,由于我是创建的新保管库的所有者,因此我的电子邮件具有访问密钥保管库的权限。

因此,我通过 VS --> 工具 > 选项 --> Azure 服务身份验证 --> 帐户选择 --> "myemail@.com"

选择了我的帐户

我有以下代码可以从 Keyvault 获取机密并通过配置进行访问,就像我们访问 appsettings 值一样。

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, config) =>
        {
            var appSettings = config.Build();
            var credentialOptions = new DefaultAzureCredentialOptions();
            var credential = new DefaultAzureCredential(credentialOptions);
            config.AddAzureKeyVault(new Uri(appSettings["Url:KeyVault"]), credential);
        })
       .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

我们在服务和控制器层访问像 _configuration["secret"] 这样的秘密值。

我的查询是

1,如果我将此代码部署到本地服务器,它将如何工作(开发环境是本地服务器)?

2,如果我将此 Web API 部署到 Azure,如何在不更改任何代码的情况下使用 Identity AD App 访问密钥库。我们注册了 AD 应用程序,它具有对该特定 Vault 的读取权限。

我希望代码能够在本地和 Azure 上无缝运行。

DefaultAzureCredential 是从 Azure Active Directory 连接和检索令牌的新的统一方式,可以与需要它们的资源一起使用

DefaultAzureCredential 根据应用程序所在的环境获取令牌 运行

如果启用,将按顺序尝试以下凭据类型 - EnvironmentCredentialManagedIdentityCredentialSharedTokenCacheCredential, InteractiveBrowserCredential

  1. IF I move deploy this code to on premise server how it will work (dev env is on-premises server)

在开发机器(本地服务器)中执行此操作时,您需要首先配置环境,将变量 AZURE_CLIENT_ID、AZURE_TENANT_ID 和 AZURE_CLIENT_SECRET 设置为适当的值对于您的服务主体(在 Azure AD 中注册的应用程序)

  1. If I deploy this web app to Azure, how to use identity AD App to access the key vault without any code change. We have AD app registered which have read access to this Vault

您可以为您的网络应用启用系统分配的托管标识。在 Azure Key Vault 中为此身份添加访问策略以读取机密。现在,无需对您的代码进行任何更改,您的 Web 应用程序就能够读取密钥保管库机密