【问题标题】:How to use DefaultAzureCredential in both local and hosted Environment (Azure and On-Premise) to access Azure Key Vault?如何在本地和托管环境(Azure 和本地)中使用 DefaultAzureCredential 访问 Azure Key Vault?
【发布时间】:2022-01-12 13:38:05
【问题描述】:

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

因此我通过 VS -->Tools> Options-->Azure Service Authentication-->Account Selection--> "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,如何在不更改任何代码的情况下使用身份 AD App 访问密钥库。我们已注册 AD 应用程序,该应用程序具有对该特定 Vault 的读取权限。

我希望代码能够无缝地用于本地和 Azure。

【问题讨论】:

    标签: .net-5 azure-keyvault azure-managed-identity defaultazurecredential


    【解决方案1】:

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

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

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

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

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

    1. 如果我将此 Web 应用程序部署到 Azure,如何在不更改任何代码的情况下使用身份 AD 应用程序访问密钥保管库。我们有广告应用 已注册并拥有此保险柜的读取权限

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

    【讨论】:

    • 感谢@RamaraoAdapa-MT 的快速回复。如果我们注册 AD 应用程序并在 Keyvault 的访问策略中分配此应用程序,并且如果在本地服务器中添加 AZURE_CLIENT_ID、AZURE_TENANT_ID 和 AZURE_CLIENT_SECRET,那么相同的代码是否可以工作。如果我错了,请纠正我
    • 是的,它会起作用的。因为 defaultazurecredential 首先检查环境凭据
    猜你喜欢
    • 2020-07-22
    • 2020-03-10
    • 2021-06-08
    • 2021-07-29
    • 2021-04-29
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多