繁体   English   中英

使用应用程序客户端密码访问 azure 密钥保管库密码

[英]Access azure key vault secret with application client secret

问题陈述:在 Web/控制台 c# 应用程序中以编程方式检索和使用存储在 azure 密钥保管库中的敏感值(比如数据库连接字符串)。

我了解您可以在 AAD 中注册应用程序并使用其客户端 ID 和客户端密码以编程方式生成广告令牌,该令牌可用于调用/访问 azure 密钥保管库密码。

我的困惑是客户端机密本身是一个敏感的“密码”,您希望将其存储在密钥库中。 一旦有人知道客户端机密,他们就可以访问密钥保管库中的所有机密。 那么创建一个新的秘密(客户端秘密)来存储和访问原始秘密有什么意义呢? (有人可以解释这背后的逻辑吗?谢谢!

这就是自举的问题。 你如何在不使用秘密的情况下访问秘密商店?

如果您在 Azure 中运行您的应用程序,答案很简单。 使用托管身份

如果未在 Azure 中运行,则交互式应用可以代表当前用户访问 Key Vault。 这确实要求用户有权访问 Key Vault 机密。

另一种方法是使用证书而不是客户端密码。

如果您在 Azure 上托管您的应用程序,则可以使用托管身份在服务之间执行身份验证。 一旦 Azure 配置完成,您需要在您的应用中添加以下内容:它只需要存储 Azure KeyVault URI - 作为 env 变量会更好。

以下代码将 Azure KeyVault 与 AppConfiguration 一起使用,因此本地appsettings.json文件为空:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureAppConfiguration((hostingContext, configBuilder) =>
            {
                if (hostingContext.HostingEnvironment.IsDevelopment()) return;

                AddAzureKeyVault(configBuilder);

                var configRoot = configBuilder.Build();
                AddAzureAppConfiguration(configBuilder, configRoot);
            });

        webBuilder.UseStartup<Startup>();
    });

private static void AddAzureKeyVault(IConfigurationBuilder configBuilder)
{
    var azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");

    configBuilder.AddAzureKeyVault(
        $"https://{keyVaultName}.vault.azure.net/",
        keyVaultClient,
        new DefaultKeyVaultSecretManager());
}

private static void AddAzureAppConfiguration(IConfigurationBuilder configBuilder, IConfigurationRoot configRoot)
{
    var appConfigName = configRoot["AppConfiguration-Name"];
    configBuilder.AddAzureAppConfiguration(appConfigName);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM