首页 > 解决方案 > 如何从 /mnt/secret-store/DataAccessSettings--ConnectionSettings--ConnectionString 读取机密

问题描述

我正在寻找如何从/mnt/secret-store/DataAccessSettings--ConnectionSettings--ConnectionString. 我的应用程序无法直接访问 azure key vault,机密已存储在运行 pod 上 /mnt/secret-store 目录中的 pod 中。

所有这些都有效。我的问题是如何让我的 C# 应用程序获取此设置。我已经查看了所有内容,只找到了一个示例,其中有人仍在使用 Configuration[connectionString] 但我看不到他们如何配置他们的应用程序以从中加载而不是从 appsettings.json 加载

Microsoft 似乎也有几个示例,您可以直接从键值加载,这就是我现在需要做的。

我唯一能想到的就是这样的事情,这似乎真的是错误的。我不敢相信没有办法直接将这些加载到配置中

public string LoadSecret(string name)
    {
        var lines = File.ReadAllLines(Path.Combine(_pathToSecrets, name));

        return lines.FirstOrDefault(l => !string.IsNullOrWhiteSpace(l));
    }

标签: c#azureazure-keyvault

解决方案


由于找不到,我最终创建了自己的 ConfigurationProvider

所以现在我可以这样添加

CreateHostBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) => { config.AddAzureMountedSecretStore(); })
                .Build().Run();

它的主要部分只是加载文件本身并设置文件内容的值。

internal class AzureMntSecretStoreConfigurationFileParser
{
    private AzureMntSecretStoreConfigurationFileParser() { }

    public static KeyValuePair<string, string> Parse(string file)
        => new AzureMntSecretStoreConfigurationFileParser().ParseFile(file);

    private KeyValuePair<string, string> ParseFile(string file)
    {
        var fileName = Path.GetFileName(file);
        var secretName = fileName.Replace("--", ":");

        var value = File.ReadAllText(file);

        return new KeyValuePair<string, string>(secretName, value);
    }

}

这样,添加到系统中的任何新机密都将在系统运行时自动加载,而不必更改代码本身。


推荐阅读