如何在本地和托管环境(Azure 和 On-Premise)中使用 DefaultAzureCredential 访问 Azure Key Vault?
我们有一个 Web API(.NET 5),可从 Azure KeyVault 访问一些机密。
在用于开发的本地计算机中,由于我是新创建的保管库的所有者,因此我的电子邮件具有访问 KeyVault 的权限。
因此,我通过 VS 选择了我的帐户 -->工具> 选项-->Azure 服务身份验证-->帐户选择--> “ [email protected] ”
我有以下代码从 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,如何使用身份 AD App 访问密钥保管库而无需进行任何代码更改。我们已经注册了 AD 应用,该应用具有对此特定 Vault 的读取权限。
我希望代码能够无缝地在本地和 Azure 上运行。
DefaultAzureCredential 是一种连接 Azure Active Directory 并从中检索令牌的全新统一方式,可与需要令牌的资源一起使用
DefaultAzureCredential 根据应用程序正在运行的环境获取令牌
如果启用以下凭据类型,将按顺序尝试 - EnvironmentCredential 、 ManagedIdentityCredential 、 SharedTokenCacheCredential 、 InteractiveBrowserCredential
- 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)
- 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
您可以为您的 Web 应用启用系统分配的托管标识。在 Azure Key Vault 中为此标识添加访问策略以读取机密。现在,无需对代码进行任何更改,您的 Web 应用就可以读取密钥保管库机密